diff --git a/packages/bots/pyth-updater/src/config/index.ts b/packages/bots/pyth-updater/src/config/index.ts index 921537b50..ff28ebb6e 100644 --- a/packages/bots/pyth-updater/src/config/index.ts +++ b/packages/bots/pyth-updater/src/config/index.ts @@ -1,13 +1,7 @@ -import { linea, mode, neon, zkevm } from '@ionicprotocol/chains'; +import { mode } from '@ionicprotocol/chains'; -import { pythConfig as lineaPythConfig } from './linea'; import { pythConfig as modePythConfig } from './mode'; -import { pythConfig as neonPythConfig } from './neon'; -import { pythConfig as zkevmPythConfig } from './zkevm'; export const chainIdToConfig = { - [neon.chainId]: neonPythConfig, - [linea.chainId]: lineaPythConfig, - [zkevm.chainId]: zkevmPythConfig, [mode.chainId]: modePythConfig, }; diff --git a/packages/bots/pyth-updater/src/config/linea.ts b/packages/bots/pyth-updater/src/config/linea.ts deleted file mode 100644 index cddc78126..000000000 --- a/packages/bots/pyth-updater/src/config/linea.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { PythAssetConfig } from '../types'; - -import { pythConfig as commonPythConfig } from './common'; - -export const pythConfig: PythAssetConfig[] = [ - ...commonPythConfig, - { - // BUSD/USD - priceId: '0x5bc91f13e412c07599167bae86f07543f076a638962b8d6017ec19dab4a82814', - configRefreshRateInSeconds: 3600, - validTimePeriodSeconds: 86400, // 24 hours - deviationThresholdBps: 100, // 2% - }, - { - // BNB/USD - priceId: '0x2f95862b045670cd22bee3114c39763a4a08beeb663b145d283c31d7d1101c4f', - configRefreshRateInSeconds: 3600, - validTimePeriodSeconds: 86400, // 24 hours - deviationThresholdBps: 250, // 2% - }, - { - // MATIC/USD - priceId: '0x5de33a9112c2b700b8d30b8a3402c103578ccfa2765696471cc672bd5cf6ac52', - configRefreshRateInSeconds: 3600, - validTimePeriodSeconds: 86400, // 24 hours - deviationThresholdBps: 250, // 2% - }, -]; diff --git a/packages/bots/pyth-updater/src/config/neon.ts b/packages/bots/pyth-updater/src/config/neon.ts deleted file mode 100644 index 6fc341d91..000000000 --- a/packages/bots/pyth-updater/src/config/neon.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { PythAssetConfig } from '../types'; - -import { pythConfig as commonPythConfig } from './common'; - -export const pythConfig: PythAssetConfig[] = [ - ...commonPythConfig, - { - // NEON/USD - priceId: '0xd82183dd487bef3208a227bb25d748930db58862c5121198e723ed0976eb92b7', - configRefreshRateInSeconds: 3600, - validTimePeriodSeconds: 86400, // 24 hours - deviationThresholdBps: 100, // 1% - }, -]; diff --git a/packages/bots/pyth-updater/src/config/zkevm.ts b/packages/bots/pyth-updater/src/config/zkevm.ts deleted file mode 100644 index abed75c64..000000000 --- a/packages/bots/pyth-updater/src/config/zkevm.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { PythAssetConfig } from '../types'; - -export const pythConfig: PythAssetConfig[] = [ - { - // ETH/USD - priceId: '0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace', - configRefreshRateInSeconds: 3600, - validTimePeriodSeconds: 86400, // 24 hours - deviationThresholdBps: 200, // 1% - }, - { - // USDC/USD - priceId: '0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a', - configRefreshRateInSeconds: 3600, - validTimePeriodSeconds: 86400, // 24 hours - deviationThresholdBps: 100, // 1% - }, -]; diff --git a/packages/chains/deployments/bob.json b/packages/chains/deployments/bob.json new file mode 100644 index 000000000..0c263aab7 --- /dev/null +++ b/packages/chains/deployments/bob.json @@ -0,0 +1,165 @@ +{ + "name": "bob", + "chainId": "60808", + "contracts": { + "AddressesProvider": { + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108" + }, + "AddressesProvider_Implementation": { + "address": "0xBbDcA7858ac2417b06636F7BA35e7d9EA39402ea" + }, + "AddressesProvider_Proxy": { + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108" + }, + "AuthoritiesRegistry": { + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6" + }, + "AuthoritiesRegistry_Implementation": { + "address": "0xcA0aE3039B8825Cd7A968ceda6D99a49458722aF" + }, + "AuthoritiesRegistry_Proxy": { + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6" + }, + "CErc20Delegate": { + "address": "0xb1d020336794CEdE46F644A6e2bC8Df5195aD1bB" + }, + "CErc20PluginDelegate": { + "address": "0x8b2B6a9dC8Cd73309Cef8d64920831d4C73F43a7" + }, + "CErc20PluginRewardsDelegate": { + "address": "0x8C58ECb9C0050824177f4e1Cd71C335421d4aeA2" + }, + "CErc20RewardsDelegate": { + "address": "0xE1A3006be645a80F206311d9f18C866c204bA02f" + }, + "CTokenFirstExtension": { + "address": "0xbEDA60c0ac487e3081e539c8074894AE64e282Ab" + }, + "ChainlinkPriceOracleV2": { + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf" + }, + "ChainlinkPriceOracleV2_Implementation": { + "address": "0x515B45c30dA768482d3ec8A9E1E73eDf14047a2d" + }, + "ChainlinkPriceOracleV2_Proxy": { + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf" + }, + "Comptroller": { + "address": "0x151af46d007Cb7E60759318Ec1553c3Bdd8b93dB" + }, + "ComptrollerFirstExtension": { + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57" + }, + "DefaultProxyAdmin": { + "address": "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B" + }, + "FeeDistributor": { + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0" + }, + "FeeDistributor_Implementation": { + "address": "0x9BAD1f7685f33ad855AE81089dFe79040864E2F6" + }, + "FeeDistributor_Proxy": { + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0" + }, + "FixedNativePriceOracle": { + "address": "0xd8d2D1195a548FE2ff69C31c4C90e54b263771c7" + }, + "GlobalPauser": { + "address": "0x1699a7b8983D35b9f401fb3cd0a883E3C6b0B937" + }, + "IonicFlywheelLensRouter": { + "address": "0x1E2812B4dEcA77B5dD7Af9f2D6ec40102bcffD02" + }, + "JumpRateModel": { + "address": "0x1D89E5ba287E67AC0046D2218Be5fE1382cE47b4" + }, + "LeveredPositionFactory": { + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1" + }, + "LeveredPositionFactoryFirstExtension": { + "address": "0x5d74800e977bFc8E14Eca28C9405BacbD091738E" + }, + "LeveredPositionFactorySecondExtension": { + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC" + }, + "LeveredPositionsLens": { + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC" + }, + "LeveredPositionsLens_Implementation": { + "address": "0xb6c55DF813C38635665151eE504837E1316f3654" + }, + "LeveredPositionsLens_Proxy": { + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC" + }, + "LiquidatorsRegistry": { + "address": "0xeC7D0330E86485474C13A2152Fa867ddd41Bb12B" + }, + "LiquidatorsRegistryExtension": { + "address": "0x6f307eA8Bcc55A00e46822058a12B8317488E534" + }, + "LiquidatorsRegistrySecondExtension": { + "address": "0x073D023D2A329067E5617973Ebd526D506F5F492" + }, + "LooplessFlywheelBooster": { + "address": "0x431C87E08e2636733a945D742d25Ba77577ED480" + }, + "MasterPriceOracle": { + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154" + }, + "MasterPriceOracle_Implementation": { + "address": "0x987F3103c976CAF5087087bbF99A7E389F22311c" + }, + "MasterPriceOracle_Proxy": { + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154" + }, + "OptimizedVaultsRegistry": { + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23" + }, + "OptimizedVaultsRegistry_Implementation": { + "address": "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794" + }, + "OptimizedVaultsRegistry_Proxy": { + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23" + }, + "PoolDirectory": { + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4" + }, + "PoolDirectory_Implementation": { + "address": "0xe451047f3A6C8Dc595Cf305DC21F32adD5fF42Fd" + }, + "PoolDirectory_Proxy": { + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4" + }, + "PoolLens": { + "address": "0xEF0E186A4E4E3E66601ae9A3e670491Ca7772f5F" + }, + "PoolLensSecondary": { + "address": "0x3242caC557419AA00270d5b11A7f6795dEBAd5a4" + }, + "PythPriceOracle": { + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115" + }, + "PythPriceOracle_Implementation": { + "address": "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73" + }, + "PythPriceOracle_Proxy": { + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115" + }, + "SimplePriceOracle": { + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48" + }, + "SimplePriceOracle_Implementation": { + "address": "0x239C8E4792F4D5A9bDD7769bA84A0E8dB1756c9b" + }, + "SimplePriceOracle_Proxy": { + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48" + }, + "SolidlySwapLiquidator": { + "address": "0x48bf6bd4B3d8b4E75863B5340b977E888BacE19a" + }, + "UniswapV3LiquidatorFunder": { + "address": "0x21a455cEd9C79BC523D4E340c2B97521F4217817" + } + } +} \ No newline at end of file diff --git a/packages/chains/src/arbitrum/addresses.ts b/packages/chains/src/arbitrum/addresses.ts deleted file mode 100644 index 5921a2636..000000000 --- a/packages/chains/src/arbitrum/addresses.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { UNISWAP_V3_ADDRESSES } from "../common/addresses"; - -import { assets } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: underlying(assets, assetSymbols.WETH), - W_TOKEN_USD_CHAINLINK_PRICE_FEED: "0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612", - UNISWAP_V2_ROUTER: "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - UNISWAP_V2_FACTORY: "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", - UNISWAP_V3_ROUTER: "0xE592427A0AEce92De3Edee1F18E0157C05861564", - PAIR_INIT_HASH: ethers.utils.hexlify("0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303"), - STABLE_TOKEN: underlying(assets, assetSymbols.USDC), - W_BTC_TOKEN: underlying(assets, assetSymbols.WBTC), - UNISWAP_V3: UNISWAP_V3_ADDRESSES -}; - -export default chainAddresses; diff --git a/packages/chains/src/arbitrum/assets.ts b/packages/chains/src/arbitrum/assets.ts deleted file mode 100644 index e1ef62fe2..000000000 --- a/packages/chains/src/arbitrum/assets.ts +++ /dev/null @@ -1,216 +0,0 @@ -import { assetSymbols, OracleTypes, SupportedAsset, SupportedChains } from "@ionicprotocol/types"; - -import { defaultDocs, wrappedAssetDocs } from "../common"; - -export const WBTC = "0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f"; -export const USDC = "0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8"; - -const BAL = "0x040d1EdC9569d4Bab2D15287Dc5A4F10F56a56B8"; -const BNB = "0x20865e63B111B2649ef829EC220536c82C58ad7B"; -const CRV = "0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978"; -const DAI = "0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1"; -const WETH = "0x82aF49447D8a07e3bd95BD0d56f35241523fBab1"; -const FRAX = "0x17FC002b466eEc40DaE837Fc4bE5c67993ddBd6F"; -const FXS = "0x9d2F299715D94d8A7E6F5eaa8E654E8c74a988A7"; -const LINK = "0xf97f4df75117a78c1A5a0DBb814Af92458539FB4"; -const DPX = "0x6C2C06790b3E3E3c38e12Ee22F8183b37a13EE55"; -const GOHM = "0x8D9bA570D6cb60C7e3e0F31343Efe75AB8E65FB1"; -const OHM = "0xf0cb2dc0db5e6c66B9a70Ac27B06b878da017028"; -const wstETH = "0x5979D7b546E38E414F7E9822514be443A4800529"; -const rETH = "0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8"; -const MAGIC = "0x539bdE0d7Dbd336b79148AA742883198BBF60342"; -const GMX = "0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a"; -const USDs = "0xD74f5255D557944cf7Dd0E45FF521520002D5748"; - -// no price feed -// const MAI = "0x3F56e0c36d275367b8C502090EDF38289b3dEa0d"; -// const USX = "0x641441c631e2F909700d2f41FD87F0aA6A6b4EDb"; -// const alUSD = "0xCB8FA9a76b8e203D8C3797bF438d8FB81Ea3326A"; - -const SUSHI = "0xd4d42F0b6DEF4CE0383636770eF773390d85c61A"; -const USDT = "0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9"; - -export const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.BAL, - underlying: BAL, - name: "Balancer", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", BAL) - }, - { - symbol: assetSymbols.BNB, - underlying: BNB, - name: "Binance Network", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", BNB) - }, - { - symbol: assetSymbols.CRV, - underlying: CRV, - name: "Curve DAO Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", CRV) - }, - { - symbol: assetSymbols.DAI, - underlying: DAI, - name: "Dai Stablecoin", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", DAI) - }, - { - symbol: assetSymbols.WETH, - underlying: WETH, - name: "Wrapped Ether", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: wrappedAssetDocs(SupportedChains.arbitrum) - }, - { - symbol: assetSymbols.FRAX, - underlying: FRAX, - name: "Frax", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", FRAX) - }, - { - symbol: assetSymbols.FXS, - underlying: FXS, - name: "Frax Share", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", FXS) - }, - - { - symbol: assetSymbols.LINK, - underlying: LINK, - name: "ChainLink Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", LINK) - }, - { - symbol: assetSymbols.SUSHI, - underlying: SUSHI, - name: "SushiToken", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", SUSHI) - }, - { - symbol: assetSymbols.USDC, - underlying: USDC, - name: "USD Coin (Arb1)", - decimals: 6, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", USDC) - }, - { - symbol: assetSymbols.USDT, - underlying: USDT, - name: "Tether USD", - decimals: 6, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", USDT) - }, - { - symbol: assetSymbols.USDs, - underlying: USDs, - name: "Sperax USD", - decimals: 18, - oracle: OracleTypes.UniswapV3PriceOracle, - extraDocs: defaultDocs("https://arbiscan.io", USDs) - }, - // Awaiting price feeds - // { - // symbol: assetSymbols.USX, - // underlying: USX, - // name: "dForce USD", - // decimals: 18, - // oracle: OracleTypes.UniswapV3PriceOracle, - // extraDocs: defaultDocs("https://arbiscan.io", USX), - // }, - // { - // symbol: assetSymbols.asUSD, - // underlying: alUSD, - // name: "Alchemix USD", - // decimals: 18, - // oracle: OracleTypes.UniswapV3PriceOracle, - // extraDocs: defaultDocs("https://arbiscan.io", alUSD), - // }, - { - symbol: assetSymbols.WBTC, - underlying: WBTC, - name: "Wrapped BTC", - decimals: 8, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", WBTC) - }, - { - symbol: assetSymbols.GOHM, - underlying: GOHM, - name: "Governance OHM", - decimals: 18, - oracle: OracleTypes.UniswapTwapPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", GOHM), - disabled: true - }, - { - symbol: assetSymbols.DPX, - underlying: DPX, - name: "Dopex Governance Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", DPX) - }, - { - symbol: assetSymbols.MAGIC, - underlying: MAGIC, - name: "MAGIC", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", MAGIC) - }, - { - symbol: assetSymbols.GMX, - underlying: GMX, - name: "GMX", - decimals: 18, - oracle: OracleTypes.UniswapV3PriceOracle, - extraDocs: defaultDocs("https://arbiscan.io", GMX), - disabled: true - }, - { - symbol: assetSymbols.OHM, - underlying: OHM, - name: "Olympus", - decimals: 9, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", OHM) - }, - { - symbol: assetSymbols.wstETH, - underlying: wstETH, - name: "Lido Wrapped Staked Ether", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", wstETH) - }, - { - symbol: assetSymbols.rETH, - underlying: rETH, - name: "Rocket Pool ETH", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://arbiscan.io", rETH) - } -]; - -export default assets; diff --git a/packages/chains/src/arbitrum/fundingStrategies.ts b/packages/chains/src/arbitrum/fundingStrategies.ts deleted file mode 100644 index aa2ef3e73..000000000 --- a/packages/chains/src/arbitrum/fundingStrategies.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, FundingStrategy, FundingStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const fundingStrategies: FundingStrategy[] = []; - -export default fundingStrategies; diff --git a/packages/chains/src/arbitrum/index.ts b/packages/chains/src/arbitrum/index.ts deleted file mode 100644 index 70756e1d7..000000000 --- a/packages/chains/src/arbitrum/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; - -import deployments from "../../deployments/arbitrum.json"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; -import fundingStrategies from "./fundingStrategies"; -import irms from "./irms"; -import leveragePairs from "./leveragePairs"; -import liquidationDefaults from "./liquidation"; -import oracles from "./oracles"; -import specificParams from "./params"; -import deployedPlugins from "./plugins"; -import redemptionStrategies from "./redemptionStrategies"; - -const chainConfig: ChainConfig = { - chainId: SupportedChains.arbitrum, - chainAddresses, - assets, - irms, - liquidationDefaults, - oracles, - specificParams, - deployedPlugins, - redemptionStrategies, - fundingStrategies, - chainDeployments: deployments.contracts, - leveragePairs -}; - -export default chainConfig; diff --git a/packages/chains/src/arbitrum/liquidation.ts b/packages/chains/src/arbitrum/liquidation.ts deleted file mode 100644 index ef5dba897..000000000 --- a/packages/chains/src/arbitrum/liquidation.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { assetSymbols, LiquidationDefaults, LiquidationStrategy, underlying } from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; - -import chainAddresses from "./addresses"; -import { assets } from "./assets"; - -const liquidationDefaults: LiquidationDefaults = { - DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, - ASSET_SPECIFIC_ROUTER: {}, - SUPPORTED_OUTPUT_CURRENCIES: [constants.AddressZero, underlying(assets, assetSymbols.WETH)], - SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, underlying(assets, assetSymbols.WETH)], - LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), - LIQUIDATION_INTERVAL_SECONDS: 20, - jarvisPools: [], - balancerPools: [ - { - poolAddress: "0x89dc7e71e362faF88D92288fE2311D25c6a1B5E0", - underlyingTokens: [underlying(assets, assetSymbols.WETH), underlying(assets, assetSymbols.OHM)] - } - ] -}; - -export default liquidationDefaults; diff --git a/packages/chains/src/arbitrum/oracles.ts b/packages/chains/src/arbitrum/oracles.ts deleted file mode 100644 index 126bdf0e4..000000000 --- a/packages/chains/src/arbitrum/oracles.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { OracleTypes } from "@ionicprotocol/types"; - -const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; - -const oracles: OracleTypes[] = [ - ...baseOracles, - OracleTypes.ChainlinkPriceOracleV2, - OracleTypes.CurveLpTokenPriceOracleNoRegistry, - OracleTypes.UniswapLpTokenPriceOracle, - OracleTypes.UniswapTwapPriceOracleV2, - OracleTypes.SaddleLpPriceOracle -]; - -export default oracles; diff --git a/packages/chains/src/arbitrum/params.ts b/packages/chains/src/arbitrum/params.ts deleted file mode 100644 index 2695233a8..000000000 --- a/packages/chains/src/arbitrum/params.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { assetSymbols, ChainParams, underlying } from "@ionicprotocol/types"; -import { BigNumber } from "ethers"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; - -const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((4 * 24 * 365 * 60).toString()), - cgId: "ethereum", - metadata: { - chainIdHex: "0xA4B1", - name: "Arbitrum One", - shortName: "Arbitrum", - uniswapV3Fees: { - [underlying(assets, assetSymbols.USDC)]: { - [underlying(assets, assetSymbols.GMX)]: 3000 - } - }, - img: "https://d1912tcoux65lj.cloudfront.net/network/arbitrum.jpg", - blockExplorerUrls: { default: { name: "arbiscan", url: "https://arbiscan.io" } }, - rpcUrls: { - default: { http: ["https://rpc.ankr.com/arbitrum"] }, - public: { http: ["https://rpc.ankr.com/arbitrum"] } - }, - nativeCurrency: { - symbol: "ETH", - name: "ETH" - }, - wrappedNativeCurrency: { - symbol: assetSymbols.WETH, - address: chainAddresses.W_TOKEN, - name: "WETH", - decimals: 18, - color: "#7A88A1", - overlayTextColor: "#fff", - logoURL: "https://d1912tcoux65lj.cloudfront.net/network/arbitrum.jpg" - } - } -}; - -export default specificParams; diff --git a/packages/chains/src/arbitrum/redemptionStrategies.ts b/packages/chains/src/arbitrum/redemptionStrategies.ts deleted file mode 100644 index 417ae0af8..000000000 --- a/packages/chains/src/arbitrum/redemptionStrategies.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const redemptionStrategies: RedemptionStrategy[] = [ - { - inputToken: underlying(assets, assetSymbols.OHM), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - }, - { - inputToken: underlying(assets, assetSymbols.wstETH), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - }, - { - inputToken: underlying(assets, assetSymbols.rETH), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - } -]; - -export default redemptionStrategies; diff --git a/packages/chains/src/bob/addresses.ts b/packages/chains/src/bob/addresses.ts new file mode 100644 index 000000000..758d9b5ae --- /dev/null +++ b/packages/chains/src/bob/addresses.ts @@ -0,0 +1,21 @@ +import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; + +import { assets } from "./assets"; + +const chainAddresses: ChainAddresses = { + PAIR_INIT_HASH: "", // TODO is this used anywhere? + STABLE_TOKEN: underlying(assets, assetSymbols.USDC), + UNISWAP_V2_ROUTER: "", + UNISWAP_V2_FACTORY: "", + UNISWAP_V3: { + FACTORY: "0x8c7d3063579BdB0b90997e18A770eaE32E1eBb08", + PAIR_INIT_HASH: "", // unused + QUOTER_V2: "0x33531bDBFE34fa6Fd5963D0423f7699775AacaaF" + }, + UNISWAP_V3_ROUTER: "0x3EF68D3f7664b2805D4E88381b64868a56f88bC4", + W_BTC_TOKEN: underlying(assets, assetSymbols.WBTC), + W_TOKEN: underlying(assets, assetSymbols.WETH), + W_TOKEN_USD_CHAINLINK_PRICE_FEED: "0x97CB85Eb5F892Dd02866672EAB137b3C34501b7b" +}; + +export default chainAddresses; diff --git a/packages/chains/src/bob/assets.ts b/packages/chains/src/bob/assets.ts new file mode 100644 index 000000000..240408f64 --- /dev/null +++ b/packages/chains/src/bob/assets.ts @@ -0,0 +1,109 @@ +import { + assetSymbols, + ChainlinkFeedBaseCurrency, + ChainlinkSpecificParams, + OracleTypes, + SupportedAsset, + SupportedChains +} from "@ionicprotocol/types"; +import { parseEther, parseUnits } from "viem"; + +import { defaultDocs, wrappedAssetDocs } from "../common"; + +export const WETH = "0x4200000000000000000000000000000000000006"; +export const WBTC = "0x03c7054bcb39f7b2e5b2c7acb37583e32d70cfa3"; +export const tBTC = "0xBBa2eF945D523C4e2608C9E1214C2Cc64D4fc2e2"; +export const USDT = "0x05d032ac25d322df992303dca074ee7392c117b9"; +export const SOV = "0xba20a5e63eeEFfFA6fD365E7e540628F8fC61474"; +export const USDC = "0xe75D0fB2C24A55cA1e3F96781a2bCC7bdba058F0"; + +export const assets: SupportedAsset[] = [ + { + symbol: assetSymbols.WETH, + underlying: WETH, + name: "Wrapped Ether", + decimals: 18, + oracle: OracleTypes.FixedNativePriceOracle, + extraDocs: wrappedAssetDocs(SupportedChains.bob), + initialSupplyCap: parseEther(String(3_000)).toString(), + initialBorrowCap: "1", + initialCf: "0" + }, + { + symbol: assetSymbols.WBTC, + underlying: WBTC, + name: "Wrapped BTC", + decimals: 8, + oracle: OracleTypes.ChainlinkPriceOracleV2, + oracleSpecificParams: { + aggregator: "0x1Ff2fFada49646fB9b326EdF8A91446d3cf9a291", + feedBaseCurrency: ChainlinkFeedBaseCurrency.USD + } as ChainlinkSpecificParams, + extraDocs: defaultDocs("https://explorer.gobob.xyz", WBTC), + initialSupplyCap: parseUnits(String(100), 8).toString(), + initialBorrowCap: "1", + initialCf: "0" + }, + { + symbol: assetSymbols.USDT, + underlying: USDT, + name: "Tether USD", + decimals: 6, + oracle: OracleTypes.ChainlinkPriceOracleV2, + oracleSpecificParams: { + aggregator: "0x7D126c43B4A6e3EF39B310bbcC2c4D71C77AD627", + feedBaseCurrency: ChainlinkFeedBaseCurrency.USD + } as ChainlinkSpecificParams, + extraDocs: defaultDocs("https://explorer.gobob.xyz", USDT), + initialSupplyCap: parseUnits(String(10_000_000), 6).toString(), + initialBorrowCap: "1", + initialCf: "0" + }, + { + symbol: assetSymbols.tBTC, + underlying: tBTC, + name: "tBTC v2", + decimals: 18, + oracle: OracleTypes.ChainlinkPriceOracleV2, + oracleSpecificParams: { + aggregator: "0xA2C438a949171FAAED89FE05696E2FF31A1d97B3", + feedBaseCurrency: ChainlinkFeedBaseCurrency.USD + } as ChainlinkSpecificParams, + extraDocs: defaultDocs("https://explorer.gobob.xyz", WBTC), + initialSupplyCap: parseUnits(String(100), 18).toString(), + initialBorrowCap: "1", + initialCf: "0" + }, + { + symbol: assetSymbols.USDC, + underlying: USDC, + name: "USD Coin", + decimals: 6, + oracle: OracleTypes.ChainlinkPriceOracleV2, + oracleSpecificParams: { + aggregator: "0x1030Be1aFF580687Ca161a96140D146f43Edaa65", + feedBaseCurrency: ChainlinkFeedBaseCurrency.USD + } as ChainlinkSpecificParams, + extraDocs: defaultDocs("https://explorer.gobob.xyz", USDC), + initialSupplyCap: parseUnits(String(10_000_000), 6).toString(), + initialBorrowCap: "1", + initialCf: "0" + }, + { + symbol: assetSymbols.SOV, + underlying: SOV, + name: "SOV", + decimals: 18, + oracle: OracleTypes.ChainlinkPriceOracleV2, + oracleSpecificParams: { + aggregator: "0x77466772A46895269bff44e509096E4073d4Dc67", + feedBaseCurrency: ChainlinkFeedBaseCurrency.USD + } as ChainlinkSpecificParams, + extraDocs: defaultDocs("https://explorer.gobob.xyz", SOV), + initialSupplyCap: parseUnits(String(20_000_000), 18).toString(), + initialBorrowCap: "1", + initialCf: "0" + } +]; + +export default assets; diff --git a/packages/chains/src/bob/fundingStrategies.ts b/packages/chains/src/bob/fundingStrategies.ts new file mode 100644 index 000000000..54c4ffeb9 --- /dev/null +++ b/packages/chains/src/bob/fundingStrategies.ts @@ -0,0 +1,5 @@ +import { FundingStrategy } from "@ionicprotocol/types"; + +const fundingStrategies: FundingStrategy[] = []; + +export default fundingStrategies; diff --git a/packages/chains/src/zkevm/index.ts b/packages/chains/src/bob/index.ts similarity index 89% rename from packages/chains/src/zkevm/index.ts rename to packages/chains/src/bob/index.ts index b85f7182a..4f03ae9db 100644 --- a/packages/chains/src/zkevm/index.ts +++ b/packages/chains/src/bob/index.ts @@ -1,6 +1,6 @@ import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; -import deployments from "../../deployments/zkevm.json"; +import deployments from "../../deployments/bob.json"; import chainAddresses from "./addresses"; import { assets } from "./assets"; @@ -14,7 +14,7 @@ import deployedPlugins from "./plugins"; import redemptionStrategies from "./redemptionStrategies"; const chainConfig: ChainConfig = { - chainId: SupportedChains.zkevm, + chainId: SupportedChains.bob, chainAddresses, assets, irms, diff --git a/packages/chains/src/arbitrum/irms.ts b/packages/chains/src/bob/irms.ts similarity index 100% rename from packages/chains/src/arbitrum/irms.ts rename to packages/chains/src/bob/irms.ts diff --git a/packages/chains/src/arbitrum/leveragePairs.ts b/packages/chains/src/bob/leveragePairs.ts similarity index 100% rename from packages/chains/src/arbitrum/leveragePairs.ts rename to packages/chains/src/bob/leveragePairs.ts diff --git a/packages/chains/src/zkevm/liquidation.ts b/packages/chains/src/bob/liquidation.ts similarity index 65% rename from packages/chains/src/zkevm/liquidation.ts rename to packages/chains/src/bob/liquidation.ts index b20af7253..56ff6d9ce 100644 --- a/packages/chains/src/zkevm/liquidation.ts +++ b/packages/chains/src/bob/liquidation.ts @@ -1,8 +1,8 @@ -import { assetSymbols, LiquidationDefaults, LiquidationStrategy, underlying } from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; +import { LiquidationDefaults, LiquidationStrategy } from "@ionicprotocol/types"; +import { constants, utils } from "ethers"; import chainAddresses from "./addresses"; -import { assets, USDC, WETH } from "./assets"; +import { USDC, WETH } from "./assets"; const liquidationDefaults: LiquidationDefaults = { DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, @@ -10,7 +10,7 @@ const liquidationDefaults: LiquidationDefaults = { SUPPORTED_OUTPUT_CURRENCIES: [constants.AddressZero, WETH, USDC], SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, WETH], LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), + MINIMUM_PROFIT_NATIVE: utils.parseEther("0.001"), LIQUIDATION_INTERVAL_SECONDS: 20, jarvisPools: [], balancerPools: [] diff --git a/packages/chains/src/zkevm/oracles.ts b/packages/chains/src/bob/oracles.ts similarity index 85% rename from packages/chains/src/zkevm/oracles.ts rename to packages/chains/src/bob/oracles.ts index 99f32c805..a898ed803 100644 --- a/packages/chains/src/zkevm/oracles.ts +++ b/packages/chains/src/bob/oracles.ts @@ -2,6 +2,6 @@ import { OracleTypes } from "@ionicprotocol/types"; const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; -const oracles: OracleTypes[] = [...baseOracles, OracleTypes.PythPriceOracle, OracleTypes.AlgebraPriceOracle]; +const oracles: OracleTypes[] = [...baseOracles, OracleTypes.PythPriceOracle]; export default oracles; diff --git a/packages/chains/src/ethereum/params.ts b/packages/chains/src/bob/params.ts similarity index 59% rename from packages/chains/src/ethereum/params.ts rename to packages/chains/src/bob/params.ts index f0c9bc453..cc12bb916 100644 --- a/packages/chains/src/ethereum/params.ts +++ b/packages/chains/src/bob/params.ts @@ -2,21 +2,20 @@ import { assetSymbols, ChainParams } from "@ionicprotocol/types"; import { BigNumber } from "ethers"; import chainAddresses from "./addresses"; -import assets from "./assets"; const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((5 * 24 * 365 * 60).toString()), + blocksPerYear: BigNumber.from((30 * 60 * 24 * 365).toString()), // 30 blocks per minute = 2 sec block time cgId: "ethereum", metadata: { - chainIdHex: "0x1", - name: "Ethereum Mainnet", - shortName: "Ethereum", + chainIdHex: "0xed88", + name: "Build On Bitcoin", + shortName: "BOB", uniswapV3Fees: {}, - img: "https://d1912tcoux65lj.cloudfront.net/network/ethereum.png", - blockExplorerUrls: { default: { name: "etherscan", url: "https://etherscan.io" } }, + img: "https://icons.llamao.fi/icons/chains/rsz_bob.jpg", + blockExplorerUrls: { default: { name: "bobexplorer", url: "https://explorer.gobob.xyz" } }, rpcUrls: { - default: { http: ["https://rpc.ankr.com/eth"] }, - public: { http: ["https://rpc.ankr.com/eth"] } + default: { http: ["https://rpc.gobob.xyz"] }, + public: { http: ["https://rpc.gobob.xyz"] } }, nativeCurrency: { symbol: "ETH", diff --git a/packages/chains/src/arbitrum/plugins.ts b/packages/chains/src/bob/plugins.ts similarity index 100% rename from packages/chains/src/arbitrum/plugins.ts rename to packages/chains/src/bob/plugins.ts diff --git a/packages/chains/src/ganache/redemptionStrategies.ts b/packages/chains/src/bob/redemptionStrategies.ts similarity index 100% rename from packages/chains/src/ganache/redemptionStrategies.ts rename to packages/chains/src/bob/redemptionStrategies.ts diff --git a/packages/chains/src/bsc/addresses.ts b/packages/chains/src/bsc/addresses.ts deleted file mode 100644 index 00d3ca455..000000000 --- a/packages/chains/src/bsc/addresses.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { ChainAddresses } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { BTCB, BUSD, WBNB } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: WBNB, - W_TOKEN_USD_CHAINLINK_PRICE_FEED: "0x5f4ec3df9cbd43714fe2740f5e3616155c5b8419", - UNISWAP_V2_ROUTER: "0x10ED43C718714eb63d5aA57B78B54704E256024E", - UNISWAP_V2_FACTORY: "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73", - PAIR_INIT_HASH: ethers.utils.hexlify("0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5"), - STABLE_TOKEN: BUSD, - W_BTC_TOKEN: BTCB, - ALGEBRA_SWAP_ROUTER: "0x327Dd3208f0bCF590A66110aCB6e5e6941A4EfA0", - ALGEBRA_UNI_PROXY: "0x6B3d98406779DDca311E6C43553773207b506Fa6", - SOLIDLY_SWAP_ROUTER: "0xd4ae6eCA985340Dd434D38F470aCCce4DC78D109" -}; - -export default chainAddresses; diff --git a/packages/chains/src/bsc/assets.ts b/packages/chains/src/bsc/assets.ts deleted file mode 100644 index ef93596f8..000000000 --- a/packages/chains/src/bsc/assets.ts +++ /dev/null @@ -1,635 +0,0 @@ -import { assetOriginalSymbols, assetSymbols, OracleTypes, SupportedAsset, SupportedChains } from "@ionicprotocol/types"; - -import { - ankrCertificateDocs, - apeSwapDocs, - defaultDocs, - ellipsisDocs, - jarvisDocs, - pancakeSwapDocs, - StaderXDocs, - stkBNBDocs, - thenaDocs, - thenaDocsV2, - wombatDocs, - wrappedAssetDocs -} from "../common"; - -export const WBNB = "0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c"; -export const BNB = "0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE"; -export const BUSD = "0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56"; -export const BTCB = "0x7130d2A12B9BCbFAe4f2634d864A1Ee1Ce3Ead9c"; -export const HAY = "0x0782b6d8c4551B9760e74c0545a9bCD90bdc41E5"; -export const ankrBNB = "0x52F24a5e03aee338Da5fd9Df68D2b6FAe1178827"; -const DAI = "0x1AF3F329e8BE154074D8769D1FFa4eE058B1DBc3"; -const ETH = "0x2170Ed0880ac9A755fd29B2688956BD959F933F8"; -const BETH = "0x250632378E573c6Be1AC2f97Fcdf00515d0Aa91B"; -const CAKE = "0x0E09FaBB73Bd3Ade0a17ECC321fD13a19e81cE82"; -const AUTO = "0xa184088a740c695E156F91f5cC086a06bb78b827"; -const BIFI = "0xCa3F508B8e4Dd382eE878A314789373D80A5190A"; -const ALPACA = "0x8F0528cE5eF7B51152A59745bEfDD91D97091d2F"; -const USDC = "0x8AC76a51cc950d9822D68b83fE1Ad97B32Cd580d"; -const USDT = "0x55d398326f99059fF775485246999027B3197955"; -const TUSD = "0x14016E85a25aeb13065688cAFB43044C2ef86784"; -const MAI = "0x3F56e0c36d275367b8C502090EDF38289b3dEa0d"; -const FRAX = "0x29cED01C447166958605519F10DcF8b0255fB379"; -const val3EPS = "0x5b5bD8913D766D005859CE002533D4838B0Ebbb5"; -const threeEPS = "0xaF4dE8E872131AE328Ce21D909C74705d3Aaf452"; -const maiThreeEPS = "0x80D00D2c8d920a9253c3D65BA901250a55011b37"; -const twoBRL = "0x1B6E11c5DB9B15DE87714eA9934a6c52371CfEA9"; -const THE = "0xF4C8E32EaDEC4BFe97E0F595AdD0f4450a863a11"; -const RDNT = "0xf7DE7E8A6bd59ED41a4b5fe50278b3B7f31384dF"; - -const stkBNB_WBNB = "0xaA2527ff1893e0D40d4a454623d362B79E8bb7F1"; -const stkBNB = "0xc2E9d07F66A89c44062459A47a0D2Dc038E4fb16"; -const asANKR_ankrBNB = "0x653D51dbB4CC8B9Bcd884BB0c0795b4BE672AA4c"; -const epsBNBx_BNB = "0x5c73804FeDd39f3388E03F4aa1fE06a1C0e60c8e"; -const BNBx = "0x1bdd3Cf7F79cfB8EdbB955f20ad99211551BA275"; -const jBRL = "0x316622977073BBC3dF32E7d2A9B3c77596a0a603"; -const jEUR = "0x23b8683Ff98F9E4781552DFE6f12Aa32814924e8"; -const BRZ = "0x71be881e9C5d4465B3FfF61e89c6f3651E69B5bb"; -const WBNB_BUSD = "0x58F876857a02D6762E0101bb5C46A8c1ED44Dc16"; -const WBNB_DAI = "0xc7c3cCCE4FA25700fD5574DA7E200ae28BBd36A3"; -const WBNB_USDC = "0xd99c7F6C65857AC913a8f880A4cb84032AB2FC5b"; -const WBNB_USDT = "0x16b9a82891338f9bA80E2D6970FddA79D1eb0daE"; -const WBNB_ETH = "0x74E4716E431f45807DCF19f284c7aA99F18a4fbc"; -const BUSD_USDT = "0x7EFaEf62fDdCCa950418312c6C91Aef321375A00"; -const BUSD_BTCB = "0xF45cd219aEF8618A92BAa7aD848364a158a24F33"; -const USDC_BUSD = "0x2354ef4DF11afacb85a5C7f98B624072ECcddbB1"; -const USDC_ETH = "0xEa26B78255Df2bBC31C1eBf60010D78670185bD0"; -const CAKE_WBNB = "0x0eD7e52944161450477ee417DE9Cd3a859b14fD0"; -const BTCB_ETH = "0xD171B26E4484402de70e3Ea256bE5A2630d7e88D"; -const ANKR_ankrBNB = "0x8028AC1195B6469de22929C4f329f96B06d65F25"; -const EPX = "0xAf41054C1487b0e5E2B9250C0332eCBCe6CE9d71"; -const DDD = "0x84c97300a190676a19D1E13115629A11f8482Bd1"; -const pSTAKE = "0x4C882ec256823eE773B25b414d36F92ef58a7c0C"; -const SD = "0x3BC5AC0dFdC871B365d159f728dd1B9A0B5481E8"; -const ANKR = "0xf307910A4c7bbc79691fD374889b36d8531B08e3"; -const WOMBATLP_WBNB = "0x74f019A5C4eD2C2950Ce16FaD7Af838549092c5b"; - -// solidly -const solidlyStableAMM_jBRL_BRZ = "0xA0695f78AF837F570bcc50f53e58Cda300798B65"; -const solidlyVolatileAMM_ANKR_ankrBNB = "0x7ef540f672Cd643B79D2488344944499F7518b1f"; -const solidlyVolatileAMM_ANKR_HAY = "0xa2C2C08AFEFD3CC69B9aab797dEe5a1886388783"; -const solidlyStableAMM_HAY_BUSD = "0x93B32a8dfE10e9196403dd111974E325219aec24"; -const solidlyVolatileAMM_HAY_ankrBNB = "0xC6dB38F34DA75393E9aac841c08104348997D509"; - -const solidlyStableAMM_stkBNB_WBNB = "0x2B3510f57365aA17bFF8E6360EA67C136175dC6D"; -const solidlyGammaStable_stkBNB_WBNB = "0x86b481fCe116DCd01fBeBb963f1358bcc466668C"; -const solidlyGammaNarrow_BTCB_WBNB = "0xD3C480EC7a47596fF8D63396227d1F7dC728A7f0"; -const solidlyGammaNarrow_ETH_WBNB = "0x10bf6e7B28b1cfFb1c047D7F815953931e5Ee947"; - -const solidlyGammaNarrow_ANKR_ankrBNB = "0x3f8f3caefF393B1994a9968E835Fd38eCba6C1be"; -const solidlyGammaWide_ANKR_ankrBNB = "0x31257f40e65585cC45fDABEb12002C25bC95eE80"; -const solidlyGammaNarrow_RDNT_ankrBNB = "0x137B283858b82Ed466823e81b7f791a04f7f6f46"; -const solidlyGammaWide_RDNT_ankrBNB = "0x62034F60A8516a1b424c79c2e9a8c214D6Cb97e8"; -const solidlyGammaNarrow_THE_ankrBNB = "0xD2F1045B4E5Ba91EE725E8BF50740617a92E4a5f"; -const solidlyGammaWide_THE_ankrBNB = "0x23d13bc67bD086B8beFf6393eBF863d6a8C7DCDc"; - -const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.BNB, - underlying: BNB, - name: "Binance Network Token", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle, - extraDocs: defaultDocs("https://bscscan.com", BNB), - disabled: true - }, - { - symbol: assetSymbols.WBNB, - underlying: WBNB, - name: "Wrapped Binance Network Token", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle, - extraDocs: wrappedAssetDocs(SupportedChains.bsc) - }, - { - symbol: assetSymbols.BUSD, - underlying: BUSD, - name: "Binance USD", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", BUSD) - }, - { - symbol: assetSymbols.BTCB, - underlying: BTCB, - name: "Binance BTC", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", BTCB) - }, - { - symbol: assetSymbols.DAI, - underlying: DAI, - name: "Binance DAI", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", DAI) - }, - { - symbol: assetSymbols.ETH, - underlying: ETH, - name: "Binance ETH", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", ETH) - }, - // CZ - { - symbol: assetSymbols.BETH, - underlying: BETH, - name: "Binance Beacon ETH", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", BETH), - disabled: true - }, - { - symbol: assetSymbols.CAKE, - underlying: CAKE, - name: "PancakeSwap Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", CAKE) - }, - // - { - symbol: assetSymbols.AUTO, - underlying: AUTO, - name: "AUTOv2", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", AUTO), - disabled: true - }, - { - symbol: assetSymbols.BIFI, - underlying: BIFI, - name: "beefy.finance", - oracle: OracleTypes.ChainlinkPriceOracleV2, - decimals: 18, - extraDocs: defaultDocs("https://bscscan.com", BIFI), - disabled: true - }, - { - symbol: assetSymbols.FRAX, - underlying: FRAX, - name: "Frax", - oracle: OracleTypes.ChainlinkPriceOracleV2, - decimals: 18, - extraDocs: defaultDocs("https://bscscan.com", FRAX) - }, - { - symbol: assetSymbols.ALPACA, - underlying: ALPACA, - name: "AlpacaToken", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", ALPACA), - disabled: true - }, - { - symbol: assetSymbols.THE, - underlying: THE, - name: "THENA", - decimals: 18, - oracle: OracleTypes.AlgebraPriceOracle, - extraDocs: defaultDocs("https://bscscan.com", THE) - }, - { - symbol: assetSymbols.RDNT, - underlying: RDNT, - name: "Radiant Capital", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", RDNT) - }, - // stables - { - symbol: assetSymbols.USDC, - underlying: USDC, - name: "Binance-Peg USD Coin", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", USDC) - }, - { - symbol: assetSymbols.USDT, - underlying: USDT, - name: "Binance-Peg BSC-USD", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", USDT) - }, - { - symbol: assetSymbols.TUSD, - underlying: TUSD, - name: "Wrapped TrueUSD", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", TUSD), - disabled: true - }, - { - symbol: assetSymbols.MAI, - underlying: MAI, - name: "Mai Stablecoin", - decimals: 18, - oracle: OracleTypes.DiaPriceOracle, - extraDocs: defaultDocs("https://bscscan.com", MAI) - }, - { - symbol: assetSymbols.HAY, - underlying: HAY, - name: "HAY", - decimals: 18, - oracle: OracleTypes.UniswapTwapPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", HAY) - }, - // Ellipsis - { - symbol: assetSymbols["3EPS"], - underlying: threeEPS, - name: "Ellipsis.finance 3EPS (BUSD/USDC/USDT)", - decimals: 18, - oracle: OracleTypes.CurveLpTokenPriceOracleNoRegistry, - extraDocs: ellipsisDocs("0x160CAed03795365F3A589f10C379FfA7d75d4E76", "3EPS", threeEPS) - }, - { - symbol: assetSymbols.mai3EPS, - underlying: maiThreeEPS, - name: "Ellipsis.finance MAI 3EPS (MAI/BUSD/USDC/USDT)", - decimals: 18, - oracle: OracleTypes.CurveLpTokenPriceOracleNoRegistry, - extraDocs: ellipsisDocs("0x68354c6E8Bbd020F9dE81EAf57ea5424ba9ef322", "mai3EPS", maiThreeEPS) - }, - { - symbol: assetSymbols.val3EPS, - underlying: val3EPS, - name: "Ellipsis.finance val3EPS (BUSD/USDC/USDT)", - decimals: 18, - oracle: OracleTypes.CurveLpTokenPriceOracleNoRegistry, - extraDocs: ellipsisDocs("0x19EC9e3F7B21dd27598E7ad5aAe7dC0Db00A806d", "val3EPS", val3EPS) - }, - { - symbol: assetSymbols["2brl"], - underlying: twoBRL, - name: "Ellipsis.finance 2BRL (BRZ, jBRL)", - decimals: 18, - oracle: OracleTypes.CurveLpTokenPriceOracleNoRegistry, - extraDocs: ellipsisDocs("0xad51e40D8f255dba1Ad08501D6B1a6ACb7C188f3", "2brl", twoBRL) - }, - { - symbol: assetSymbols.ankrBNB, - underlying: ankrBNB, - name: "Ankr Staked BNB ", - decimals: 18, - oracle: OracleTypes.AnkrCertificateTokenPriceOracle, - extraDocs: ankrCertificateDocs("ankrBNB", "BNB") - }, - { - symbol: assetSymbols.stkBNB, - underlying: stkBNB, - name: "Staked BNB (Persistance)", - decimals: 18, - oracle: OracleTypes.StkBNBPriceOracle, - extraDocs: stkBNBDocs() - }, - { - symbol: assetSymbols.BNBx, - underlying: BNBx, - name: "Liquid Staked BNB (Stader)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: StaderXDocs("bnbchain", "BNBx") - }, - { - symbol: assetSymbols["epsBNBx-BNB"], - underlying: epsBNBx_BNB, - name: "Ellipsis.finance epsBNBx (BNBx/BNB)", - decimals: 18, - oracle: OracleTypes.CurveLpTokenPriceOracleNoRegistry, - extraDocs: ellipsisDocs("0xFD4afeAc39DA03a05f61844095A75c4fB7D766DA", "BNBx/BNB", epsBNBx_BNB) - }, - { - symbol: assetSymbols["stkBNB-WBNB"], - underlying: stkBNB_WBNB, - name: "stkBNB-WBNB PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(WBNB, stkBNB, "stkBNB-WBNB", stkBNB_WBNB) - }, - { - symbol: assetSymbols["ANKR-ankrBNB"], - underlying: ANKR_ankrBNB, - name: "ANKR-ankrBNB PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(ANKR, ankrBNB, "ANKR-ankrBNB", ANKR_ankrBNB) - }, - { - symbol: assetSymbols["asANKR-ankrBNB"], - underlying: asANKR_ankrBNB, - name: "ANKR-ankrBNB ApeSwap LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: apeSwapDocs(ANKR, ankrBNB, "ANKR-ankrBNB", asANKR_ankrBNB) - }, - // Jarvis - { - symbol: assetSymbols.jBRL, - underlying: jBRL, - name: "Jarvis Synthetic Brazilian Real", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: jarvisDocs("v1") - }, - { - symbol: assetSymbols.JEUR, - underlying: jEUR, - name: "Jarvis Synthetic Euro", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: jarvisDocs("v1") - }, - { - symbol: assetSymbols.BRZ, - underlying: BRZ, - name: "BRZ Token", - decimals: 4, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: `

How to acquire this token


-

You can acquire BRZ tokens at https://www.brztoken.io or other centralised exchanges

` - }, - { - symbol: assetSymbols["WBNB-BUSD"], - underlying: WBNB_BUSD, - name: "WBNB-BUSD PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(WBNB, BUSD, "WBNB-BUSD", WBNB_BUSD) - }, - { - symbol: assetSymbols["WBNB-DAI"], - underlying: WBNB_DAI, - name: "WBNB-DAI PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(WBNB, DAI, "WBNB-DAI", WBNB_DAI) - }, - { - symbol: assetSymbols["WBNB-USDC"], - underlying: WBNB_USDC, - name: "WBNB-USDC PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(WBNB, USDC, "WBNB-USDC", WBNB_USDC) - }, - { - symbol: assetSymbols["WBNB-USDT"], - underlying: WBNB_USDT, - name: "WBNB-USDT PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(WBNB, USDT, "WBNB-USDT", WBNB_USDT) - }, - { - symbol: assetSymbols["WBNB-ETH"], - underlying: WBNB_ETH, - name: "WBNB-ETH PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(WBNB, ETH, "WBNB-ETH", WBNB_ETH) - }, - { - symbol: assetSymbols["BUSD-USDT"], - underlying: BUSD_USDT, - name: "BUSD-USDT PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(BUSD, USDT, "BUSD-USDT", BUSD_USDT) - }, - { - symbol: assetSymbols["BUSD-BTCB"], - underlying: BUSD_BTCB, - name: "BUSD-BTCB PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(BUSD, BTCB, "BUSD-BTCB", BUSD_BTCB) - }, - { - symbol: assetSymbols["USDC-BUSD"], - underlying: USDC_BUSD, - name: "USDC-BUSD PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(USDC, BUSD, "USDC-BUSD", USDC_BUSD) - }, - { - symbol: assetSymbols["USDC-ETH"], - underlying: USDC_ETH, - name: "USDC-ETH PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(USDC, ETH, "USDC-ETH", USDC_ETH) - }, - { - symbol: assetSymbols["CAKE-WBNB"], - underlying: CAKE_WBNB, - name: "CAKE-WBNB PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(CAKE, WBNB, "CAKE-WBNB", CAKE_WBNB) - }, - { - symbol: assetSymbols["BTCB-ETH"], - underlying: BTCB_ETH, - name: "BTCB-ETH PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: pancakeSwapDocs(BTCB, ETH, "BTCB-ETH", BTCB_ETH) - }, - { - symbol: assetSymbols.EPX, - underlying: EPX, - name: "Ellipsis X", - decimals: 18, - oracle: OracleTypes.UniswapTwapPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", EPX), - disabled: true - }, - { - symbol: assetSymbols.DDD, - underlying: DDD, - name: "DotDot", - decimals: 18, - oracle: OracleTypes.UniswapTwapPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", DDD), - disabled: true - }, - { - symbol: assetSymbols.pSTAKE, - underlying: pSTAKE, - name: "pSTAKE", - decimals: 18, - oracle: OracleTypes.UniswapTwapPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", pSTAKE), - disabled: true - }, - { - symbol: assetSymbols.SD, - underlying: SD, - name: "SD", - decimals: 18, - oracle: OracleTypes.UniswapTwapPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", SD), - disabled: true - }, - { - symbol: assetSymbols.ANKR, - underlying: ANKR, - name: "Ankr", - decimals: 18, - oracle: OracleTypes.UniswapTwapPriceOracleV2, - extraDocs: defaultDocs("https://bscscan.com", ANKR) - }, - { - symbol: assetSymbols["WOMBATLP-WBNB"], - underlying: WOMBATLP_WBNB, - name: "WombatLp WBNB", - decimals: 18, - oracle: OracleTypes.WombatLpTokenPriceOracle, - extraDocs: wombatDocs("BNB", "WBNB") - }, - // Thena - { - symbol: assetSymbols["sAMM-jBRL/BRZ"], - underlying: solidlyStableAMM_jBRL_BRZ, - name: "Stable V1 AMM - jBRL/BRZ", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: thenaDocs(solidlyStableAMM_jBRL_BRZ), - originalSymbol: assetOriginalSymbols["sAMM-jBRL/BRZ"] - }, - { - symbol: assetSymbols["vAMM-ANKR/ankrBNB"], - underlying: solidlyVolatileAMM_ANKR_ankrBNB, - name: "Volatile V1 AMM - ANKR/ankrBNB", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: thenaDocs(solidlyVolatileAMM_ANKR_ankrBNB), - originalSymbol: assetOriginalSymbols["vAMM-ANKR/ankrBNB"] - }, - { - symbol: assetSymbols["vAMM-ANKR/HAY"], - underlying: solidlyVolatileAMM_ANKR_HAY, - name: "Volatile V1 AMM - ANKR/HAY", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: thenaDocs(solidlyVolatileAMM_ANKR_HAY), - originalSymbol: assetOriginalSymbols["vAMM-ANKR/HAY"] - }, - { - symbol: assetSymbols["vAMM-HAY/ankrBNB"], - underlying: solidlyVolatileAMM_HAY_ankrBNB, - name: "Volatile V1 AMM - HAY/ankrBNB", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: thenaDocs(solidlyVolatileAMM_HAY_ankrBNB), - originalSymbol: assetOriginalSymbols["vAMM-HAY/ankrBNB"] - }, - { - symbol: assetSymbols["sAMM-HAY/BUSD"], - underlying: solidlyStableAMM_HAY_BUSD, - name: "Stable V1 AMM - HAY/BUSD", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: thenaDocs(solidlyStableAMM_HAY_BUSD), - originalSymbol: assetOriginalSymbols["sAMM-HAY/BUSD"] - }, - { - symbol: assetSymbols["sAMM-stkBNB/WBNB"], - underlying: solidlyStableAMM_stkBNB_WBNB, - name: "Stable V1 AMM - stkBNB/WBNB", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: thenaDocs(solidlyStableAMM_stkBNB_WBNB), - originalSymbol: assetOriginalSymbols["sAMM-stkBNB/WBNB"] - }, - { - symbol: assetSymbols.aWBNB_STKBNB, - underlying: solidlyGammaStable_stkBNB_WBNB, - name: "Fusion V2 AMM - Stable stkBNB/WBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(WBNB, stkBNB, solidlyGammaStable_stkBNB_WBNB, "GAMMA_STABLE") - }, - { - symbol: assetSymbols.aWBNB_BTCB, - underlying: solidlyGammaNarrow_BTCB_WBNB, - name: "Fusion V2 AMM - Stable BTCB/WBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(BTCB, WBNB, solidlyGammaNarrow_BTCB_WBNB, "GAMMA_NARROW") - }, - { - symbol: assetSymbols.aWBNB_ETH, - underlying: solidlyGammaNarrow_ETH_WBNB, - name: "Fusion V2 AMM - Stable ETH/WBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(ETH, WBNB, solidlyGammaNarrow_ETH_WBNB, "GAMMA_NARROW") - }, - { - symbol: assetSymbols.aANKRBNB_ANKR_N, - underlying: solidlyGammaNarrow_ANKR_ankrBNB, - name: "Fusion V2 AMM - Narrow ANKR/ankrBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(ANKR, ankrBNB, solidlyGammaNarrow_ANKR_ankrBNB, "GAMMA_NARROW") - }, - { - symbol: assetSymbols.aANKRBNB_ANKR_W, - underlying: solidlyGammaWide_ANKR_ankrBNB, - name: "Fusion V2 AMM - Wide ANKR/ankrBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(ANKR, ankrBNB, solidlyGammaWide_ANKR_ankrBNB, "GAMMA_WIDE") - }, - { - symbol: assetSymbols.aANKRBNB_RDNT_W, - underlying: solidlyGammaWide_RDNT_ankrBNB, - name: "Fusion V2 AMM - Wide RDNT/ankrBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(RDNT, ankrBNB, solidlyGammaWide_RDNT_ankrBNB, "GAMMA_WIDE") - }, - { - symbol: assetSymbols.aANKRBNB_RDNT_N, - underlying: solidlyGammaNarrow_RDNT_ankrBNB, - name: "Fusion V2 AMM - Narrow RDNT/ankrBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(RDNT, ankrBNB, solidlyGammaNarrow_RDNT_ankrBNB, "GAMMA_NARROW") - }, - { - symbol: assetSymbols.aANKRBNB_THE_W, - underlying: solidlyGammaWide_THE_ankrBNB, - name: "Fusion V2 AMM - Wide THE/ankrBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(THE, ankrBNB, solidlyGammaWide_THE_ankrBNB, "GAMMA_WIDE") - }, - { - symbol: assetSymbols.aANKRBNB_THE_N, - underlying: solidlyGammaNarrow_THE_ankrBNB, - name: "Fusion V2 AMM - Narrow THE/ankrBNB", - decimals: 18, - oracle: OracleTypes.GammaPoolAlgebraPriceOracle, - extraDocs: thenaDocsV2(THE, ankrBNB, solidlyGammaNarrow_THE_ankrBNB, "GAMMA_NARROW") - } -]; - -export default assets; diff --git a/packages/chains/src/bsc/fundingStrategies.ts b/packages/chains/src/bsc/fundingStrategies.ts deleted file mode 100644 index 75513ebf1..000000000 --- a/packages/chains/src/bsc/fundingStrategies.ts +++ /dev/null @@ -1,30 +0,0 @@ -import { assetSymbols, FundingStrategy, FundingStrategyContract, underlying } from "@ionicprotocol/types"; - -import assets from "./assets"; - -const fundingStrategies: FundingStrategy[] = [ - // TODO: extract to predefined chained paths - // jarvis - { - outputToken: underlying(assets, assetSymbols.jBRL), - strategy: FundingStrategyContract.JarvisLiquidatorFunder, - inputToken: underlying(assets, assetSymbols.BUSD) - }, - { - outputToken: underlying(assets, assetSymbols.MAI), - strategy: FundingStrategyContract.CurveSwapLiquidatorFunder, - inputToken: underlying(assets, assetSymbols.val3EPS) - }, - { - outputToken: underlying(assets, assetSymbols.BRZ), - strategy: FundingStrategyContract.CurveSwapLiquidatorFunder, - inputToken: underlying(assets, assetSymbols.jBRL) - }, - { - outputToken: underlying(assets, assetSymbols.val3EPS), - strategy: FundingStrategyContract.CurveSwapLiquidatorFunder, - inputToken: underlying(assets, assetSymbols.BUSD) - } -]; - -export default fundingStrategies; diff --git a/packages/chains/src/bsc/index.ts b/packages/chains/src/bsc/index.ts deleted file mode 100644 index 4d6a95b04..000000000 --- a/packages/chains/src/bsc/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; - -import deployments from "../../deployments/bsc.json"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; -import fundingStrategies from "./fundingStrategies"; -import irms from "./irms"; -import leveragePairs from "./leveragePairs"; -import liquidationDefaults from "./liquidation"; -import oracles from "./oracles"; -import specificParams from "./params"; -import deployedPlugins from "./plugins"; -import redemptionStrategies from "./redemptionStrategies"; - -const chainConfig: ChainConfig = { - chainId: SupportedChains.bsc, - chainAddresses, - assets, - irms, - liquidationDefaults, - oracles, - specificParams, - deployedPlugins, - redemptionStrategies, - fundingStrategies, - chainDeployments: deployments.contracts, - leveragePairs -}; - -export default chainConfig; diff --git a/packages/chains/src/bsc/irms.ts b/packages/chains/src/bsc/irms.ts deleted file mode 100644 index 5d99a9b15..000000000 --- a/packages/chains/src/bsc/irms.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { IrmTypes } from "@ionicprotocol/types"; - -const baseIrms = [IrmTypes.JumpRateModel]; - -const irms: IrmTypes[] = [ - ...baseIrms, - IrmTypes.AnkrBNBInterestRateModel, - IrmTypes.AdjustableAnkrBNBIrm, - IrmTypes.AdjustableJumpRateModel_PSTAKE_WBNB, - IrmTypes.AdjustableJumpRateModel_TRANSFERO_BRZ, - IrmTypes.AdjustableJumpRateModel_TRANSFERO_BTCB_ETH_MAI_WBNB, - IrmTypes.AdjustableJumpRateModel_STADER_WBNB, - IrmTypes.AdjustableJumpRateModel_JARVIS_jBRL -]; - -export default irms; diff --git a/packages/chains/src/bsc/leveragePairs.ts b/packages/chains/src/bsc/leveragePairs.ts deleted file mode 100644 index aec608582..000000000 --- a/packages/chains/src/bsc/leveragePairs.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LeveragePoolConfig } from "@ionicprotocol/types"; - -const leveragePairs: LeveragePoolConfig[] = []; - -export default leveragePairs; diff --git a/packages/chains/src/bsc/liquidation.ts b/packages/chains/src/bsc/liquidation.ts deleted file mode 100644 index 97c0b1e83..000000000 --- a/packages/chains/src/bsc/liquidation.ts +++ /dev/null @@ -1,32 +0,0 @@ -import { assetSymbols, LiquidationDefaults, LiquidationStrategy, underlying } from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; - -import chainAddresses from "./addresses"; -import assets, { ankrBNB, BUSD, HAY, WBNB } from "./assets"; - -const liquidationDefaults: LiquidationDefaults = { - DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, - ASSET_SPECIFIC_ROUTER: { - [underlying(assets, assetSymbols["vAMM-HAY/ankrBNB"])]: "0xd4ae6eCA985340Dd434D38F470aCCce4DC78D109", // Thena Solidly Router - [underlying(assets, assetSymbols["sAMM-HAY/BUSD"])]: "0xd4ae6eCA985340Dd434D38F470aCCce4DC78D109", - [underlying(assets, assetSymbols["vAMM-ANKR/HAY"])]: "0xd4ae6eCA985340Dd434D38F470aCCce4DC78D109", - [underlying(assets, assetSymbols["vAMM-ANKR/ankrBNB"])]: "0xd4ae6eCA985340Dd434D38F470aCCce4DC78D109", - [underlying(assets, assetSymbols["sAMM-jBRL/BRZ"])]: "0xd4ae6eCA985340Dd434D38F470aCCce4DC78D109" - }, - SUPPORTED_OUTPUT_CURRENCIES: [constants.AddressZero, ankrBNB, WBNB, HAY, BUSD], - SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, WBNB], - LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), - LIQUIDATION_INTERVAL_SECONDS: 60, - jarvisPools: [ - { - expirationTime: 40 * 60, - liquidityPoolAddress: "0x0fD8170Dc284CD558325029f6AEc1538c7d99f49", - syntheticToken: underlying(assets, assetSymbols.jBRL), - collateralToken: underlying(assets, assetSymbols.BUSD) - } - ], - balancerPools: [] -}; - -export default liquidationDefaults; diff --git a/packages/chains/src/bsc/oracles.ts b/packages/chains/src/bsc/oracles.ts deleted file mode 100644 index 0ec130717..000000000 --- a/packages/chains/src/bsc/oracles.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { OracleTypes } from "@ionicprotocol/types"; - -const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; - -const oracles: OracleTypes[] = [ - ...baseOracles, - OracleTypes.ChainlinkPriceOracleV2, - OracleTypes.CurveLpTokenPriceOracleNoRegistry, - OracleTypes.CurveV2LpTokenPriceOracleNoRegistry, - OracleTypes.UniswapLpTokenPriceOracle, - OracleTypes.UniswapTwapPriceOracleV2, - OracleTypes.StkBNBPriceOracle, - OracleTypes.AnkrCertificateTokenPriceOracle, - OracleTypes.DiaPriceOracle, - OracleTypes.SolidlyLpTokenPriceOracle -]; -export default oracles; diff --git a/packages/chains/src/bsc/params.ts b/packages/chains/src/bsc/params.ts deleted file mode 100644 index 5fc67716b..000000000 --- a/packages/chains/src/bsc/params.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { ChainParams } from "@ionicprotocol/types"; -import { BigNumber } from "ethers"; - -import { WBNB } from "./assets"; - -const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((20 * 24 * 365 * 60).toString()), - cgId: "binancecoin", - metadata: { - chainIdHex: "0x38", - name: "Binance Smart Chain", - shortName: "BNB", - img: "https://d1912tcoux65lj.cloudfront.net/network/bsc.jpg", - blockExplorerUrls: { default: { name: "BnbScan", url: "https://bscscan.com" } }, - rpcUrls: { - default: { http: ["https://bsc-dataseed.binance.org/"] }, - public: { http: ["https://bsc-dataseed.binance.org/"] } - }, - nativeCurrency: { - symbol: "BNB", - name: "BNB" - }, - wrappedNativeCurrency: { - symbol: "WBNB", - address: WBNB, - name: "BNB", - decimals: 18, - color: "#627EEA", - overlayTextColor: "#fff", - logoURL: "https://d1912tcoux65lj.cloudfront.net/network/bsc.jpg" - } - } -}; - -export default specificParams; diff --git a/packages/chains/src/bsc/plugins.ts b/packages/chains/src/bsc/plugins.ts deleted file mode 100644 index 593551e6a..000000000 --- a/packages/chains/src/bsc/plugins.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, DeployedPlugins, Strategy, underlying } from "@ionicprotocol/types"; - -import assets from "./assets"; - -const deployedPlugins: DeployedPlugins = {}; - -export default deployedPlugins; diff --git a/packages/chains/src/bsc/redemptionStrategies.ts b/packages/chains/src/bsc/redemptionStrategies.ts deleted file mode 100644 index e035d4552..000000000 --- a/packages/chains/src/bsc/redemptionStrategies.ts +++ /dev/null @@ -1,190 +0,0 @@ -import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; - -import assets, { ankrBNB, BUSD, WBNB } from "./assets"; - -// [input token address]: [conversion strategy, output token address] -const redemptionStrategies: RedemptionStrategy[] = [ - { - inputToken: underlying(assets, assetSymbols["3EPS"]), - strategy: RedemptionStrategyContract.CurveLpTokenLiquidatorNoRegistry, - outputToken: underlying(assets, assetSymbols.BUSD) - }, - { - inputToken: underlying(assets, assetSymbols.mai3EPS), - strategy: RedemptionStrategyContract.CurveLpTokenLiquidatorNoRegistry, - outputToken: underlying(assets, assetSymbols.BUSD) - }, - { - inputToken: underlying(assets, assetSymbols["2brl"]), - strategy: RedemptionStrategyContract.CurveLpTokenLiquidatorNoRegistry, - outputToken: underlying(assets, assetSymbols.jBRL) - }, - { - inputToken: underlying(assets, assetSymbols.jBRL), - strategy: RedemptionStrategyContract.CurveLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["2brl"]) - }, - { - inputToken: underlying(assets, assetSymbols["epsBNBx-BNB"]), - strategy: RedemptionStrategyContract.CurveLpTokenLiquidatorNoRegistry, - outputToken: underlying(assets, assetSymbols.WBNB) - }, - { - inputToken: underlying(assets, assetSymbols.MAI), - strategy: RedemptionStrategyContract.CurveSwapLiquidator, - outputToken: underlying(assets, assetSymbols.val3EPS) - }, - { - inputToken: underlying(assets, assetSymbols.jBRL), - strategy: RedemptionStrategyContract.JarvisLiquidatorFunder, - outputToken: underlying(assets, assetSymbols.BUSD) - }, - { - inputToken: underlying(assets, assetSymbols["WBNB-BUSD"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols["WBNB-DAI"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols["WBNB-USDC"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols["WBNB-USDT"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols["WBNB-ETH"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols["CAKE-WBNB"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols["ANKR-ankrBNB"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: ankrBNB - }, - { - inputToken: underlying(assets, assetSymbols["stkBNB-WBNB"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols.BNBx), - strategy: RedemptionStrategyContract.UniswapV2LiquidatorFunder, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols.ankrBNB), - strategy: RedemptionStrategyContract.AlgebraSwapLiquidator, - outputToken: WBNB - }, - { - inputToken: underlying(assets, assetSymbols.HAY), - strategy: RedemptionStrategyContract.SolidlySwapLiquidator, - outputToken: BUSD - }, - { - inputToken: underlying(assets, assetSymbols["BUSD-USDT"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.BUSD) - }, - { - inputToken: underlying(assets, assetSymbols["BUSD-BTCB"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.BUSD) - }, - { - inputToken: underlying(assets, assetSymbols["USDC-BUSD"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.BUSD) - }, - { - inputToken: underlying(assets, assetSymbols["USDC-ETH"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols["BTCB-ETH"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.BTCB) - }, - { - inputToken: underlying(assets, assetSymbols["sAMM-jBRL/BRZ"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.jBRL) - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-ANKR/ankrBNB"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-ANKR/HAY"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.HAY) - }, - { - inputToken: underlying(assets, assetSymbols["sAMM-HAY/BUSD"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.BUSD) - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-HAY/ankrBNB"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - }, - - { - inputToken: underlying(assets, assetSymbols.aWBNB_STKBNB), - strategy: RedemptionStrategyContract.GammaAlgebraLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.WBNB) - }, - { - inputToken: underlying(assets, assetSymbols.aANKRBNB_ANKR_N), - strategy: RedemptionStrategyContract.GammaAlgebraLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - }, - { - inputToken: underlying(assets, assetSymbols.aANKRBNB_ANKR_W), - strategy: RedemptionStrategyContract.GammaAlgebraLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - }, - { - inputToken: underlying(assets, assetSymbols.aANKRBNB_RDNT_N), - strategy: RedemptionStrategyContract.GammaAlgebraLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - }, - { - inputToken: underlying(assets, assetSymbols.aANKRBNB_RDNT_W), - strategy: RedemptionStrategyContract.GammaAlgebraLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - }, - { - inputToken: underlying(assets, assetSymbols.aANKRBNB_THE_N), - strategy: RedemptionStrategyContract.GammaAlgebraLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - }, - { - inputToken: underlying(assets, assetSymbols.aANKRBNB_THE_W), - strategy: RedemptionStrategyContract.GammaAlgebraLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - }, - { - inputToken: underlying(assets, assetSymbols.RDNT), - strategy: RedemptionStrategyContract.AlgebraSwapLiquidator, - outputToken: underlying(assets, assetSymbols.ankrBNB) - } -]; - -export default redemptionStrategies; diff --git a/packages/chains/src/chapel/addresses.ts b/packages/chains/src/chapel/addresses.ts deleted file mode 100644 index d5bdd2ecb..000000000 --- a/packages/chains/src/chapel/addresses.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { assets } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: underlying(assets, assetSymbols.WBNB), - W_TOKEN_USD_CHAINLINK_PRICE_FEED: "0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526", - UNISWAP_V2_ROUTER: "0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3", - UNISWAP_V2_FACTORY: "0xB7926C0430Afb07AA7DEfDE6DA862aE0Bde767bc", - PAIR_INIT_HASH: ethers.utils.hexlify("0xecba335299a6693cb2ebc4782e74669b84290b6378ea3a3873c7231a8d7d1074"), - STABLE_TOKEN: underlying(assets, assetSymbols.BUSD), - W_BTC_TOKEN: underlying(assets, assetSymbols.BTCB) -}; - -export default chainAddresses; diff --git a/packages/chains/src/chapel/assets.ts b/packages/chains/src/chapel/assets.ts deleted file mode 100644 index 5b5a232cd..000000000 --- a/packages/chains/src/chapel/assets.ts +++ /dev/null @@ -1,97 +0,0 @@ -import { assetSymbols, OracleTypes, SupportedAsset } from "@ionicprotocol/types"; - -export const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.WBNB, - underlying: "0xae13d989daC2f0dEbFf460aC112a837C89BAa7cd", - name: "Wrapped BNB ", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle - }, - { - symbol: assetSymbols.BUSD, - underlying: "0x78867BbEeF44f2326bF8DDd1941a4439382EF2A7", - name: "Binance USD", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.BTCB, - underlying: "0x6ce8dA28E2f864420840cF74474eFf5fD80E65B8", - name: "Binance BTC", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.DAI, - underlying: "0x8a9424745056Eb399FD19a0EC26A14316684e274", - name: "Binance DAI", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.ETH, - underlying: "0x8BaBbB98678facC7342735486C851ABD7A0d17Ca", - name: "Binance ETH", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.USDT, - underlying: "0x7ef95a0FEE0Dd31b22626fA2e10Ee6A223F8a684", - name: "Tether USD", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.SAFEMOON, - underlying: "0xDAcbdeCc2992a63390d108e8507B98c7E2B5584a", - name: "SafeMoon", - decimals: 9, - oracle: OracleTypes.UniswapTwapPriceOracleV2 - }, - { - symbol: assetSymbols["WBNB-BUSD"], - underlying: "0xe0e92035077c39594793e61802a350347c320cf2", - name: "WBNB-BUSD PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle - }, - { - symbol: assetSymbols["WBNB-DAI"], - underlying: "0xAE4C99935B1AA0e76900e86cD155BFA63aB77A2a", - name: "WBNB-DAI PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle - }, - { - symbol: assetSymbols["BUSD-USDT"], - underlying: "0x5126C1B8b4368c6F07292932451230Ba53a6eB7A", - name: "WBNB-DAI PCS LP", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle - }, - { - symbol: assetSymbols.BOMB, - underlying: "0xe45589fBad3A1FB90F5b2A8A3E8958a8BAB5f768", - name: "Testing Bomb", - decimals: 18, - oracle: OracleTypes.SimplePriceOracle - }, - { - symbol: assetSymbols.TDAI, - underlying: "0x8870f7102F1DcB1c35b01af10f1baF1B00aD6805", - name: "Testing DAI", - decimals: 18, - oracle: OracleTypes.SimplePriceOracle - }, - { - symbol: assetSymbols.TUSD, - underlying: "0x4f1885D25eF219D3D4Fa064809D6D4985FAb9A0b", - name: "Testing USD", - decimals: 18, - oracle: OracleTypes.SimplePriceOracle - } -]; - -export default assets; diff --git a/packages/chains/src/chapel/fundingStrategies.ts b/packages/chains/src/chapel/fundingStrategies.ts deleted file mode 100644 index aa2ef3e73..000000000 --- a/packages/chains/src/chapel/fundingStrategies.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, FundingStrategy, FundingStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const fundingStrategies: FundingStrategy[] = []; - -export default fundingStrategies; diff --git a/packages/chains/src/chapel/index.ts b/packages/chains/src/chapel/index.ts deleted file mode 100644 index 8672d880e..000000000 --- a/packages/chains/src/chapel/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; - -import deployments from "../../deployments/chapel.json"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; -import fundingStrategies from "./fundingStrategies"; -import irms from "./irms"; -import leveragePairs from "./leveragePairs"; -import liquidationDefaults from "./liquidation"; -import oracles from "./oracles"; -import specificParams from "./params"; -import deployedPlugins from "./plugins"; -import redemptionStrategies from "./redemptionStrategies"; - -const chainConfig: ChainConfig = { - chainId: SupportedChains.chapel, - chainAddresses, - assets, - irms, - liquidationDefaults, - oracles, - specificParams, - deployedPlugins, - redemptionStrategies, - fundingStrategies, - chainDeployments: deployments.contracts, - leveragePairs -}; - -export default chainConfig; diff --git a/packages/chains/src/chapel/irms.ts b/packages/chains/src/chapel/irms.ts deleted file mode 100644 index 8e6a3ac70..000000000 --- a/packages/chains/src/chapel/irms.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IrmTypes } from "@ionicprotocol/types"; - -const baseIrms = [IrmTypes.JumpRateModel]; - -const irms: IrmTypes[] = [...baseIrms]; - -export default irms; diff --git a/packages/chains/src/chapel/leveragePairs.ts b/packages/chains/src/chapel/leveragePairs.ts deleted file mode 100644 index e194d1d61..000000000 --- a/packages/chains/src/chapel/leveragePairs.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { LeveragePoolConfig } from "@ionicprotocol/types"; - -const TEST_BOMB = "0x9B6E1039103812E0dcC1100a158e4a68014b2571"; -const TEST_WBNB = "0x9dD00920f5B74A31177cbaB834AB0904703c31B1"; - -const leveragePairs: LeveragePoolConfig[] = [ - { pool: "0xa4bc2fCF2F9d87EB349f74f8729024F92A030330", pairs: [{ borrow: TEST_WBNB, collateral: TEST_BOMB }] } -]; - -export default leveragePairs; diff --git a/packages/chains/src/chapel/liquidation.ts b/packages/chains/src/chapel/liquidation.ts deleted file mode 100644 index 9b37577c3..000000000 --- a/packages/chains/src/chapel/liquidation.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { assetSymbols, LiquidationDefaults, LiquidationStrategy, SupportedAsset } from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; - -import chainAddresses from "./addresses"; -import { assets } from "./assets"; - -const liquidationDefaults: LiquidationDefaults = { - DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, - ASSET_SPECIFIC_ROUTER: {}, - SUPPORTED_OUTPUT_CURRENCIES: [ - constants.AddressZero, - assets.find((a: SupportedAsset) => a.symbol === assetSymbols.WBNB)!.underlying - ], - SUPPORTED_INPUT_CURRENCIES: [ - constants.AddressZero, - assets.find((a: SupportedAsset) => a.symbol === assetSymbols.WBNB)!.underlying - ], - LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), - LIQUIDATION_INTERVAL_SECONDS: 60, - jarvisPools: [], - balancerPools: [] -}; - -export default liquidationDefaults; diff --git a/packages/chains/src/chapel/oracles.ts b/packages/chains/src/chapel/oracles.ts deleted file mode 100644 index fba0bf56b..000000000 --- a/packages/chains/src/chapel/oracles.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { OracleTypes } from "@ionicprotocol/types"; - -const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; - -const oracles: OracleTypes[] = [ - ...baseOracles, - OracleTypes.ChainlinkPriceOracleV2, - OracleTypes.UniswapTwapPriceOracleV2 -]; - -export default oracles; diff --git a/packages/chains/src/chapel/params.ts b/packages/chains/src/chapel/params.ts deleted file mode 100644 index 808562e12..000000000 --- a/packages/chains/src/chapel/params.ts +++ /dev/null @@ -1,36 +0,0 @@ -import { assetSymbols, ChainParams } from "@ionicprotocol/types"; -import { BigNumber } from "ethers"; - -import chainAddresses from "./addresses"; - -const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((20 * 24 * 365 * 60).toString()), - cgId: "binancecoin-chapel", - metadata: { - chainIdHex: "0x61", - name: "BSC Testnet (Chapel)", - shortName: "BSC Testnet", - img: "https://d1912tcoux65lj.cloudfront.net/network/chapel.jpg", - rpcUrls: { - default: { http: ["https://data-seed-prebsc-1-s1.binance.org:8545/"] }, - public: { http: ["https://data-seed-prebsc-1-s1.binance.org:8545/"] } - }, - blockExplorerUrls: { default: { name: "BscScan(Testnet)", url: "https://testnet.bscscan.com" } }, - nativeCurrency: { - symbol: "BNB", - name: "BSC" - }, - wrappedNativeCurrency: { - symbol: assetSymbols.WBNB, - address: chainAddresses.W_TOKEN, - name: "BSC", - decimals: 18, - color: "#627EEA", - overlayTextColor: "#fff", - logoURL: "https://d1912tcoux65lj.cloudfront.net/network/chapel.jpg" - }, - testnet: true - } -}; - -export default specificParams; diff --git a/packages/chains/src/chapel/plugins.ts b/packages/chains/src/chapel/plugins.ts deleted file mode 100644 index 075787ef7..000000000 --- a/packages/chains/src/chapel/plugins.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DeployedPlugins } from "@ionicprotocol/types"; - -const deployedPlugins: DeployedPlugins = {}; - -export default deployedPlugins; diff --git a/packages/chains/src/chapel/redemptionStrategies.ts b/packages/chains/src/chapel/redemptionStrategies.ts deleted file mode 100644 index d8a28bcfd..000000000 --- a/packages/chains/src/chapel/redemptionStrategies.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const redemptionStrategies: RedemptionStrategy[] = [ - { - inputToken: underlying(assets, assetSymbols["WBNB-BUSD"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.WBNB) - }, - { - inputToken: underlying(assets, assetSymbols.BOMB), - strategy: RedemptionStrategyContract.XBombLiquidatorFunder, - outputToken: underlying(assets, assetSymbols.TUSD) - }, - { - inputToken: underlying(assets, assetSymbols.BOMB), - strategy: RedemptionStrategyContract.XBombLiquidatorFunder, - outputToken: underlying(assets, assetSymbols.TDAI) - }, - { - inputToken: underlying(assets, assetSymbols.TUSD), - strategy: RedemptionStrategyContract.XBombLiquidatorFunder, - outputToken: underlying(assets, assetSymbols.BOMB) - }, - { - inputToken: underlying(assets, assetSymbols.TDAI), - strategy: RedemptionStrategyContract.XBombLiquidatorFunder, - outputToken: underlying(assets, assetSymbols.BOMB) - } -]; - -export default redemptionStrategies; diff --git a/packages/chains/src/common/docs.ts b/packages/chains/src/common/docs.ts index 765a7e0e9..010e16afa 100644 --- a/packages/chains/src/common/docs.ts +++ b/packages/chains/src/common/docs.ts @@ -8,38 +8,6 @@ export const defaultDocs = (blockExplorerUrl: string, tokenAddress: string): str export const wrappedAssetDocs = (chainId: SupportedChains) => { const wrapAddress = { - [SupportedChains.bsc]: { - swapName: "PancakeSwap", - swapAddress: "https://pancakeswap.finance/swap?outputCurrency=0xbb4CdB9CBd36B01bD1cBaEBF2De08d9173bc095c" - }, - [SupportedChains.polygon]: { - swapName: "SushiSwap", - swapAddress: - "https://app.sushi.com/swap?tokens=MATIC&tokens=0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270&chainId=137" - }, - [SupportedChains.arbitrum]: { - swapName: "SushiSwap", - swapAddress: - "https://app.sushi.com/swap?inputCurrency=ETH&outputCurrency=0x82aF49447D8a07e3bd95BD0d56f35241523fBab1&chainId=42161" - }, - [SupportedChains.ganache]: {}, - [SupportedChains.neon]: { - swapName: "MoraSwap", - swapAddress: "https://moraswap.com/exchange/swap" - }, - [SupportedChains.chapel]: {}, - [SupportedChains.linea]: { - swapName: "Uniswap", - swapAddress: "https://swap.linea.build/#/swap" - }, - [SupportedChains.ethereum]: { - swapName: "Uniswap", - swapAddress: "https://app.uniswap.org/#/swap?outputCurrency=0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2" - }, - [SupportedChains.zkevm]: { - swapName: "Quickswap", - swapAddress: "https://quickswap.exchange/#/swap?swapIndex=2¤cy1=0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9" - }, [SupportedChains.mode]: { swapName: "Kim", swapAddress: "https://app.kim.exchange/swap" @@ -52,6 +20,10 @@ export const wrappedAssetDocs = (chainId: SupportedChains) => { [SupportedChains.optimism]: { swapName: "Uniswap", swapAddress: "https://app.uniswap.org/?chain=optimism" + }, + [SupportedChains.bob]: { + swapName: "Velodrome", + swapAddress: "https://velodrome.finance/swap" } }[chainId]; diff --git a/packages/chains/src/ethereum/addresses.ts b/packages/chains/src/ethereum/addresses.ts deleted file mode 100644 index 28707bcbc..000000000 --- a/packages/chains/src/ethereum/addresses.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { UNISWAP_V3_ADDRESSES } from "../common/addresses"; - -import { assets } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: underlying(assets, assetSymbols.WETH), - W_TOKEN_USD_CHAINLINK_PRICE_FEED: "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419", - UNISWAP_V2_ROUTER: "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - UNISWAP_V2_FACTORY: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", - UNISWAP_V3_ROUTER: "0xE592427A0AEce92De3Edee1F18E0157C05861564", - PAIR_INIT_HASH: ethers.utils.hexlify("0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"), - STABLE_TOKEN: underlying(assets, assetSymbols.USDC), - W_BTC_TOKEN: underlying(assets, assetSymbols.WBTC), - UNISWAP_V3: UNISWAP_V3_ADDRESSES -}; - -export default chainAddresses; diff --git a/packages/chains/src/ethereum/assets.ts b/packages/chains/src/ethereum/assets.ts deleted file mode 100644 index 921993785..000000000 --- a/packages/chains/src/ethereum/assets.ts +++ /dev/null @@ -1,392 +0,0 @@ -import { assetSymbols, OracleTypes, SupportedAsset, SupportedChains } from "@ionicprotocol/types"; - -import { balancerDocs, defaultDocs, sommFinanceMainnetDocs, wrappedAssetDocs } from "../common"; - -export const WBTC = "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599"; -export const USDC = "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48"; -export const WETH = "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2"; -export const wstETH = "0x7f39C581F595B53c5cb19bD0b3f8dA6c935E2Ca0"; -export const DAI = "0x6B175474E89094C44Da98b954EedeAC495271d0F"; - -const BAL = "0xba100000625a3754423978a60c9317c58a424e3D"; -const PAR = "0x68037790A0229e9Ce6EaA8A99ea92964106C4703"; -const USDT = "0xdAC17F958D2ee523a2206206994597C13D831ec7"; -const eUSD = "0x97de57eC338AB5d51557DA3434828C5DbFaDA371"; -const GOHM = "0x0ab87046fBb341D058F17CBC4c1133F25a20a52f"; -const OHM = "0x64aa3364F17a4D01c6f1751Fd97C2BD3D7e7f1D5"; -const FRAX = "0x853d955aCEf822Db058eb8505911ED77F175b99e"; -const MIM = "0x99D8a9C45b2ecA8864373A26D1459e3Dff1e17F3"; -const frxETH = "0x5E8422345238F34275888049021821E8E08CAa1f"; -const stETH = "0xae7ab96520DE3A18E5e111B5EaAb095312D7fE84"; -const swETH = "0xf951E335afb289353dc249e82926178EaC7DEd78"; -const cbETH = "0xBe9895146f7AF43049ca1c1AE358B0541Ea49704"; -// const ankrETH = "0xE95A203B1a91a908F9B9CE46459d101078c2c3cb"; -const rETH = "0xae78736Cd615f374D3085123A210448E74Fc6393"; -const ANKR = "0x8290333ceF9e6D528dD5618Fb97a76f268f3EDD4"; - -// Balancer -const SWETH_BBA_WETH_BPT = "0x02D928E68D8F10C0358566152677Db51E1e2Dc8C"; -const WSTETH_WETH_STABLE_BPT = "0x32296969Ef14EB0c6d29669C550D4a0449130230"; -const WSTETH_RETH_FRXETH_STABLE_BPT = "0x5aEe1e99fE86960377DE9f88689616916D5DcaBe"; -const WBETH_WSTETH_STABLE_BPT = "0x2E848426AEc6dbF2260535a5bEa048ed94d9FF3D"; -const WSTETH_CBETH_STABLE_BPT = "0x9c6d47Ff73e0F5E51BE5FD53236e3F595C5793F2"; -const OHM50_DAI50_BPT = "0x76FCf0e8C7Ff37A47a799FA2cd4c13cDe0D981C9"; -const OHM50_WETH50_BPT = "0xD1eC5e215E8148D76F4460e4097FD3d5ae0A3558"; -const AAVE_BOOSTED_STABLE_BPT = "0xfeBb0bbf162E64fb9D0dfe186E517d84C395f016"; - -const AAVE_LINEAR_DAI = "0x6667c6fa9f2b3Fc1Cc8D85320b62703d938E4385"; -const AAVE_LINEAR_USDT = "0xA1697F9Af0875B63DdC472d6EeBADa8C1fAB8568"; -const AAVE_LINEAR_USDC = "0xcbFA4532D8B2ade2C261D3DD5ef2A2284f792692"; -const AAVE_LINEAR_WETH = "0x60D604890feaa0b5460B28A424407c24fe89374a"; -// Require oracles for R -// const R_DAI_STABLE_BPT = "0x20a61B948E33879ce7F23e535CC7BAA3BC66c5a9"; -// Requires oracle for STG (PCS V3 works) -// const STG_BOOSTED_WEIGHTED_BPT = "0x639883476960a23b38579acfd7D71561A0f408Cf"; - -// Sommelier -const realYieldUSD = "0x97e6E0a40a3D02F12d1cEC30ebfbAE04e37C119E"; -const realYieldETH = "0xb5b29320d2Dde5BA5BAFA1EbcD270052070483ec"; -const ethBtcTrend = "0x6b7f87279982d919Bbf85182DDeAB179B366D8f2"; - -export const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.BAL, - underlying: BAL, - name: "Balancer", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", BAL) - }, - { - symbol: assetSymbols.DAI, - underlying: DAI, - name: "Dai Stablecoin", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", DAI) - }, - { - symbol: assetSymbols.FRAX, - underlying: FRAX, - name: "Frax", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", FRAX) - }, - { - symbol: assetSymbols.MIM, - underlying: MIM, - name: "Magic Internet Money", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", MIM) - }, - { - symbol: assetSymbols.GOHM, - underlying: GOHM, - name: "Governance OHM", - decimals: 18, - oracle: OracleTypes.UniswapV3PriceOracle, - extraDocs: defaultDocs("https://etherscan.io", GOHM) - }, - { - symbol: assetSymbols.OHM, - underlying: GOHM, - name: "Olympus V2", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", OHM) - }, - { - symbol: assetSymbols.PAR, - underlying: PAR, - name: "PAR Stablecoin", - decimals: 18, - oracle: OracleTypes.UniswapV3PriceOracle, - extraDocs: defaultDocs("https://etherscan.io", PAR) - }, - { - symbol: assetSymbols.ANKR, - underlying: ANKR, - name: "Ankr Network Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", ANKR) - }, - { - symbol: assetSymbols.USDC, - underlying: USDC, - name: "USD Coin", - decimals: 6, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", USDC) - }, - { - symbol: assetSymbols.USDT, - underlying: USDT, - name: "Tether USD", - decimals: 6, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", USDT) - }, - { - symbol: assetSymbols.eUSD, - underlying: eUSD, - name: "eUSD", - decimals: 18, - oracle: OracleTypes.CurveV2PriceOracle, - extraDocs: defaultDocs("https://etherscan.io", eUSD) - }, - { - symbol: assetSymbols.WBTC, - underlying: WBTC, - name: "Wrapped BTC", - decimals: 8, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://etherscan.io", WBTC) - }, - { - symbol: assetSymbols.WETH, - underlying: WETH, - name: "Wrapped Ether", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle, - extraDocs: wrappedAssetDocs(SupportedChains.ethereum) - }, - { - symbol: assetSymbols.stETH, - underlying: stETH, - name: "Lido Staked Ether", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: ` -

How to acquire this token


-

You can get stETH by staking your ETH on Lido on Mainnet

` - }, - { - symbol: assetSymbols.wstETH, - underlying: wstETH, - name: "Wrapped Staked Ether", - decimals: 18, - oracle: OracleTypes.WSTEthPriceOracle, - extraDocs: ` -

How to acquire this token


-

You can get wstETH by wrapping your stETH on Lido on Mainnet

` - }, - { - symbol: assetSymbols.rETH, - underlying: rETH, - name: "Rocket Pool ETH", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: ` -

How to acquire this token


-

You can get rETH by staking your ETH on RocketPool on Mainnet

` - }, - { - symbol: assetSymbols.cbETH, - underlying: cbETH, - name: "Coinbase Staked ETH", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: ` -

How to acquire this token


-

You can get cbETH by staking your ETH on Coinbase

` - }, - { - symbol: assetSymbols.swETH, - underlying: swETH, - name: "Swell ETH", - decimals: 18, - oracle: OracleTypes.DiaPriceOracle, - extraDocs: ` -

How to acquire this token


-

You can get swETH by staking your ETH on Swell

` - }, - { - symbol: assetSymbols.frxETH, - underlying: frxETH, - name: "Frax ETH", - decimals: 18, - oracle: OracleTypes.CurveV2PriceOracle, - extraDocs: ` -

How to acquire this token


-

You can get frxETH by minting it with your ETH on Frax Finance

` - }, - // Sommelier Finance - { - symbol: assetSymbols.realYieldUSD, - underlying: realYieldUSD, - name: "Sommelier Finance Real Yield USD", - decimals: 18, - oracle: OracleTypes.ERC4626Oracle, - extraDocs: sommFinanceMainnetDocs("Real-Yield-USD", realYieldUSD, [ - assetSymbols.USDC, - assetSymbols.USDT, - assetSymbols.DAI - ]) - }, - { - symbol: assetSymbols.realYieldETH, - underlying: realYieldUSD, - name: "Sommelier Finance Real Yield ETH", - decimals: 18, - oracle: OracleTypes.ERC4626Oracle, - extraDocs: sommFinanceMainnetDocs("Real-Yield-ETH", realYieldETH, [ - assetSymbols.cbETH, - assetSymbols.rETH, - assetSymbols.stETH, - assetSymbols.WETH - ]) - }, - { - symbol: assetSymbols.ethBtcTrend, - underlying: ethBtcTrend, - name: "Sommelier Finance ETH/BTC Trend", - decimals: 18, - oracle: OracleTypes.ERC4626Oracle, - extraDocs: sommFinanceMainnetDocs("ETH-BTC-Trend", ethBtcTrend, [assetSymbols.WETH, assetSymbols.WBTC]) - }, - { - symbol: assetSymbols.SWETH_BBA_WETH_BPT, - underlying: SWETH_BBA_WETH_BPT, - name: "SwETH/Boosted Aave V3 WETH", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "ethereum", - "0x02d928e68d8f10c0358566152677db51e1e2dc8c00000000000000000000051e", - "SwETH/Boosted Aave V3 WETH", - SWETH_BBA_WETH_BPT - ) - }, - { - symbol: assetSymbols.WSTETH_WETH_STABLE_BPT, - underlying: WSTETH_WETH_STABLE_BPT, - name: "wstETH/WETH Stable LP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "ethereum", - "0x32296969ef14eb0c6d29669c550d4a0449130230000200000000000000000080", - "wstETH/WETH Stable LP", - WSTETH_WETH_STABLE_BPT - ) - }, - { - symbol: assetSymbols.WSTETH_RETH_FRXETH_STABLE_BPT, - underlying: WSTETH_RETH_FRXETH_STABLE_BPT, - name: "wstETH/rETH/frxETH Stable LP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "ethereum", - "0x5aee1e99fe86960377de9f88689616916d5dcabe000000000000000000000467", - "wstETH/rETH/frxETH Stable LP", - WSTETH_RETH_FRXETH_STABLE_BPT - ) - }, - { - symbol: assetSymbols.WBETH_WSTETH_STABLE_BPT, - underlying: WBETH_WSTETH_STABLE_BPT, - name: "wBETH/wstETH Stable LP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "ethereum", - "0x2e848426aec6dbf2260535a5bea048ed94d9ff3d000000000000000000000536", - "wBETH/wstETH Stable LP", - WBETH_WSTETH_STABLE_BPT - ) - }, - { - symbol: assetSymbols.WSTETH_CBETH_STABLE_BPT, - underlying: WSTETH_CBETH_STABLE_BPT, - name: "wstETH/cbETH Stable LP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "ethereum", - "0x9c6d47ff73e0f5e51be5fd53236e3f595c5793f200020000000000000000042c", - "wstETH/cbETH Stable LP", - WSTETH_CBETH_STABLE_BPT - ) - }, - { - symbol: assetSymbols.OHM50_DAI50_BPT, - underlying: OHM50_DAI50_BPT, - name: "OHM50/DAI50 Weighed LP", - decimals: 18, - oracle: OracleTypes.BalancerLpTokenPriceOracle, - extraDocs: balancerDocs( - "ethereum", - "0x76fcf0e8c7ff37a47a799fa2cd4c13cde0d981c90002000000000000000003d2", - "OHM50/DAI50 Weighed LP", - OHM50_DAI50_BPT - ) - }, - { - symbol: assetSymbols.OHM50_WETH50_BPT, - underlying: OHM50_WETH50_BPT, - name: "OHM50/WETH50 Weighed LP", - decimals: 18, - oracle: OracleTypes.BalancerLpTokenPriceOracle, - extraDocs: balancerDocs( - "ethereum", - "0xd1ec5e215e8148d76f4460e4097fd3d5ae0a35580002000000000000000003d3", - "OHM50/WETH50 Weighed LP", - OHM50_WETH50_BPT - ) - }, - { - symbol: assetSymbols.AAVE_LINEAR_WETH, - underlying: AAVE_LINEAR_WETH, - name: "bb-a-WETH Linear BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpLinearPoolPriceOracle, - extraDocs: "", - disabled: true - }, - { - symbol: assetSymbols.AAVE_LINEAR_USDT, - underlying: AAVE_LINEAR_USDT, - name: "bb-a-USDT Linear BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpLinearPoolPriceOracle, - extraDocs: "", - disabled: true - }, - { - symbol: assetSymbols.AAVE_LINEAR_USDC, - underlying: AAVE_LINEAR_USDC, - name: "bb-a-USDC Linear BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpLinearPoolPriceOracle, - extraDocs: "", - disabled: true - }, - { - symbol: assetSymbols.AAVE_LINEAR_DAI, - underlying: AAVE_LINEAR_DAI, - name: "bb-a-DAI Linear BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpLinearPoolPriceOracle, - extraDocs: "", - disabled: true - }, - { - symbol: assetSymbols.AAVE_BOOSTED_STABLE_BPT, - underlying: AAVE_BOOSTED_STABLE_BPT, - name: "AAVE Boosted Stable LP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "ethereum", - "0xfebb0bbf162e64fb9d0dfe186e517d84c395f016000000000000000000000502", - "AAVE Boosted Stable LP", - AAVE_BOOSTED_STABLE_BPT - ) - } -]; - -export default assets; diff --git a/packages/chains/src/ethereum/fundingStrategies.ts b/packages/chains/src/ethereum/fundingStrategies.ts deleted file mode 100644 index d96178232..000000000 --- a/packages/chains/src/ethereum/fundingStrategies.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, FundingStrategy, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const fundingStrategies: FundingStrategy[] = []; - -export default fundingStrategies; diff --git a/packages/chains/src/ethereum/index.ts b/packages/chains/src/ethereum/index.ts deleted file mode 100644 index c368f16fa..000000000 --- a/packages/chains/src/ethereum/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; - -import deployments from "../../deployments/ethereum.json"; - -import chainAddresses from "./addresses"; -import { assets } from "./assets"; -import fundingStrategies from "./fundingStrategies"; -import irms from "./irms"; -import leveragePairs from "./leveragePairs"; -import liquidationDefaults from "./liquidation"; -import oracles from "./oracles"; -import specificParams from "./params"; -import deployedPlugins from "./plugins"; -import redemptionStrategies from "./redemptionStrategies"; - -const chainConfig: ChainConfig = { - chainId: SupportedChains.ethereum, - chainAddresses, - assets, - irms, - liquidationDefaults, - oracles, - specificParams, - deployedPlugins, - redemptionStrategies, - fundingStrategies, - chainDeployments: deployments.contracts, - leveragePairs -}; - -export default chainConfig; diff --git a/packages/chains/src/ethereum/irms.ts b/packages/chains/src/ethereum/irms.ts deleted file mode 100644 index 8e6a3ac70..000000000 --- a/packages/chains/src/ethereum/irms.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IrmTypes } from "@ionicprotocol/types"; - -const baseIrms = [IrmTypes.JumpRateModel]; - -const irms: IrmTypes[] = [...baseIrms]; - -export default irms; diff --git a/packages/chains/src/ethereum/leveragePairs.ts b/packages/chains/src/ethereum/leveragePairs.ts deleted file mode 100644 index aec608582..000000000 --- a/packages/chains/src/ethereum/leveragePairs.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LeveragePoolConfig } from "@ionicprotocol/types"; - -const leveragePairs: LeveragePoolConfig[] = []; - -export default leveragePairs; diff --git a/packages/chains/src/ethereum/liquidation.ts b/packages/chains/src/ethereum/liquidation.ts deleted file mode 100644 index bba913fef..000000000 --- a/packages/chains/src/ethereum/liquidation.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { assetSymbols, LiquidationDefaults, LiquidationStrategy, underlying } from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; - -import chainAddresses from "./addresses"; -import { assets, USDC, WETH, wstETH } from "./assets"; - -const liquidationDefaults: LiquidationDefaults = { - DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, - ASSET_SPECIFIC_ROUTER: {}, - SUPPORTED_OUTPUT_CURRENCIES: [ - constants.AddressZero, - underlying(assets, assetSymbols.WETH), - underlying(assets, assetSymbols.USDC), - underlying(assets, assetSymbols.USDT), - underlying(assets, assetSymbols.DAI) - ], - SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, WETH], - LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), - LIQUIDATION_INTERVAL_SECONDS: 20, - jarvisPools: [], - balancerPools: [ - { - poolAddress: underlying(assets, assetSymbols.WSTETH_WETH_STABLE_BPT), - underlyingTokens: [underlying(assets, assetSymbols.WETH), wstETH] - }, - { - poolAddress: underlying(assets, assetSymbols.WSTETH_RETH_FRXETH_STABLE_BPT), - underlyingTokens: [wstETH, underlying(assets, assetSymbols.rETH), underlying(assets, assetSymbols.frxETH)] - }, - { - poolAddress: underlying(assets, assetSymbols.WSTETH_CBETH_STABLE_BPT), - underlyingTokens: [wstETH, underlying(assets, assetSymbols.cbETH)] - }, - { - poolAddress: underlying(assets, assetSymbols.WSTETH_CBETH_STABLE_BPT), - underlyingTokens: [wstETH, underlying(assets, assetSymbols.cbETH)] - }, - { - poolAddress: underlying(assets, assetSymbols.AAVE_BOOSTED_STABLE_BPT), - underlyingTokens: [ - underlying(assets, assetSymbols.AAVE_LINEAR_DAI), - underlying(assets, assetSymbols.AAVE_LINEAR_USDC), - underlying(assets, assetSymbols.AAVE_LINEAR_USDT) - ] - }, - { - poolAddress: underlying(assets, assetSymbols.AAVE_LINEAR_USDC), - underlyingTokens: [USDC, underlying(assets, assetSymbols.AAVE_LINEAR_USDC)] - } - ] -}; - -export default liquidationDefaults; diff --git a/packages/chains/src/ethereum/oracles.ts b/packages/chains/src/ethereum/oracles.ts deleted file mode 100644 index a6d5b8db1..000000000 --- a/packages/chains/src/ethereum/oracles.ts +++ /dev/null @@ -1,12 +0,0 @@ -import { OracleTypes } from "@ionicprotocol/types"; - -const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; - -const oracles: OracleTypes[] = [ - ...baseOracles, - OracleTypes.ChainlinkPriceOracleV2, - OracleTypes.ERC4626Oracle, - OracleTypes.WSTEthPriceOracle -]; - -export default oracles; diff --git a/packages/chains/src/ethereum/plugins.ts b/packages/chains/src/ethereum/plugins.ts deleted file mode 100644 index 075787ef7..000000000 --- a/packages/chains/src/ethereum/plugins.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DeployedPlugins } from "@ionicprotocol/types"; - -const deployedPlugins: DeployedPlugins = {}; - -export default deployedPlugins; diff --git a/packages/chains/src/ethereum/redemptionStrategies.ts b/packages/chains/src/ethereum/redemptionStrategies.ts deleted file mode 100644 index cdd994e51..000000000 --- a/packages/chains/src/ethereum/redemptionStrategies.ts +++ /dev/null @@ -1,91 +0,0 @@ -import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets, DAI, USDC, WETH, wstETH } from "./assets"; - -const redemptionStrategies: RedemptionStrategy[] = [ - // SOMM - { - inputToken: underlying(assets, assetSymbols.realYieldUSD), - strategy: RedemptionStrategyContract.ERC4626Liquidator, - outputToken: USDC - }, - { - inputToken: underlying(assets, assetSymbols.realYieldETH), - strategy: RedemptionStrategyContract.ERC4626Liquidator, - outputToken: WETH - }, - { - inputToken: underlying(assets, assetSymbols.ethBtcTrend), - strategy: RedemptionStrategyContract.ERC4626Liquidator, - outputToken: WETH - }, - // BLPs - { - inputToken: underlying(assets, assetSymbols.OHM50_DAI50_BPT), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: DAI - }, - { - inputToken: underlying(assets, assetSymbols.OHM50_WETH50_BPT), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: WETH - }, - { - inputToken: underlying(assets, assetSymbols.SWETH_BBA_WETH_BPT), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: WETH - }, - { - inputToken: underlying(assets, assetSymbols.WSTETH_WETH_STABLE_BPT), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: WETH - }, - { - inputToken: underlying(assets, assetSymbols.WSTETH_RETH_FRXETH_STABLE_BPT), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: wstETH - }, - { - inputToken: underlying(assets, assetSymbols.WBETH_WSTETH_STABLE_BPT), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: wstETH - }, - { - inputToken: underlying(assets, assetSymbols.WSTETH_CBETH_STABLE_BPT), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: wstETH - }, - { - inputToken: underlying(assets, assetSymbols.AAVE_BOOSTED_STABLE_BPT), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.AAVE_LINEAR_USDC) - }, - { - inputToken: underlying(assets, assetSymbols.AAVE_LINEAR_USDC), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - // Balancer and Curve Swaps - { - inputToken: underlying(assets, assetSymbols.eUSD), - strategy: RedemptionStrategyContract.CurveSwapLiquidatorFunder, - outputToken: USDC - }, - { - inputToken: underlying(assets, assetSymbols.wstETH), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: WETH - }, - { - inputToken: underlying(assets, assetSymbols.rETH), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: wstETH - }, - { - inputToken: underlying(assets, assetSymbols.cbETH), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: wstETH - } -]; - -export default redemptionStrategies; diff --git a/packages/chains/src/ganache/addresses.ts b/packages/chains/src/ganache/addresses.ts deleted file mode 100644 index 15ae85a46..000000000 --- a/packages/chains/src/ganache/addresses.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { assets } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: underlying(assets, assetSymbols.WETH), - W_TOKEN_USD_CHAINLINK_PRICE_FEED: "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419", - UNISWAP_V2_ROUTER: "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - UNISWAP_V2_FACTORY: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", - PAIR_INIT_HASH: ethers.utils.hexlify("0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"), - STABLE_TOKEN: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - W_BTC_TOKEN: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599" -}; - -export default chainAddresses; diff --git a/packages/chains/src/ganache/assets.ts b/packages/chains/src/ganache/assets.ts deleted file mode 100644 index be08a6bae..000000000 --- a/packages/chains/src/ganache/assets.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { assetSymbols, OracleTypes, SupportedAsset } from "@ionicprotocol/types"; - -export const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.WETH, - underlying: "0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2", - name: "Wrapped Ether", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle - }, - { - symbol: assetSymbols.TOUCH, - underlying: "0x02Ec29Fd9f0bB212eD2C4926ACe1aeab732ed620", - name: "Touch Token", - decimals: 18, - oracle: OracleTypes.SimplePriceOracle - }, - { - symbol: assetSymbols.TRIBE, - underlying: "0xf9a089C918ad9c484201E7d328C0d29019997117", - name: "Tribe Token", - decimals: 18, - oracle: OracleTypes.SimplePriceOracle - } -]; - -export default assets; diff --git a/packages/chains/src/ganache/fundingStrategies.ts b/packages/chains/src/ganache/fundingStrategies.ts deleted file mode 100644 index aa2ef3e73..000000000 --- a/packages/chains/src/ganache/fundingStrategies.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, FundingStrategy, FundingStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const fundingStrategies: FundingStrategy[] = []; - -export default fundingStrategies; diff --git a/packages/chains/src/ganache/index.ts b/packages/chains/src/ganache/index.ts deleted file mode 100644 index 66f539f4e..000000000 --- a/packages/chains/src/ganache/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; - -import deployments from "../../deployments/ganache.json"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; -import fundingStrategies from "./fundingStrategies"; -import irms from "./irms"; -import leveragePairs from "./leveragePairs"; -import liquidationDefaults from "./liquidation"; -import oracles from "./oracles"; -import specificParams from "./params"; -import deployedPlugins from "./plugins"; -import redemptionStrategies from "./redemptionStrategies"; - -const chainConfig: ChainConfig = { - chainId: SupportedChains.ganache, - chainAddresses, - assets, - irms, - liquidationDefaults, - oracles, - specificParams, - deployedPlugins, - redemptionStrategies, - fundingStrategies, - chainDeployments: deployments.contracts, - leveragePairs -}; - -export default chainConfig; diff --git a/packages/chains/src/ganache/irms.ts b/packages/chains/src/ganache/irms.ts deleted file mode 100644 index 8e6a3ac70..000000000 --- a/packages/chains/src/ganache/irms.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IrmTypes } from "@ionicprotocol/types"; - -const baseIrms = [IrmTypes.JumpRateModel]; - -const irms: IrmTypes[] = [...baseIrms]; - -export default irms; diff --git a/packages/chains/src/ganache/leveragePairs.ts b/packages/chains/src/ganache/leveragePairs.ts deleted file mode 100644 index aec608582..000000000 --- a/packages/chains/src/ganache/leveragePairs.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LeveragePoolConfig } from "@ionicprotocol/types"; - -const leveragePairs: LeveragePoolConfig[] = []; - -export default leveragePairs; diff --git a/packages/chains/src/ganache/liquidation.ts b/packages/chains/src/ganache/liquidation.ts deleted file mode 100644 index 6ce9a3661..000000000 --- a/packages/chains/src/ganache/liquidation.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { - assetSymbols, - LiquidationDefaults, - LiquidationStrategy, - SupportedAsset, - underlying -} from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; - -import chainAddresses from "./addresses"; -import { assets } from "./assets"; - -const liquidationDefaults: LiquidationDefaults = { - DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, - ASSET_SPECIFIC_ROUTER: {}, - SUPPORTED_OUTPUT_CURRENCIES: [constants.AddressZero, underlying(assets, assetSymbols.WETH)], - SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, underlying(assets, assetSymbols.WETH)], - LIQUIDATION_STRATEGY: LiquidationStrategy.DEFAULT, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), - LIQUIDATION_INTERVAL_SECONDS: 2, - jarvisPools: [], - balancerPools: [] -}; - -export default liquidationDefaults; diff --git a/packages/chains/src/ganache/oracles.ts b/packages/chains/src/ganache/oracles.ts deleted file mode 100644 index 50b1a18a6..000000000 --- a/packages/chains/src/ganache/oracles.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { OracleTypes } from "@ionicprotocol/types"; - -const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; - -const oracles: OracleTypes[] = [...baseOracles]; - -export default oracles; diff --git a/packages/chains/src/ganache/params.ts b/packages/chains/src/ganache/params.ts deleted file mode 100644 index cbcc58f05..000000000 --- a/packages/chains/src/ganache/params.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { assetSymbols, ChainParams } from "@ionicprotocol/types"; -import { BigNumber } from "ethers"; - -import chainAddresses from "./addresses"; - -const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((5 * 24 * 365 * 60).toString()), - cgId: "ethereum", - metadata: { - chainIdHex: "0x539", - name: "Ganache", - shortName: "Ganache", - img: "https://d1912tcoux65lj.cloudfront.net/network/hardhat.png", - rpcUrls: { default: { http: ["http://localhost:8545"] }, public: { http: ["http://localhost:8545"] } }, - blockExplorerUrls: { default: { name: "Etherscan", url: "http://localhost:3000" } }, - nativeCurrency: { - symbol: "ETH", - name: "Ganache" - }, - wrappedNativeCurrency: { - symbol: assetSymbols.WETH, - address: chainAddresses.W_TOKEN, - name: "Ganache", - decimals: 18, - color: "#627EEA", - overlayTextColor: "#fff", - logoURL: "https://d1912tcoux65lj.cloudfront.net/network/hardhat.png" - }, - testnet: true - } -}; - -export default specificParams; diff --git a/packages/chains/src/ganache/plugins.ts b/packages/chains/src/ganache/plugins.ts deleted file mode 100644 index 075787ef7..000000000 --- a/packages/chains/src/ganache/plugins.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DeployedPlugins } from "@ionicprotocol/types"; - -const deployedPlugins: DeployedPlugins = {}; - -export default deployedPlugins; diff --git a/packages/chains/src/index.ts b/packages/chains/src/index.ts index e0a24b35a..44e7d9463 100644 --- a/packages/chains/src/index.ts +++ b/packages/chains/src/index.ts @@ -1,33 +1,18 @@ import { ChainConfig } from "@ionicprotocol/types"; -import { default as arbitrum } from "./arbitrum"; import { default as base } from "./base"; -import { default as bsc } from "./bsc"; -import { default as chapel } from "./chapel"; -import { default as ethereum } from "./ethereum"; -import { default as ganache } from "./ganache"; -import { default as linea } from "./linea"; +import { default as bob } from "./bob"; import { default as mode } from "./mode"; -import { default as neon } from "./neon"; import { default as optimism } from "./optimism"; -import { default as polygon } from "./polygon"; import { default as sepolia } from "./sepolia"; -import { default as zkevm } from "./zkevm"; -export { bsc, polygon, arbitrum, ethereum, chapel, ganache, neon, linea, zkevm, mode, base, optimism, sepolia }; +export { mode, base, optimism, bob, sepolia }; export const chainIdToConfig: { [chainId: number]: ChainConfig } = { - [bsc.chainId]: bsc, - [polygon.chainId]: polygon, - [arbitrum.chainId]: arbitrum, - [chapel.chainId]: chapel, - [ganache.chainId]: ganache, - [neon.chainId]: neon, - [linea.chainId]: linea, - [ethereum.chainId]: ethereum, - [zkevm.chainId]: zkevm, [mode.chainId]: mode, - [sepolia.chainId]: sepolia, [base.chainId]: base, - [optimism.chainId]: optimism + [optimism.chainId]: optimism, + [bob.chainId]: bob, + // testnet + [sepolia.chainId]: sepolia }; diff --git a/packages/chains/src/linea/addresses.ts b/packages/chains/src/linea/addresses.ts deleted file mode 100644 index c33797e19..000000000 --- a/packages/chains/src/linea/addresses.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { UNISWAP_V3_ADDRESSES } from "../common/addresses"; - -import { assets } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: underlying(assets, assetSymbols.WETH), - W_TOKEN_USD_CHAINLINK_PRICE_FEED: ethers.constants.AddressZero, - UNISWAP_V2_ROUTER: ethers.constants.AddressZero, - UNISWAP_V2_FACTORY: ethers.constants.AddressZero, - UNISWAP_V3_ROUTER: ethers.constants.AddressZero, - PAIR_INIT_HASH: ethers.utils.hexlify("0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"), - STABLE_TOKEN: underlying(assets, assetSymbols.USDC), - W_BTC_TOKEN: underlying(assets, assetSymbols.WBTC), - UNISWAP_V3: UNISWAP_V3_ADDRESSES -}; - -export default chainAddresses; diff --git a/packages/chains/src/linea/assets.ts b/packages/chains/src/linea/assets.ts deleted file mode 100644 index d59d8122e..000000000 --- a/packages/chains/src/linea/assets.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { assetSymbols, OracleTypes, SupportedAsset, SupportedChains } from "@ionicprotocol/types"; - -import { defaultDocs, wrappedAssetDocs } from "../common"; - -export const WBTC = "0x3aAB2285ddcDdaD8edf438C1bAB47e1a9D05a9b4"; -export const USDC = "0x176211869cA2b568f2A7D4EE941E073a821EE1ff"; -export const WETH = "0xe5D7C2a44FfDDf6b295A15c148167daaAf5Cf34f"; -export const DAI = "0x4AF15ec2A0BD43Db75dd04E62FAA3B8EF36b00d5"; -export const USDT = "0xA219439258ca9da29E9Cc4cE5596924745e12B93"; - -export const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.USDC, - underlying: USDC, - name: "USD Coin", - decimals: 6, - oracle: OracleTypes.UmbrellaPriceOracle, - extraDocs: defaultDocs("https://lineascan.build/", USDC) - }, - { - symbol: assetSymbols.USDT, - underlying: USDT, - name: "Tether USD", - decimals: 6, - oracle: OracleTypes.UmbrellaPriceOracle, - extraDocs: defaultDocs("https://lineascan.build/", USDT) - }, - { - symbol: assetSymbols.WBTC, - underlying: WBTC, - name: "Wrapped BTC", - decimals: 8, - oracle: OracleTypes.UmbrellaPriceOracle, - extraDocs: defaultDocs("https://lineascan.build/", WBTC) - }, - { - symbol: assetSymbols.WETH, - underlying: WETH, - name: "Wrapped Ether", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle, - extraDocs: wrappedAssetDocs(SupportedChains.linea) - }, - { - symbol: assetSymbols.DAI, - underlying: DAI, - name: "DAI Token", - decimals: 18, - oracle: OracleTypes.AlgebraPriceOracle, - extraDocs: defaultDocs("https://lineascan.build/", DAI), - disabled: true - } -]; - -export default assets; diff --git a/packages/chains/src/linea/fundingStrategies.ts b/packages/chains/src/linea/fundingStrategies.ts deleted file mode 100644 index d96178232..000000000 --- a/packages/chains/src/linea/fundingStrategies.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, FundingStrategy, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const fundingStrategies: FundingStrategy[] = []; - -export default fundingStrategies; diff --git a/packages/chains/src/linea/index.ts b/packages/chains/src/linea/index.ts deleted file mode 100644 index c8968627f..000000000 --- a/packages/chains/src/linea/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; - -import deployments from "../../deployments/linea.json"; - -import chainAddresses from "./addresses"; -import { assets } from "./assets"; -import fundingStrategies from "./fundingStrategies"; -import irms from "./irms"; -import leveragePairs from "./leveragePairs"; -import liquidationDefaults from "./liquidation"; -import oracles from "./oracles"; -import specificParams from "./params"; -import deployedPlugins from "./plugins"; -import redemptionStrategies from "./redemptionStrategies"; - -const chainConfig: ChainConfig = { - chainId: SupportedChains.linea, - chainAddresses, - assets, - irms, - liquidationDefaults, - oracles, - specificParams, - deployedPlugins, - redemptionStrategies, - fundingStrategies, - chainDeployments: deployments.contracts, - leveragePairs -}; - -export default chainConfig; diff --git a/packages/chains/src/linea/irms.ts b/packages/chains/src/linea/irms.ts deleted file mode 100644 index 8e6a3ac70..000000000 --- a/packages/chains/src/linea/irms.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IrmTypes } from "@ionicprotocol/types"; - -const baseIrms = [IrmTypes.JumpRateModel]; - -const irms: IrmTypes[] = [...baseIrms]; - -export default irms; diff --git a/packages/chains/src/linea/leveragePairs.ts b/packages/chains/src/linea/leveragePairs.ts deleted file mode 100644 index aec608582..000000000 --- a/packages/chains/src/linea/leveragePairs.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LeveragePoolConfig } from "@ionicprotocol/types"; - -const leveragePairs: LeveragePoolConfig[] = []; - -export default leveragePairs; diff --git a/packages/chains/src/linea/liquidation.ts b/packages/chains/src/linea/liquidation.ts deleted file mode 100644 index b20af7253..000000000 --- a/packages/chains/src/linea/liquidation.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { assetSymbols, LiquidationDefaults, LiquidationStrategy, underlying } from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; - -import chainAddresses from "./addresses"; -import { assets, USDC, WETH } from "./assets"; - -const liquidationDefaults: LiquidationDefaults = { - DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, - ASSET_SPECIFIC_ROUTER: {}, - SUPPORTED_OUTPUT_CURRENCIES: [constants.AddressZero, WETH, USDC], - SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, WETH], - LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), - LIQUIDATION_INTERVAL_SECONDS: 20, - jarvisPools: [], - balancerPools: [] -}; - -export default liquidationDefaults; diff --git a/packages/chains/src/linea/oracles.ts b/packages/chains/src/linea/oracles.ts deleted file mode 100644 index 4f2552caa..000000000 --- a/packages/chains/src/linea/oracles.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { OracleTypes } from "@ionicprotocol/types"; - -const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; - -const oracles: OracleTypes[] = [...baseOracles, OracleTypes.KyberSwapPriceOracle]; - -export default oracles; diff --git a/packages/chains/src/linea/params.ts b/packages/chains/src/linea/params.ts deleted file mode 100644 index 0ee17c524..000000000 --- a/packages/chains/src/linea/params.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { assetSymbols, ChainParams } from "@ionicprotocol/types"; -import { BigNumber } from "ethers"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; - -const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((5 * 24 * 365 * 60).toString()), - cgId: "ethereum", - metadata: { - chainIdHex: "0xE704", - name: "Linea Mainnet", - shortName: "Linea", - uniswapV3Fees: {}, - img: "https://d1912tcoux65lj.cloudfront.net/network/linea.png", - blockExplorerUrls: { default: { name: "lineascan", url: "https://lineascan.build" } }, - rpcUrls: { - default: { http: ["https://rpc.linea.build"] }, - public: { http: ["https://rpc.linea.build"] } - }, - nativeCurrency: { - symbol: "ETH", - name: "ETH" - }, - wrappedNativeCurrency: { - symbol: assetSymbols.WETH, - address: chainAddresses.W_TOKEN, - name: "WETH", - decimals: 18, - color: "#7A88A1", - overlayTextColor: "#fff", - logoURL: "https://d1912tcoux65lj.cloudfront.net/network/ethereum.png" - } - } -}; - -export default specificParams; diff --git a/packages/chains/src/linea/plugins.ts b/packages/chains/src/linea/plugins.ts deleted file mode 100644 index 075787ef7..000000000 --- a/packages/chains/src/linea/plugins.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DeployedPlugins } from "@ionicprotocol/types"; - -const deployedPlugins: DeployedPlugins = {}; - -export default deployedPlugins; diff --git a/packages/chains/src/linea/redemptionStrategies.ts b/packages/chains/src/linea/redemptionStrategies.ts deleted file mode 100644 index fce11c3cf..000000000 --- a/packages/chains/src/linea/redemptionStrategies.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; - -const redemptionStrategies: RedemptionStrategy[] = []; - -export default redemptionStrategies; diff --git a/packages/chains/src/neon/addresses.ts b/packages/chains/src/neon/addresses.ts deleted file mode 100644 index 4000ba62a..000000000 --- a/packages/chains/src/neon/addresses.ts +++ /dev/null @@ -1,16 +0,0 @@ -import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { assets } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: underlying(assets, assetSymbols.WNEON), - W_TOKEN_USD_CHAINLINK_PRICE_FEED: ethers.constants.AddressZero, - UNISWAP_V2_ROUTER: "0x594e37B9F39f5D31DEc4a8c1cC4fe2E254153034", - UNISWAP_V2_FACTORY: "0xd43F135f6667174f695ecB7DD2B5f953d161e4d1", - PAIR_INIT_HASH: ethers.utils.hexlify("0x90bd59376ac57291a9f9f006d78c05e6784b9f3e1381868317da55d80893a0e0"), - STABLE_TOKEN: underlying(assets, assetSymbols.USDC), - W_BTC_TOKEN: underlying(assets, assetSymbols.WBTC) -}; - -export default chainAddresses; diff --git a/packages/chains/src/neon/assets.ts b/packages/chains/src/neon/assets.ts deleted file mode 100644 index 5c0878605..000000000 --- a/packages/chains/src/neon/assets.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { assetSymbols, OracleTypes, SupportedAsset } from "@ionicprotocol/types"; - -const WNEON = "0x202C35e517Fa803B537565c40F0a6965D7204609"; -// const MORA = "0x2043191e10a2A4b4601F5123D6C94E000b5d915F"; -const USDC = "0xEA6B04272f9f62F997F666F07D3a974134f7FFb9"; -const USDT = "0x5f0155d08eF4aaE2B500AefB64A3419dA8bB611a"; -const WBTC = "0x54EcEC9D995A6CbFF3838F6a8F38099E518805d7"; -const WETH = "0xcFFd84d468220c11be64dc9dF64eaFE02AF60e8A"; -const SOL = "0x5f38248f339Bf4e84A2caf4e4c0552862dC9F82a"; - -export const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.WNEON, - underlying: WNEON, - name: "Wrapped NEON ", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle - }, - // { - // symbol: assetSymbols.MORA, - // underlying: MORA, - // name: "Moraswap Token", - // decimals: 18, - // oracle: OracleTypes.ChainlinkPriceOracleV2 - // }, - { - symbol: assetSymbols.USDC, - underlying: USDC, - name: "USD Coin", - decimals: 6, - oracle: OracleTypes.SimplePriceOracle - }, - { - symbol: assetSymbols.USDT, - underlying: USDT, - name: "USD Tether", - decimals: 6, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.WETH, - underlying: WETH, - name: "Wrapped Eth (Wormhole)", - decimals: 8, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.WBTC, - underlying: WBTC, - name: "Wrapped Btc (Sollet)", - decimals: 6, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.SOL, - underlying: SOL, - name: "Wrapped Solana", - decimals: 9, - oracle: OracleTypes.ChainlinkPriceOracleV2 - } -]; - -export default assets; diff --git a/packages/chains/src/neon/fundingStrategies.ts b/packages/chains/src/neon/fundingStrategies.ts deleted file mode 100644 index d96178232..000000000 --- a/packages/chains/src/neon/fundingStrategies.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, FundingStrategy, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const fundingStrategies: FundingStrategy[] = []; - -export default fundingStrategies; diff --git a/packages/chains/src/neon/index.ts b/packages/chains/src/neon/index.ts deleted file mode 100644 index 512372795..000000000 --- a/packages/chains/src/neon/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; - -import deployments from "../../deployments/neon.json"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; -import fundingStrategies from "./fundingStrategies"; -import irms from "./irms"; -import leveragePairs from "./leveragePairs"; -import liquidationDefaults from "./liquidation"; -import oracles from "./oracles"; -import specificParams from "./params"; -import deployedPlugins from "./plugins"; -import redemptionStrategies from "./redemptionStrategies"; - -const chainConfig: ChainConfig = { - chainId: SupportedChains.neon, - chainAddresses, - assets, - irms, - liquidationDefaults, - oracles, - specificParams, - deployedPlugins, - redemptionStrategies, - fundingStrategies, - chainDeployments: deployments.contracts, - leveragePairs -}; - -export default chainConfig; diff --git a/packages/chains/src/neon/irms.ts b/packages/chains/src/neon/irms.ts deleted file mode 100644 index 8e6a3ac70..000000000 --- a/packages/chains/src/neon/irms.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IrmTypes } from "@ionicprotocol/types"; - -const baseIrms = [IrmTypes.JumpRateModel]; - -const irms: IrmTypes[] = [...baseIrms]; - -export default irms; diff --git a/packages/chains/src/neon/leveragePairs.ts b/packages/chains/src/neon/leveragePairs.ts deleted file mode 100644 index aec608582..000000000 --- a/packages/chains/src/neon/leveragePairs.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LeveragePoolConfig } from "@ionicprotocol/types"; - -const leveragePairs: LeveragePoolConfig[] = []; - -export default leveragePairs; diff --git a/packages/chains/src/neon/liquidation.ts b/packages/chains/src/neon/liquidation.ts deleted file mode 100644 index dc97f8424..000000000 --- a/packages/chains/src/neon/liquidation.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { assetSymbols, LiquidationDefaults, LiquidationStrategy, underlying } from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; - -import chainAddresses from "./addresses"; -import { assets } from "./assets"; - -const liquidationDefaults: LiquidationDefaults = { - DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, - ASSET_SPECIFIC_ROUTER: {}, - SUPPORTED_OUTPUT_CURRENCIES: [constants.AddressZero, underlying(assets, assetSymbols.WNEON)], - SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, underlying(assets, assetSymbols.WNEON)], - LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), - LIQUIDATION_INTERVAL_SECONDS: 20, - jarvisPools: [], - balancerPools: [] -}; - -export default liquidationDefaults; diff --git a/packages/chains/src/neon/oracles.ts b/packages/chains/src/neon/oracles.ts deleted file mode 100644 index 50b1a18a6..000000000 --- a/packages/chains/src/neon/oracles.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { OracleTypes } from "@ionicprotocol/types"; - -const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; - -const oracles: OracleTypes[] = [...baseOracles]; - -export default oracles; diff --git a/packages/chains/src/neon/params.ts b/packages/chains/src/neon/params.ts deleted file mode 100644 index c480bd007..000000000 --- a/packages/chains/src/neon/params.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { assetSymbols, ChainParams } from "@ionicprotocol/types"; -import { BigNumber } from "ethers"; - -const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((5 * 24 * 365 * 60).toString()), - cgId: "neon", - metadata: { - chainIdHex: "0xE9AC0CE", - name: "Neon", - shortName: "Neon", - img: "https://d1912tcoux65lj.cloudfront.net/network/neon.jpg", - rpcUrls: { - default: { http: ["https://neon-proxy-mainnet.solana.p2p.org"] }, - public: { http: ["https://neon-proxy-mainnet.solana.p2p.org"] } - }, - blockExplorerUrls: { - default: { name: "NeonScan", url: "https://neonscan.org" }, - public: { name: "NeonScan", url: "https://neonscan.org" } - }, - nativeCurrency: { - symbol: "NEON", - name: "Neon" - }, - wrappedNativeCurrency: { - symbol: assetSymbols.WNEON, - address: "", - name: "Neon", - decimals: 18, - color: "#627EEA", - overlayTextColor: "#fff", - logoURL: "https://d1912tcoux65lj.cloudfront.net/network/neon.jpg" - }, - testnet: true - } -}; - -export default specificParams; diff --git a/packages/chains/src/neon/plugins.ts b/packages/chains/src/neon/plugins.ts deleted file mode 100644 index 075787ef7..000000000 --- a/packages/chains/src/neon/plugins.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DeployedPlugins } from "@ionicprotocol/types"; - -const deployedPlugins: DeployedPlugins = {}; - -export default deployedPlugins; diff --git a/packages/chains/src/neon/redemptionStrategies.ts b/packages/chains/src/neon/redemptionStrategies.ts deleted file mode 100644 index f3ea7d953..000000000 --- a/packages/chains/src/neon/redemptionStrategies.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const redemptionStrategies: RedemptionStrategy[] = []; - -export default redemptionStrategies; diff --git a/packages/chains/src/polygon/addresses.ts b/packages/chains/src/polygon/addresses.ts deleted file mode 100644 index 6d9549fed..000000000 --- a/packages/chains/src/polygon/addresses.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { assets } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: underlying(assets, assetSymbols.WMATIC), - W_TOKEN_USD_CHAINLINK_PRICE_FEED: "0xAB594600376Ec9fD91F8e885dADF0CE036862dE0", - UNISWAP_V2_ROUTER: "0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff", - UNISWAP_V2_FACTORY: "0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32", - UNISWAP_V3_ROUTER: "0xE592427A0AEce92De3Edee1F18E0157C05861564", - PAIR_INIT_HASH: ethers.utils.hexlify("0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"), - STABLE_TOKEN: underlying(assets, assetSymbols.USDC), - W_BTC_TOKEN: underlying(assets, assetSymbols.WBTC), - ALGEBRA_SWAP_ROUTER: "0xf5b509bB0909a69B1c207E495f687a596C168E12", - SOLIDLY_SWAP_ROUTER: "0x06374F57991CDc836E5A318569A910FE6456D230", - GAMMA_ALGEBRA_SWAP_ROUTER: "0xf5b509bB0909a69B1c207E495f687a596C168E12", - GAMMA_ALGEBRA_UNI_PROXY: "0xA42d55074869491D60Ac05490376B74cF19B00e6", - GAMMA_UNISWAP_V3_SWAP_ROUTER: "0x1891783cb3497Fdad1F25C933225243c2c7c4102", - GAMMA_UNISWAP_V3_UNI_PROXY: "0xDC8eE75f52FABF057ae43Bb4B85C55315b57186c" -}; - -export default chainAddresses; diff --git a/packages/chains/src/polygon/assets.ts b/packages/chains/src/polygon/assets.ts deleted file mode 100644 index 89a7d2fe9..000000000 --- a/packages/chains/src/polygon/assets.ts +++ /dev/null @@ -1,978 +0,0 @@ -import { assetOriginalSymbols, assetSymbols, OracleTypes, SupportedAsset, SupportedChains } from "@ionicprotocol/types"; - -import { - arrakisDocs, - balancerDocs, - curveFinancePolygonDocs, - defaultDocs, - jarvisDocs, - quickSwapDocs, - tangibleDocsUsdr, - wrappedAssetDocs -} from "../common"; -import { - ankrCertificateDocs, - clayStackDocs, - lidoFinanceDocs, - oneInchDocs, - pearlDocs, - retroAlmGamma, - StaderXDocs -} from "../common/docs"; - -export const WBTC = "0x1BFD67037B42Cf73acF2047067bd4F2C47D9BfD6"; -export const WMATIC = "0x0d500B1d8E8eF31E21C99d1Db9A6444d3ADf1270"; -export const USDC = "0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174"; - -const AAVE = "0xD6DF932A45C0f255f85145f286eA0b292B21C90B"; -const ALCX = "0x95c300e7740D2A88a44124B424bFC1cB2F9c3b89"; -const BAL = "0x9a71012B13CA4d3D0Cdc72A177DF3ef03b0E76A3"; -const oBNB = "0x7e9928aFe96FefB820b85B4CE6597B8F660Fe4F4"; -const BUSD = "0xdAb529f40E671A1D4bF91361c21bf9f0C9712ab7"; -const CRV = "0x172370d5Cd63279eFa6d502DAB29171933a610AF"; -const CVX = "0x4257EA7637c355F81616050CbB6a9b709fd72683"; -const DAI = "0x8f3Cf7ad23Cd3CaDbD9735AFf958023239c6A063"; -const WETH = "0x7ceB23fD6bC0adD59E62ac25578270cFf1b9f619"; -const FRAX = "0x45c32fA6DF82ead1e2EF74d17b76547EDdFaFF89"; -const FTM = "0xC9c1c1c20B3658F8787CC2FD702267791f224Ce1"; -const FXS = "0x1a3acf6D19267E2d3e7f898f42803e90C9219062"; -const GHST = "0x385Eeac5cB85A38A9a07A70c73e0a3271CfB54A7"; -const GRT = "0x5fe2B58c013d7601147DcdD68C143A77499f5531"; -const LINK = "0xb0897686c545045aFc77CF20eC7A532E3120E0F1"; -const MAI = "0xa3Fa99A148fA48D14Ed51d610c367C61876997F1"; -const MKR = "0x6f7C932e7684666C9fd1d44527765433e01fF61d"; -const RAI = "0x00e5646f60AC6Fb446f621d146B6E1886f002905"; -const SNX = "0x50B728D8D964fd00C2d0AAD81718b71311feF68a"; -const SOL = "0xd93f7E271cB87c23AaA73edC008A79646d1F9912"; -const SUSHI = "0x0b3F868E0BE5597D5DB7fEB59E1CADBb0fdDa50a"; -const YFI = "0xDA537104D6A5edd53c6fBba9A898708E465260b6"; -const USDT = "0xc2132D05D31c914a87C6611C10748AEb04B58e8F"; -const MIMO = "0xADAC33f543267c4D59a8c299cF804c303BC3e4aC"; -const IXT = "0xE06Bd4F5aAc8D0aA337D13eC88dB6defC6eAEefE"; -const GNS = "0xE5417Af564e4bFDA1c483642db72007871397896"; -const SD = "0x1d734A02eF1e1f5886e66b0673b71Af5B53ffA94"; -const USDR = "0x40379a439D4F6795B6fc9aa5687dB461677A2dBa"; -const WUSDR = "0x00e8c0E92eB3Ad88189E7125Ec8825eDc03Ab265"; -const TNGBL = "0x49e6A20f1BBdfEeC2a8222E052000BbB14EE6007"; -const DUSD = "0xEC38621e72D86775a89C7422746de1f52bbA5320"; -const CASH = "0x5D066D022EDE10eFa2717eD3D79f22F949F8C175"; - -// liquid staked assets -const MATICx = "0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6"; -const stMATIC = "0x3A58a54C066FdC0f2D55FC9C89F0415C92eBf3C4"; -const aMATICc = "0x0E9b89007eEE9c958c0EDA24eF70723C2C93dD58"; -const csMATIC = "0xFcBB00dF1d663eeE58123946A30AB2138bF9eb2A"; - -// Balancer -const MIMO_PAR_80_20 = "0x82d7f08026e21c7713CfAd1071df7C8271B17Eae"; -const BRZ_JBRL_STABLE_BLP = "0xE22483774bd8611bE2Ad2F4194078DaC9159F4bA"; -const JEUR_PAR_STABLE_BLP = "0x513CdEE00251F39DE280d9E5f771A6eaFebCc88E"; -const WMATIC_STMATIC_STABLE_BLP = "0x8159462d255C1D24915CB51ec361F700174cD994"; -const WMATIC_CSMATIC_STABLE_BLP = "0x02d2e2D7a89D6c5CB3681cfCb6F7dAC02A55eDA4"; -const WMATIC_MATICX_STABLE_BLP = "0xb20fC01D21A50d2C734C4a1262B4404d41fA7BF0"; -const MATICX_AAVE_WMATIC_STABLE_BLP = "0xE78b25c06dB117fdF8F98583CDaaa6c92B79E917"; -const stMATIC_AAVE_WMATIC_STABLE_BLP = "0x216690738Aac4aa0C4770253CA26a28f0115c595"; -const TETU_BOOSTED_STABLE_BLP = "0xb3d658d5b95BF04E2932370DD1FF976fe18dd66A"; - -// Balancer - linear pools -const TETU_LINEAR_USDT = "0x7c82A23B4C48D796dee36A9cA215b641C6a8709d"; -const TETU_LINEAR_USDC = "0xae646817e458C0bE890b81e8d880206710E3c44e"; -const TETU_LINEAR_DAI = "0xDa1CD1711743e57Dd57102E9e61b75f3587703da"; -const AAVE_LINEAR_WMATIC = "0xE4885Ed2818Cc9E840A25f94F9b2A28169D1AEA7"; - -// Aave -const amUSDC = "0x1a13F4Ca1d028320A707D99520AbFefca3998b7F"; - -// Curve -const am3CRV = "0xE7a24EF0C5e95Ffb0f6684b813A78F2a3AD7D171"; - -// QuickSwap -const WMATIC_USDC = "0x6e7a5FAFcec6BB1e78bAE2A1F0B612012BF14827"; -const WMATIC_USDT = "0x604229c960e5CACF2aaEAc8Be68Ac07BA9dF81c3"; -const WMATIC_ETH = "0xadbF1854e5883eB8aa7BAf50705338739e558E5b"; -const WMATIC_MATICx = "0xb0e69f24982791dd49e316313fD3A791020B8bF7"; -const WETH_WBTC = "0xdC9232E2Df177d7a12FdFf6EcBAb114E2231198D"; -const JEUR_PAR = "0x0f110c55EfE62c16D553A3d3464B77e1853d0e97"; -const MAI_USDC = "0x160532D2536175d65C03B97b0630A9802c274daD"; -const DAI_GNS = "0x6E53cB6942e518376E9e763554dB1A45DDCd25c4"; -const IXT_USDT = "0x304e57c752E854E9A233Ae82fcC42F7568b81180"; - -// stable forex -const AGEUR = "0xE0B52e49357Fd4DAf2c15e02058DCE6BC0057db4"; -const JEUR = "0x4e3Decbb3645551B8A19f0eA1678079FCB33fB4c"; -const EURE = "0x18ec0A6E18E5bc3784fDd3a3634b31245ab704F6"; -const EURT = "0x7BDF330f423Ea880FF95fC41A280fD5eCFD3D09f"; -const PAR = "0xE2Aa7db6dA1dAE97C5f5C6914d285fBfCC32A128"; -const BRZ = "0x4eD141110F6EeeAbA9A1df36d8c26f684d2475Dc"; -const jBRL = "0xf2f77FE7b8e66571E0fca7104c4d670BF1C8d722"; - -// arrakis vault -const arrakis_USDC_WETH_005 = "0xA173340f1E942c2845bcBCe8EBD411022E18EB13"; -const arrakis_WBTC_WETH_005 = "0x590217ef04BcB96FF6Da991AB070958b8F9E77f0"; -const arrakis_USDC_PAR_005 = "0xC1DF4E2fd282e39346422e40C403139CD633Aacd"; -const arrakis_WMATIC_USDC_005 = "0x4520c823E3a84ddFd3F99CDd01b2f8Bf5372A82a"; -const arrakis_USDC_agEUR_001 = "0x1644de0A8E54626b54AC77463900FcFFD8B94542"; -const arrakis_WMATIC_WETH_005 = "0xDC0eCA1D69ab51C2B2171C870A1506499081dA5B"; -const arrakis_WMATIC_AAVE_03 = "0x3Cc255339a27eFa6c38bEe880F4061AB9b231732"; -const arrakis_USDC_MAI_005 = "0x4Fe4d754d1B2feaAd266332CfE3d3fcaa632c953"; -const arrakis_USDC_USDT_001 = "0x2817E729178471DBAC8b1FC190b4fd8e6F3984e3"; -const arrakis_USDC_USDT_005 = "0x869A75D6F7ae09810c9083684cf22e9A618c8B05"; -const arrakis_USDC_DAI_005 = "0x2aF769150510Ad9eb37D2e63e1E483114d995cBA"; -const arrakis_WETH_DAI_03 = "0x21F65eA5bf55c48A19b195d5d8CB0f708018Ab6c"; - -// pearl (solidly) -const solidlyStableAMM_USDR_USDC = "0xD17cb0f162f133e339C0BbFc18c36c357E681D6b"; -const solidlyStableAMM_DAI_USDR = "0xBD02973b441Aa83c8EecEA158b98B5984bb1036E"; -const solidlyVolatileAMM_MATIC_USDR = "0xB4d852b92148eAA16467295975167e640E1FE57A"; -const solidlyVolatileAMM_wUSDR_USDR = "0x8711a1a52c34EDe8E61eF40496ab2618a8F6EA4B"; -const solidlyVolatileAMM_TNGBL_USDR = "0x0Edc235693C20943780b76D79DD763236E94C751"; -const solidlyVolatileAMM_WETH_USDR = "0x74c64d1976157E7Aaeeed46EF04705F4424b27eC"; -const solidlyVolatileAMM_WBTC_USDR = "0xb95E1C22dd965FafE926b2A793e9D6757b6613F4"; - -// retro (solidly gamma) -const gammaNarrowAMM_USDC_CASH = "0x64e14623CA543b540d0bA80477977f7c2c00a7Ea"; -const gammaNarrowAMM_USDC_WETH = "0xe058e1FfFF9B13d3FCd4803FDb55d1Cc2fe07DDC"; -const gammaNarrowAMM_WMATIC_MATICX = "0x2589469b7A72802CE02484f053CB6df869eB2689"; -const gammaNarrowAMM_WBTC_WETH = "0x336536F5bB478D8624dDcE0942fdeF5C92bC4662"; - -export const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.AAVE, - underlying: AAVE, - name: "AAVE Token (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", AAVE), - disabled: true - }, - { - symbol: assetSymbols.ALCX, - underlying: ALCX, - name: "Alchemix Token (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", ALCX), - disabled: true - }, - { - symbol: assetSymbols.BAL, - underlying: BAL, - name: "Balancer (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", BAL), - disabled: true - }, - { - symbol: assetSymbols.oBNB, - underlying: oBNB, - name: "Orbit Bridge BNB", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", oBNB), - disabled: true - }, - { - symbol: assetSymbols.BUSD, - underlying: BUSD, - name: "Binance USD (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", BUSD), - disabled: true - }, - { - symbol: assetSymbols.CRV, - underlying: CRV, - name: "CRV (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", CRV), - disabled: true - }, - { - symbol: assetSymbols.CVX, - underlying: CVX, - name: "CVX (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", CVX), - disabled: true - }, - - { - symbol: assetSymbols.DAI, - underlying: DAI, - name: "Dai Stablecoin (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/DAI") - }, - { - symbol: assetSymbols.WETH, - underlying: WETH, - name: "Wrapped Ether", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", WETH) - }, - { - symbol: assetSymbols.FRAX, - underlying: FRAX, - name: "Frax", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/FRAX") - }, - { - symbol: assetSymbols.FTM, - underlying: FTM, - name: "Fantom", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", FTM), - disabled: true - }, - { - symbol: assetSymbols.FXS, - underlying: FXS, - name: "Frax Share", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", FXS), - disabled: true - }, - { - symbol: assetSymbols.GHST, - underlying: GHST, - name: "Aavegotchi GHST Token (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", GHST), - disabled: true - }, - { - symbol: assetSymbols.GRT, - underlying: GRT, - name: "Graph Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", GRT), - disabled: true - }, - { - symbol: assetSymbols.GNS, - underlying: GNS, - name: "Gains Network Token", - decimals: 18, - oracle: OracleTypes.UniswapV3PriceOracle, - extraDocs: defaultDocs("https://polygonscan.com", GNS) - }, - { - symbol: assetSymbols.IXT, - underlying: IXT, - name: "PlanetIX", - decimals: 18, - oracle: OracleTypes.AlgebraPriceOracle, - extraDocs: defaultDocs("https://polygonscan.com", IXT) - }, - { - symbol: assetSymbols.LINK, - underlying: LINK, - name: "ChainLink Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", LINK), - disabled: true - }, - { - symbol: assetSymbols.MAI, - underlying: MAI, - name: "miMATIC", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", MAI) - }, - { - symbol: assetSymbols.MKR, - underlying: MKR, - name: "Maker DAO", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", MKR), - disabled: true - }, - { - symbol: assetSymbols.RAI, - underlying: RAI, - name: "Rai Reflex Index (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", RAI), - disabled: true - }, - { - symbol: assetSymbols.SNX, - underlying: SNX, - name: "Synthetix Network Token (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", SNX), - disabled: true - }, - { - symbol: assetSymbols.SD, - underlying: SD, - name: "Stader Labs (PoS)", - decimals: 18, - oracle: OracleTypes.AlgebraPriceOracle, - extraDocs: defaultDocs("https://polygonscan.com", SD), - disabled: true - }, - { - symbol: assetSymbols.SOL, - underlying: SOL, - name: "Wrapped SOL (Wormhole)", - decimals: 9, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", SOL), - disabled: true - }, - { - symbol: assetSymbols.SUSHI, - underlying: SUSHI, - name: "SushiToken (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/SUSHI"), - disabled: true - }, - { - symbol: assetSymbols.YFI, - underlying: YFI, - name: "yearn.finance (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: defaultDocs("https://polygonscan.com", YFI), - disabled: true - }, - { - symbol: assetSymbols.USDC, - underlying: USDC, - name: "USD Coin (PoS)", - decimals: 6, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/USDC") - }, - { - symbol: assetSymbols.USDT, - underlying: USDT, - name: "Tether USD (PoS)", - decimals: 6, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/USDT") - }, - { - symbol: assetSymbols.DUSD, - underlying: DUSD, - name: "Davos", - decimals: 18, - oracle: OracleTypes.AlgebraPriceOracle, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/simple/swap/USDC/DAVOS") - }, - { - symbol: assetSymbols.CASH, - underlying: CASH, - name: "CASH", - decimals: 18, - oracle: OracleTypes.UniswapV3PriceOracle, - extraDocs: ` -

How to acquire this token


-

You can acquire this asset on stabl.fi.

` - }, - { - symbol: assetSymbols.WBTC, - underlying: WBTC, - name: "Wrapped BTC (PoS)", - decimals: 8, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/WBTC") - }, - { - symbol: assetSymbols.WMATIC, - underlying: WMATIC, - name: "Wrapped Matic", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle, - extraDocs: wrappedAssetDocs(SupportedChains.polygon) - }, - { - symbol: assetSymbols.MIMO, - underlying: MIMO, - name: "MIMO Parallel Governance Token (PoS) ", - decimals: 18, - oracle: OracleTypes.DiaPriceOracle, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/MIMO") - }, - { - symbol: assetSymbols.MATICx, - underlying: MATICx, - name: "Liquid Staking Matic (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: StaderXDocs("polygon", "MATICx") - }, - - { - symbol: assetSymbols.stMATIC, - underlying: stMATIC, - name: "Staked MATIC (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: lidoFinanceDocs("polygon", "MATIC", "stMATIC") - }, - { - symbol: assetSymbols.aMATICc, - underlying: aMATICc, - name: "Ankr MATIC Reward Bearing Certificate", - decimals: 18, - oracle: OracleTypes.AnkrCertificateTokenPriceOracle, - extraDocs: ankrCertificateDocs("aMATICc", "MATIC") - }, - { - symbol: assetSymbols.csMATIC, - underlying: csMATIC, - name: "ClayStack Staked MATIC", - decimals: 18, - oracle: OracleTypes.BalancerRateProviderOracle, - extraDocs: clayStackDocs("MATIC", "polygon") - }, - - // QuickSwap LPs - { - symbol: assetSymbols["WMATIC-USDC"], - underlying: WMATIC_USDC, - name: "WMATIC-USDC LP Token", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: quickSwapDocs(WMATIC, USDC, "WMATIC-USDC", WMATIC_USDC), - disabled: true - }, - { - symbol: assetSymbols["WMATIC-USDT"], - underlying: WMATIC_USDT, - name: "WMATIC-USDT LP Token", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: quickSwapDocs(WMATIC, USDT, "WMATIC-USDT", WMATIC_USDT), - disabled: true - }, - { - symbol: assetSymbols["WMATIC-ETH"], - underlying: WMATIC_ETH, - name: "WMATIC-ETH LP Token", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: quickSwapDocs(WMATIC, WETH, "WMATIC-ETH", WMATIC_ETH), - disabled: true - }, - { - symbol: assetSymbols["WMATIC-MATICx"], - underlying: WMATIC_MATICx, - name: "WMATIC-MATICx LP Token", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: quickSwapDocs(WMATIC, MATICx, "WMATIC-MATICx", WMATIC_MATICx) - }, - { - symbol: assetSymbols["WETH-WBTC"], - underlying: WETH_WBTC, - name: "WETH-WBTC LP Token", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: quickSwapDocs(WETH, WBTC, "WETH-WBTC", WETH_WBTC), - disabled: true - }, - { - symbol: assetSymbols["MAI-USDC"], - underlying: MAI_USDC, - name: "MAI-USDC LP Token", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: quickSwapDocs(MAI, USDC, "MAI-USDC", MAI_USDC) - }, - { - symbol: assetSymbols["DAI-GNS"], - underlying: DAI_GNS, - name: "DAI-GNS LP Token", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: quickSwapDocs(DAI, GNS, "DAI-GNS", DAI_GNS) - }, - { - symbol: assetSymbols["IXT-USDT"], - underlying: IXT_USDT, - name: "IXT-USDT LP Token", - decimals: 18, - oracle: OracleTypes.UniswapLpTokenPriceOracle, - extraDocs: quickSwapDocs(IXT, USDT, "IXT-USDT", IXT_USDT) - }, - // curve.fi LP tokens - { - symbol: assetSymbols["JEUR-PAR"], - underlying: JEUR_PAR, - name: "Jarvis jEUR-PAR LP Token", - decimals: 18, - oracle: OracleTypes.CurveLpTokenPriceOracleNoRegistry, - extraDocs: curveFinancePolygonDocs(285, "JEUR-PAR", JEUR_PAR, true) - }, - { - symbol: assetSymbols.amUSDC, - underlying: amUSDC, - name: "AAVE Usdc Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: `https://app.aave.com/reserve-overview/?underlyingAsset=${USDC}&marketName=proto_polygon_v3`, - disabled: true - }, - { - symbol: assetSymbols.am3CRV, - underlying: am3CRV, - name: "Curve.fi amDAI/amUSDC/amUSDT", - decimals: 18, - oracle: OracleTypes.CurveLpTokenPriceOracleNoRegistry, - extraDocs: curveFinancePolygonDocs("aave", "am3CRV", am3CRV, false) - }, - // Balancer - { - symbol: assetSymbols.MIMO_PAR_80_20, - underlying: MIMO_PAR_80_20, - name: "80MIMO-20PAR", - decimals: 18, - oracle: OracleTypes.BalancerLpTokenPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0x82d7f08026e21c7713cfad1071df7c8271b17eae0002000000000000000004b6", - "80MIMO-20PAR", - MIMO_PAR_80_20 - ) - }, - { - symbol: assetSymbols.WMATIC_MATICX_STABLE_BLP, - underlying: WMATIC_MATICX_STABLE_BLP, - name: "WMATIC-MATICX Stable BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0xb20fc01d21a50d2c734c4a1262b4404d41fa7bf000000000000000000000075c", - "WMATIC-MATICx BLP", - WMATIC_MATICX_STABLE_BLP - ), - originalSymbol: assetOriginalSymbols.WMATIC_MATICX_STABLE_BLP - }, - { - symbol: assetSymbols.WMATIC_CSMATIC_STABLE_BLP, - underlying: WMATIC_CSMATIC_STABLE_BLP, - name: "WMATIC-csMATIC Stable BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0x02d2e2d7a89d6c5cb3681cfcb6f7dac02a55eda400000000000000000000088f", - "WMATIC-csMATIC BLP", - WMATIC_CSMATIC_STABLE_BLP - ) - }, - { - symbol: assetSymbols.WMATIC_STMATIC_STABLE_BLP, - underlying: WMATIC_STMATIC_STABLE_BLP, - name: "WMATIC-stMATIC Stable BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0x8159462d255c1d24915cb51ec361f700174cd99400000000000000000000075d", - "WMATIC-stMATIC Stable BLP", - WMATIC_STMATIC_STABLE_BLP - ) - }, - { - symbol: assetSymbols.BRZ_JBRL_STABLE_BLP, - underlying: BRZ_JBRL_STABLE_BLP, - name: "BRZ-jBRL Stable BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0xe22483774bd8611be2ad2f4194078dac9159f4ba0000000000000000000008f0", - "BRZ-jBRL Stable BLP", - BRZ_JBRL_STABLE_BLP - ) - }, - { - symbol: assetSymbols.TETU_BOOSTED_STABLE_BLP, - underlying: TETU_BOOSTED_STABLE_BLP, - name: "DAI-USDT-USDC Boosted Stable BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0xb3d658d5b95bf04e2932370dd1ff976fe18dd66a000000000000000000000ace", - "Tetu Boosted Stable BLP", - TETU_BOOSTED_STABLE_BLP - ), - disabled: true - }, - { - symbol: assetSymbols.JEUR_PAR_STABLE_BLP, - underlying: JEUR_PAR_STABLE_BLP, - name: "jEUR-PAR Stable BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0x513cdee00251f39de280d9e5f771a6eafebcc88e000000000000000000000a6b", - "jEUR-PAR Stable BLP", - JEUR_PAR_STABLE_BLP - ) - }, - { - symbol: assetSymbols.MaticX_bbaWMATIC, - underlying: MATICX_AAVE_WMATIC_STABLE_BLP, - name: "MaticX-bbaWMATIC Stable BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0xe78b25c06db117fdf8f98583cdaaa6c92b79e917000000000000000000000b2b", - "MaticX-bbaWMATIC Stable BLP", - MATICX_AAVE_WMATIC_STABLE_BLP - ) - }, - { - symbol: assetSymbols.StMatic_bbaWMATIC, - underlying: stMATIC_AAVE_WMATIC_STABLE_BLP, - name: "MaticX-bbaWMATIC Stable BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpStablePoolPriceOracle, - extraDocs: balancerDocs( - "polygon", - "0x216690738aac4aa0c4770253ca26a28f0115c595000000000000000000000b2c", - "StMatic-bbaWMATIC Stable BLP", - stMATIC_AAVE_WMATIC_STABLE_BLP - ) - }, - { - symbol: assetSymbols.TETU_LINEAR_USDT, - underlying: TETU_LINEAR_USDT, - name: "bb-t-USDT Linear BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpLinearPoolPriceOracle, - extraDocs: "https://app.tetu.io/vault/0xf2fB1979C4bed7E71E6ac829801E0A8a4eFa8513", - disabled: true - }, - { - symbol: assetSymbols.TETU_LINEAR_USDC, - underlying: TETU_LINEAR_USDC, - name: "bb-t-USDC Linear BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpLinearPoolPriceOracle, - extraDocs: "https://app.tetu.io/vault/0xf2fB1979C4bed7E71E6ac829801E0A8a4eFa8513", - disabled: true - }, - { - symbol: assetSymbols.TETU_LINEAR_DAI, - underlying: TETU_LINEAR_DAI, - name: "bb-t-DAI Linear BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpLinearPoolPriceOracle, - extraDocs: "https://app.tetu.io/vault/0xf2fB1979C4bed7E71E6ac829801E0A8a4eFa8513", - disabled: true - }, - { - symbol: assetSymbols.AAVE_LINEAR_WMATIC, - underlying: AAVE_LINEAR_WMATIC, - name: "bb-a-WMATIC Linear BLP", - decimals: 18, - oracle: OracleTypes.BalancerLpLinearPoolPriceOracle, - extraDocs: - "https://app.balancer.fi/#/polygon/pool/0xe78b25c06db117fdf8f98583cdaaa6c92b79e917000000000000000000000b2b", - disabled: true - }, - - // stable forex - { - symbol: assetSymbols.AGEUR, - underlying: AGEUR, - name: "agEUR Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/agEUR") - }, - { - symbol: assetSymbols.JEUR, - underlying: JEUR, - name: "Jarvis JEUR Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: jarvisDocs("v2") - }, - { - symbol: assetSymbols.PAR, - underlying: PAR, - name: "PAR Stablecoin (PoS)", - decimals: 18, - oracle: OracleTypes.DiaPriceOracle, - extraDocs: oneInchDocs("https://app.1inch.io/#/137/unified/swap/MATIC/PAR") - }, - { - symbol: assetSymbols.EURT, - underlying: EURT, - name: "Euro Tether (PoS)", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.EURE, - underlying: EURE, - name: "Monerium EUR emoney", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2 - }, - { - symbol: assetSymbols.BRZ, - underlying: BRZ, - name: "BRZ Token", - decimals: 4, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: `

How to acquire this token


-

You can acquire BRZ tokens at https://www.brztoken.io or other centralised exchanges

` - }, - { - symbol: assetSymbols.jBRL, - underlying: jBRL, - name: "Jarvis JBRL Token", - decimals: 18, - oracle: OracleTypes.ChainlinkPriceOracleV2, - extraDocs: jarvisDocs("v2") - }, - { - symbol: assetSymbols.USDR, - underlying: USDR, - name: "Real USD ", - decimals: 9, - oracle: OracleTypes.DiaPriceOracle, - extraDocs: tangibleDocsUsdr("Mint") - }, - { - symbol: assetSymbols.WUSDR, - underlying: WUSDR, - name: "Wrappd Real USD ", - decimals: 9, - oracle: OracleTypes.DiaPriceOracle, - extraDocs: tangibleDocsUsdr("Wrap") - }, - { - symbol: assetSymbols.TNGBL, - underlying: TNGBL, - name: "Tangible ", - decimals: 18, - oracle: OracleTypes.UniswapV3PriceOracle, - extraDocs: defaultDocs("https://polygonscan.com", TNGBL) - }, - // Arrakis Vaults - { - symbol: assetSymbols["arrakis_USDC_WETH_005"], - underlying: arrakis_USDC_WETH_005, - name: "Arrakis Vault V1 USDC/WETH 0.05", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_USDC_WETH_005) - }, - { - symbol: assetSymbols["arrakis_WBTC_WETH_005"], - underlying: arrakis_WBTC_WETH_005, - name: "Arrakis Vault V1 WBTC/WETH 0.05", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_WBTC_WETH_005) - }, - { - symbol: assetSymbols["arrakis_USDC_PAR_005"], - underlying: arrakis_USDC_PAR_005, - name: "Arrakis Vault V1 USDC/PAR 0.05", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_USDC_PAR_005) - }, - { - symbol: assetSymbols["arrakis_WMATIC_USDC_005"], - underlying: arrakis_WMATIC_USDC_005, - name: "Arrakis Vault V1 WMATIC/USDC 0.05", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_WMATIC_USDC_005) - }, - { - symbol: assetSymbols["arrakis_USDC_agEUR_001"], - underlying: arrakis_USDC_agEUR_001, - name: "Arrakis Vault V1 USDC/agEUR 0.01", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_USDC_agEUR_001) - }, - { - symbol: assetSymbols["arrakis_WMATIC_WETH_005"], - underlying: arrakis_WMATIC_WETH_005, - name: "Arrakis Vault V1 WMATIC/WETH 0.05", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_WMATIC_WETH_005) - }, - { - symbol: assetSymbols["arrakis_WMATIC_AAVE_03"], - underlying: arrakis_WMATIC_AAVE_03, - name: "Arrakis Vault V1 WMATIC/AAVE 0.3", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_WMATIC_AAVE_03) - }, - { - symbol: assetSymbols["arrakis_USDC_MAI_005"], - underlying: arrakis_USDC_MAI_005, - name: "Arrakis Vault V1 USDC/MAI 0.05", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_USDC_MAI_005) - }, - { - symbol: assetSymbols["arrakis_USDC_USDT_001"], - underlying: arrakis_USDC_USDT_001, - name: "Arrakis Vault V1 USDC/USDT 0.01", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_USDC_USDT_001) - }, - { - symbol: assetSymbols["arrakis_USDC_USDT_005"], - underlying: arrakis_USDC_USDT_005, - name: "Arrakis Vault V1 USDC/USDT 0.05", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_USDC_USDT_005) - }, - { - symbol: assetSymbols["arrakis_USDC_DAI_005"], - underlying: arrakis_USDC_DAI_005, - name: "Arrakis Vault V1 USDC/DAI 0.05", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_USDC_DAI_005) - }, - { - symbol: assetSymbols["arrakis_WETH_DAI_03"], - underlying: arrakis_WETH_DAI_03, - name: "Arrakis Vault V1 WETH/DAI 0.3", - decimals: 18, - oracle: OracleTypes.GelatoGUniPriceOracle, - extraDocs: arrakisDocs("Polygon", 137, arrakis_WETH_DAI_03) - }, - { - symbol: assetSymbols["sAMM-USDC/USDR"], - underlying: solidlyStableAMM_USDR_USDC, - name: "Stable AMM - USDC/USDR", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: pearlDocs(solidlyStableAMM_USDR_USDC), - originalSymbol: assetOriginalSymbols["sAMM-USDC/USDR"] - }, - { - symbol: assetSymbols["vAMM-wUSDR/USDR"], - underlying: solidlyVolatileAMM_wUSDR_USDR, - name: "Volatile AMM - wUSDR/USDR", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: pearlDocs(solidlyVolatileAMM_wUSDR_USDR), - originalSymbol: assetOriginalSymbols["vAMM-wUSDR/USDR"] - }, - { - symbol: assetSymbols["vAMM-MATIC/USDR"], - underlying: solidlyVolatileAMM_MATIC_USDR, - name: "Stable V1 AMM - MATIC/USDR", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: pearlDocs(solidlyVolatileAMM_MATIC_USDR), - originalSymbol: assetOriginalSymbols["vAMM-MATIC/USDR"] - }, - { - symbol: assetSymbols["vAMM-TNGBL/USDR"], - underlying: solidlyVolatileAMM_TNGBL_USDR, - name: "Stable V1 AMM - TNGBL/USDR", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: pearlDocs(solidlyVolatileAMM_TNGBL_USDR), - originalSymbol: assetOriginalSymbols["vAMM-TNGBL/USDR"] - }, - { - symbol: assetSymbols["sAMM-DAI/USDR"], - underlying: solidlyStableAMM_DAI_USDR, - name: "Stable V1 AMM - DAI/USDR", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: pearlDocs(solidlyStableAMM_DAI_USDR), - originalSymbol: assetOriginalSymbols["sAMM-DAI/USDR"] - }, - { - symbol: assetSymbols["vAMM-WBTC/USDR"], - underlying: solidlyVolatileAMM_WBTC_USDR, - name: "Volatile V1 AMM - WBTC/USDR", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: pearlDocs(solidlyVolatileAMM_WBTC_USDR), - originalSymbol: assetOriginalSymbols["vAMM-WBTC/USDR"] - }, - { - symbol: assetSymbols["vAMM-WETH/USDR"], - underlying: solidlyVolatileAMM_WETH_USDR, - name: "Volatile V1 AMM - WETH/USDR", - decimals: 18, - oracle: OracleTypes.SolidlyLpTokenPriceOracle, - extraDocs: pearlDocs(solidlyVolatileAMM_WETH_USDR), - originalSymbol: assetOriginalSymbols["vAMM-WETH/USDR"] - }, - { - symbol: assetSymbols.aUSDC_CASH_N, - underlying: gammaNarrowAMM_USDC_CASH, - name: "Fusion V2 AMM - Narrow USDC/CASH 0.01%", - decimals: 18, - oracle: OracleTypes.GammaPoolUniswapV3PriceOracle, - extraDocs: retroAlmGamma(USDC, CASH, gammaNarrowAMM_USDC_CASH, "GAMMA_NARROW") - }, - { - symbol: assetSymbols.aUSDC_WETH_N, - underlying: gammaNarrowAMM_USDC_WETH, - name: "Fusion V2 AMM - Narrow USDC/WETH 0.05%", - decimals: 18, - oracle: OracleTypes.GammaPoolUniswapV3PriceOracle, - extraDocs: retroAlmGamma(USDC, WETH, gammaNarrowAMM_USDC_WETH, "GAMMA_NARROW") - }, - { - symbol: assetSymbols.aWMATIC_MATICX_N, - underlying: gammaNarrowAMM_WMATIC_MATICX, - name: "Fusion V2 AMM - Narrow WMATIC/MATICx 0.01%", - decimals: 18, - oracle: OracleTypes.GammaPoolUniswapV3PriceOracle, - extraDocs: retroAlmGamma(WMATIC, MATICx, gammaNarrowAMM_WMATIC_MATICX, "GAMMA_NARROW") - }, - { - symbol: assetSymbols.aWBTC_WETH_N, - underlying: gammaNarrowAMM_WBTC_WETH, - name: "Fusion V2 AMM - Narrow WBTC/WETH 0.05%", - decimals: 18, - oracle: OracleTypes.GammaPoolUniswapV3PriceOracle, - extraDocs: retroAlmGamma(WBTC, WETH, gammaNarrowAMM_WBTC_WETH, "GAMMA_NARROW") - } -]; - -export default assets; diff --git a/packages/chains/src/polygon/fundingStrategies.ts b/packages/chains/src/polygon/fundingStrategies.ts deleted file mode 100644 index 98c88ddb1..000000000 --- a/packages/chains/src/polygon/fundingStrategies.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { assetSymbols, FundingStrategy, FundingStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const fundingStrategies: FundingStrategy[] = [ - // TODO: group by input token or configure as predefined paths - { - outputToken: underlying(assets, assetSymbols.JEUR), - strategy: FundingStrategyContract.JarvisLiquidatorFunder, - inputToken: underlying(assets, assetSymbols.USDC) - }, - { - outputToken: underlying(assets, assetSymbols.PAR), - strategy: FundingStrategyContract.UniswapV3LiquidatorFunder, // or CurveSwapLiquidatorFunder - inputToken: underlying(assets, assetSymbols.USDC) - } -]; - -export default fundingStrategies; diff --git a/packages/chains/src/polygon/index.ts b/packages/chains/src/polygon/index.ts deleted file mode 100644 index 849ae4f1a..000000000 --- a/packages/chains/src/polygon/index.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { ChainConfig, SupportedChains } from "@ionicprotocol/types"; - -import deployments from "../../deployments/polygon.json"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; -import fundingStrategies from "./fundingStrategies"; -import irms from "./irms"; -import leveragePairs from "./leveragePairs"; -import liquidationDefaults from "./liquidation"; -import oracles from "./oracles"; -import specificParams from "./params"; -import deployedPlugins from "./plugins"; -import redemptionStrategies from "./redemptionStrategies"; - -const chainConfig: ChainConfig = { - chainId: SupportedChains.polygon, - chainAddresses, - assets, - irms, - liquidationDefaults, - oracles, - specificParams, - deployedPlugins, - redemptionStrategies, - fundingStrategies, - chainDeployments: deployments.contracts, - leveragePairs -}; - -export default chainConfig; diff --git a/packages/chains/src/polygon/irms.ts b/packages/chains/src/polygon/irms.ts deleted file mode 100644 index 5e6595a09..000000000 --- a/packages/chains/src/polygon/irms.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IrmTypes } from "@ionicprotocol/types"; - -const baseIrms = [IrmTypes.JumpRateModel]; - -const irms: IrmTypes[] = [...baseIrms, IrmTypes.AdjustableJumpRateModel_JARVIS_jEUR]; - -export default irms; diff --git a/packages/chains/src/polygon/leveragePairs.ts b/packages/chains/src/polygon/leveragePairs.ts deleted file mode 100644 index 925bb72b6..000000000 --- a/packages/chains/src/polygon/leveragePairs.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { LeveragePoolConfig } from "@ionicprotocol/types"; - -// markets addresses -const STARSEED_USDC = "0x71A7037a42D0fB9F905a76B7D16846b2EACC59Aa"; -const STARSEED_USDR = "0x1F11940B239D129dE0e5D30A3E59089af5Ecd6ed"; -const STARSEED_WUSDR = "0x26EA46e975778662f98dAa0E7a12858dA9139262"; -const STARSEED_USDR_DAI = "0xBcE30B4D78cEb9a75A1Aa62156529c3592b3F08b"; -const STARSEED_USDC_USDR = "0x83DF24fE1B1eBF38048B91ffc4a8De0bAa88b891"; -const STARSEED_WMATIC_USDR = "0xfacEdA4f9731797102f040380aD5e234c92d1942"; -const STARSEED_USDR_TNGBL = "0x2E870Aeee3D9d1eA29Ec93d2c0A99A4e0D5EB697"; -const STARSEED_WBTC_USDR = "0xffc8c8d747E52fAfbf973c64Bab10d38A6902c46"; -const STARSEED_USDR_WETH = "0x343D9a8D2Bc6A62390aEc764bb5b900C4B039127"; -const STARSEED_wUSDR_USDR = "0x06F61E22ef144f1cC4550D40ffbF681CB1C3aCAF"; - -const RETRO_CASH = "0xf69207CFDe6228A1e15A34F2b0c4fDe0845D9eBa"; -const RETRO_WETH = "0x2469B23354cb7cA50b798663Ec5812Bf28d15e9e"; -const RETRO_USDC = "0x38EbA94210bCEf3F9231E1764EE230abC14D1cbc"; -const RETRO_USDC_CASH = "0x1D2A7078a404ab970f951d5A6dbECD9e24838FB6"; -const RETRO_USDC_WETH = "0xC7cA03A0bE1dBAc350E5BfE5050fC5af6406490E"; -const RETRO_WBTC_WETH = "0xCB1a06eff3459078c26516ae3a1dB44A61D2DbCA"; - -const DAVOS_USDC = "0x14787e50578d8c606C3d57bDbA53dD65Fd665449"; -const DAVOS_DUSD = "0xE70d09dA78900A0429ee70b35200F70A30d7d2B9"; - -const STADER_WMATIC = "0xCb8D7c2690536d3444Da3d207f62A939483c8A93"; -const STADER_MATICX = "0x6ebdbEe1a509247B4A3ac3b73a43bd434C52C7c2"; - -const leveragePairs: LeveragePoolConfig[] = [ - // StarSeed - { - pool: "0xbc2889CC2bC2c31943f0A35465527F2c3C3f5984", - pairs: [ - // USDC borrow - { borrow: STARSEED_USDC, collateral: STARSEED_USDC_USDR }, - // USDR borrow - { borrow: STARSEED_USDR, collateral: STARSEED_USDR_DAI }, - { borrow: STARSEED_USDR, collateral: STARSEED_USDC_USDR }, - { borrow: STARSEED_USDR, collateral: STARSEED_WMATIC_USDR }, - { borrow: STARSEED_USDR, collateral: STARSEED_USDR_TNGBL }, - { borrow: STARSEED_USDR, collateral: STARSEED_WBTC_USDR }, - { borrow: STARSEED_USDR, collateral: STARSEED_USDR_WETH }, - { borrow: STARSEED_USDR, collateral: STARSEED_wUSDR_USDR }, - { borrow: STARSEED_USDR, collateral: STARSEED_WUSDR }, - { borrow: STARSEED_WUSDR, collateral: STARSEED_USDR }, - // wUSDR borrow - { borrow: STARSEED_WUSDR, collateral: STARSEED_wUSDR_USDR } - ] - }, - - // Retro pool - { - pool: "0x22A705DEC988410A959B8b17C8c23E33c121580b", - pairs: [ - // USDC - { borrow: RETRO_USDC, collateral: RETRO_USDC_CASH }, - // CASH - { borrow: RETRO_CASH, collateral: RETRO_USDC }, - { borrow: RETRO_CASH, collateral: RETRO_USDC_CASH }, - { borrow: RETRO_CASH, collateral: RETRO_USDC_WETH }, - // WETH - { borrow: RETRO_WETH, collateral: RETRO_WBTC_WETH } - ] - }, - // Davos - { pool: "0x4B1FA03aBBF49044A08C42D1Df4ff59F7522a4D5", pairs: [{ borrow: DAVOS_USDC, collateral: DAVOS_DUSD }] }, - // Stader MaticX - { pool: "0x5365b2e4d167fb3Be700110b009B96b00d8a4bb9", pairs: [{ borrow: STADER_WMATIC, collateral: STADER_MATICX }] } -]; - -export default leveragePairs; diff --git a/packages/chains/src/polygon/liquidation.ts b/packages/chains/src/polygon/liquidation.ts deleted file mode 100644 index 27efa01fb..000000000 --- a/packages/chains/src/polygon/liquidation.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { assetSymbols, LiquidationDefaults, LiquidationStrategy, underlying } from "@ionicprotocol/types"; -import { BigNumber, constants } from "ethers"; - -import chainAddresses from "./addresses"; -import { assets } from "./assets"; - -const liquidationDefaults: LiquidationDefaults = { - DEFAULT_ROUTER: chainAddresses.UNISWAP_V2_ROUTER, - ASSET_SPECIFIC_ROUTER: {}, - SUPPORTED_OUTPUT_CURRENCIES: [ - constants.AddressZero, - underlying(assets, assetSymbols.WMATIC), - underlying(assets, assetSymbols.USDC), - underlying(assets, assetSymbols.USDT) - ], - SUPPORTED_INPUT_CURRENCIES: [constants.AddressZero, underlying(assets, assetSymbols.WMATIC)], - LIQUIDATION_STRATEGY: LiquidationStrategy.UNISWAP, - MINIMUM_PROFIT_NATIVE: BigNumber.from(0), - LIQUIDATION_INTERVAL_SECONDS: 60, - jarvisPools: [ - // jEUR <-> USDC - { - expirationTime: 40 * 60, - liquidityPoolAddress: "0x65a7b4Ff684C2d08c115D55a4B089bf4E92F5003", - syntheticToken: underlying(assets, assetSymbols.JEUR), - collateralToken: underlying(assets, assetSymbols.USDC) - } - ], - balancerPools: [ - { - poolAddress: underlying(assets, assetSymbols.MIMO_PAR_80_20), - underlyingTokens: [underlying(assets, assetSymbols.MIMO), underlying(assets, assetSymbols.PAR)] - }, - { - poolAddress: underlying(assets, assetSymbols.BRZ_JBRL_STABLE_BLP), - underlyingTokens: [underlying(assets, assetSymbols.jBRL), underlying(assets, assetSymbols.BRZ)] - }, - { - poolAddress: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP), - underlyingTokens: [underlying(assets, assetSymbols.JEUR), underlying(assets, assetSymbols.PAR)] - }, - { - poolAddress: underlying(assets, assetSymbols.WMATIC_CSMATIC_STABLE_BLP), - underlyingTokens: [underlying(assets, assetSymbols.WMATIC), underlying(assets, assetSymbols.csMATIC)] - }, - { - poolAddress: underlying(assets, assetSymbols.WMATIC_MATICX_STABLE_BLP), - underlyingTokens: [underlying(assets, assetSymbols.WMATIC), underlying(assets, assetSymbols.MATICx)] - }, - { - poolAddress: underlying(assets, assetSymbols.TETU_BOOSTED_STABLE_BLP), - underlyingTokens: [ - underlying(assets, assetSymbols.TETU_LINEAR_DAI), - underlying(assets, assetSymbols.TETU_LINEAR_USDC), - underlying(assets, assetSymbols.TETU_LINEAR_USDT) - ] - }, - { - poolAddress: underlying(assets, assetSymbols.TETU_LINEAR_USDC), - underlyingTokens: [underlying(assets, assetSymbols.USDC)] - }, - { - poolAddress: underlying(assets, assetSymbols.MaticX_bbaWMATIC), - underlyingTokens: [underlying(assets, assetSymbols.MATICx), underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC)] - }, - { - poolAddress: underlying(assets, assetSymbols.StMatic_bbaWMATIC), - underlyingTokens: [underlying(assets, assetSymbols.stMATIC), underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC)] - }, - { - poolAddress: underlying(assets, assetSymbols.StMatic_bbaWMATIC), - underlyingTokens: [underlying(assets, assetSymbols.stMATIC), underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC)] - }, - { - poolAddress: underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC), - underlyingTokens: [underlying(assets, assetSymbols.WMATIC), underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC)] - } - ] -}; - -export default liquidationDefaults; diff --git a/packages/chains/src/polygon/oracles.ts b/packages/chains/src/polygon/oracles.ts deleted file mode 100644 index f0ccfd252..000000000 --- a/packages/chains/src/polygon/oracles.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { OracleTypes } from "@ionicprotocol/types"; - -const baseOracles = [OracleTypes.FixedNativePriceOracle, OracleTypes.MasterPriceOracle, OracleTypes.SimplePriceOracle]; - -const oracles: OracleTypes[] = [ - ...baseOracles, - OracleTypes.ChainlinkPriceOracleV2, - OracleTypes.DiaPriceOracle, - OracleTypes.CurveLpTokenPriceOracleNoRegistry, - OracleTypes.UniswapLpTokenPriceOracle, - OracleTypes.GelatoGUniPriceOracle, - OracleTypes.BalancerLpTokenPriceOracle, - OracleTypes.BalancerLpStablePoolPriceOracle, - OracleTypes.BalancerRateProviderOracle, - OracleTypes.AlgebraPriceOracle, - OracleTypes.GammaPoolUniswapV3PriceOracle, - OracleTypes.UniswapV3PriceOracle -]; - -export default oracles; diff --git a/packages/chains/src/polygon/params.ts b/packages/chains/src/polygon/params.ts deleted file mode 100644 index 4ab2df24f..000000000 --- a/packages/chains/src/polygon/params.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { assetSymbols, ChainParams, underlying } from "@ionicprotocol/types"; -import { BigNumber } from "ethers"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; - -const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((26 * 24 * 365 * 60).toString()), - cgId: "matic-network", - metadata: { - chainIdHex: "0x89", - name: "Polygon Mainnet", - shortName: "Polygon", - uniswapV3Fees: { - [underlying(assets, assetSymbols.USDC)]: { - [underlying(assets, assetSymbols.PAR)]: 500, - [underlying(assets, assetSymbols.CASH)]: 100, // 0.01% - [underlying(assets, assetSymbols.WETH)]: 500 // 0.05% - }, - [underlying(assets, assetSymbols.WMATIC)]: { - [underlying(assets, assetSymbols.MATICx)]: 100 // 0.01% - }, - [underlying(assets, assetSymbols.WBTC)]: { - [underlying(assets, assetSymbols.WETH)]: 500 // 0.05% - } - }, - uniswapV3Routers: { - [underlying(assets, assetSymbols.CASH)]: { - [underlying(assets, assetSymbols.USDC)]: chainAddresses.GAMMA_UNISWAP_V3_SWAP_ROUTER! - } - }, - img: "https://d1912tcoux65lj.cloudfront.net/network/polygon.jpg", - blockExplorerUrls: { default: { name: "polygonscan", url: "https://polygonscan.com" } }, - rpcUrls: { - default: { http: ["https://polygon.llamarpc.com"] }, - public: { http: ["https://polygon.llamarpc.com"] } - }, - nativeCurrency: { - symbol: "MATIC", - name: "MATIC" - }, - wrappedNativeCurrency: { - symbol: assetSymbols.WMATIC, - address: chainAddresses.W_TOKEN, - name: "WMATIC", - decimals: 18, - color: "#627EEA", - overlayTextColor: "#fff", - logoURL: "https://d1912tcoux65lj.cloudfront.net/network/polygon.jpg" - } - } -}; - -export default specificParams; diff --git a/packages/chains/src/polygon/plugins.ts b/packages/chains/src/polygon/plugins.ts deleted file mode 100644 index 89104c300..000000000 --- a/packages/chains/src/polygon/plugins.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { assetSymbols, DeployedPlugins, Strategy, underlying } from "@ionicprotocol/types"; - -import assets from "./assets"; - -const deployedPlugins: DeployedPlugins = { - // BeefyERC4626_sAMM-DAI-USDR_0xBcE30B4D78cEb9a75A1Aa62156529c3592b3F08b.json - "0x72c528B63Ced4a3DF5Ae6e983568566f1Ee7Ad77": { - market: "0xBcE30B4D78cEb9a75A1Aa62156529c3592b3F08b", - name: "Beefy USDR-DAI sLP vault Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/pearl-usdrv3-dai", - underlying: underlying(assets, assetSymbols["sAMM-DAI/USDR"]), - otherParams: ["0x2C6d11e756986f1537a2c71c851e9a1F7A0008b2", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_sAMM-USDC-USDR_0x83DF24fE1B1eBF38048B91ffc4a8De0bAa88b891.json - "0xf634F01D04dA89914d03E914897eA068b3886714": { - market: "0x83DF24fE1B1eBF38048B91ffc4a8De0bAa88b891", - name: "Beefy USDC-USDR sLP vault Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/pearl-usdc-usdrv3", - underlying: underlying(assets, assetSymbols["sAMM-USDC/USDR"]), - otherParams: ["0xD74B5df80347cE9c81b91864DF6a50FfAfE44aa5", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_vAMM-MATIC-USDR_0xfacEdA4f9731797102f040380aD5e234c92d1942.json - "0x046eBfaC5da8c603db95421861e536e3e16a86Be": { - market: "0xfacEdA4f9731797102f040380aD5e234c92d1942", - name: "Beefy MATIC-USDR vLP vault Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/pearl-matic-usdrv3", - underlying: underlying(assets, assetSymbols["vAMM-MATIC/USDR"]), - otherParams: ["0x3325a25A2608EA723cB5D72E27af65AACFfb810e", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_vAMM-wUSDR-USDR_0x06F61E22ef144f1cC4550D40ffbF681CB1C3aCAF.json - "0x76B30142Ab37fd78bbD5214D742d9916eAA68249": { - market: "0x06F61E22ef144f1cC4550D40ffbF681CB1C3aCAF", - name: "Beefy WUSDR-USDR vLP vault Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/pearl-wusdr-usdrv3", - underlying: underlying(assets, assetSymbols["vAMM-wUSDR/USDR"]), - otherParams: ["0x67FEe70c32097c53B5aeAaCdbee7544eaE2194f8", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_vAMM-WETH-USDR_0x343D9a8D2Bc6A62390aEc764bb5b900C4B039127.json - "0x06D929F4433825C9099D73C9F5512aD965A81c40": { - market: "0x343D9a8D2Bc6A62390aEc764bb5b900C4B039127", - name: "Beefy WETH-USDR vLP vault Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/pearl-usdrv3-weth", - underlying: underlying(assets, assetSymbols["vAMM-WETH/USDR"]), - otherParams: ["0xbfe9584228BBcB21EAA64a878c28c5cBFd0F6304", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_vAMM-WBTC-USDR_0xffc8c8d747E52fAfbf973c64Bab10d38A6902c46.json - "0x7d2eAc8C5241DB0447Aa5509E0399B8A0c41f6D5": { - market: "0xffc8c8d747E52fAfbf973c64Bab10d38A6902c46", - name: "Beefy WBTC-USDR vLP vault Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/pearl-wbtc-usdrv3", - underlying: underlying(assets, assetSymbols["vAMM-WBTC/USDR"]), - otherParams: ["0x40c03Cd0B5D1571608D09e6279B4C63660e431F1", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_vAMM-TNGBL-USDR_0x2E870Aeee3D9d1eA29Ec93d2c0A99A4e0D5EB697.json - "0xD1Bf0045a8f81f93B40b51C3Ccae2516e199e525": { - market: "0x2E870Aeee3D9d1eA29Ec93d2c0A99A4e0D5EB697", - name: "Beefy WBTC-USDR vLP vault Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/pearl-usdrv3-tngbl", - underlying: underlying(assets, assetSymbols["vAMM-TNGBL/USDR"]), - otherParams: ["0x614055aEC4B4248Ab64F976A9060e945D6095ff8", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_aUSDC-CASH-N_0x1D2A7078a404ab970f951d5A6dbECD9e24838FB6.json - "0x3838a561597F9c0BEb722978F7dbDD2fbdF9dEd0": { - market: "0x1D2A7078a404ab970f951d5A6dbECD9e24838FB6", - name: "Beefy Retro Gamma CASH-USDC LP Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/retro-gamma-usdc-cash", - underlying: underlying(assets, assetSymbols["aUSDC_CASH_N"]), - otherParams: ["0x69359cb103F75F8BCdF3264E649D51e91C5EE62a", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_aUSDC-WETH-N_0xC7cA03A0bE1dBAc350E5BfE5050fC5af6406490E.json - "0xEeAdd5c29b1bf67EbdEc4dBcE96e3e3e42587917": { - market: "0xC7cA03A0bE1dBAc350E5BfE5050fC5af6406490E", - name: "Beefy Retro Gamma USDC-WETH LP Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/retro-gamma-usdc-weth-narrow", - underlying: underlying(assets, assetSymbols["aUSDC_WETH_N"]), - otherParams: ["0x5268F5F2a9799f747A55f193d2E266c77653E518", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_aWBTC-WETH-N_0xCB1a06eff3459078c26516ae3a1dB44A61D2DbCA.json - "0xB172bA5788afCFce23E7e78FC831b407E43E2c5C": { - market: "0xCB1a06eff3459078c26516ae3a1dB44A61D2DbCA", - name: "Beefy Retro Gamma WBTC-WETH LP Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/retro-gamma-wbtc-weth", - underlying: underlying(assets, assetSymbols["aWBTC_WETH_N"]), - otherParams: ["0xf552a67A82908E6C7F4382b812218d665e058C0B", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - }, - // BeefyERC4626_aWMATIC-MATICX-N_0xdaDbdB5451C2d86B25F0d8fc023600dd8E7d9A70.json - "0x2609B76320C18A0c7b9c50C323Fd172472Eeb108": { - market: "0xdaDbdB5451C2d86B25F0d8fc023600dd8E7d9A70", - name: "Beefy Retro Gamma MATICX-WMATIC LP Vault", - strategy: Strategy.Beefy, - apyDocsUrl: "https://app.beefy.finance/vault/retro-gamma-wmatic-maticx", - underlying: underlying(assets, assetSymbols["aWBTC_WETH_N"]), - otherParams: ["0xec74671f95F0942358016da627b912143100DAF2", "0"], - icon: "https://d1912tcoux65lj.cloudfront.net/plugin/beefy.png" - } -}; - -export default deployedPlugins; diff --git a/packages/chains/src/polygon/redemptionStrategies.ts b/packages/chains/src/polygon/redemptionStrategies.ts deleted file mode 100644 index de60e8efc..000000000 --- a/packages/chains/src/polygon/redemptionStrategies.ts +++ /dev/null @@ -1,416 +0,0 @@ -import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets, USDC, WMATIC } from "./assets"; - -const redemptionStrategies: RedemptionStrategy[] = [ - { - inputToken: underlying(assets, assetSymbols.jBRL), - strategy: RedemptionStrategyContract.JarvisLiquidatorFunder, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.JEUR), - strategy: RedemptionStrategyContract.JarvisLiquidatorFunder, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_USDC_WETH_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_USDC_DAI_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_USDC_MAI_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_USDC_PAR_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_USDC_USDT_001), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_USDC_USDT_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_USDC_WETH_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_USDC_agEUR_001), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_WBTC_WETH_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.WBTC) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_WETH_DAI_03), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_WMATIC_AAVE_03), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: WMATIC - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_WMATIC_USDC_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: WMATIC - }, - { - inputToken: underlying(assets, assetSymbols.arrakis_WMATIC_WETH_005), - strategy: RedemptionStrategyContract.GelatoGUniLiquidator, - outputToken: WMATIC - }, - { - inputToken: underlying(assets, assetSymbols["JEUR-PAR"]), - strategy: RedemptionStrategyContract.CurveLpTokenLiquidatorNoRegistry, - outputToken: underlying(assets, assetSymbols.JEUR) - }, - { - inputToken: underlying(assets, assetSymbols.am3CRV), - strategy: RedemptionStrategyContract.CurveLpTokenLiquidatorNoRegistry, - outputToken: underlying(assets, assetSymbols.amUSDC) - }, - { - inputToken: underlying(assets, assetSymbols.amUSDC), - strategy: RedemptionStrategyContract.AaveTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols["MAI-USDC"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: USDC - }, - { - inputToken: underlying(assets, assetSymbols["WMATIC-MATICx"]), - strategy: RedemptionStrategyContract.UniswapLpTokenLiquidator, - outputToken: WMATIC - }, - { - inputToken: underlying(assets, assetSymbols.MIMO_PAR_80_20), - strategy: RedemptionStrategyContract.BalancerLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.PAR) - }, - { - inputToken: underlying(assets, assetSymbols.PAR), - strategy: RedemptionStrategyContract.CurveSwapLiquidator, - outputToken: underlying(assets, assetSymbols.JEUR) - }, - { - inputToken: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.PAR) - }, - { - inputToken: underlying(assets, assetSymbols.PAR), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP) - }, - { - inputToken: underlying(assets, assetSymbols.MATICx), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: WMATIC - }, - { - inputToken: WMATIC, - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.MATICx) - }, - { - inputToken: underlying(assets, assetSymbols.stMATIC), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: WMATIC - }, - { - inputToken: WMATIC, - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.stMATIC) - }, - { - inputToken: underlying(assets, assetSymbols.MAI), - strategy: RedemptionStrategyContract.UniswapV2LiquidatorFunder, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP), - strategy: RedemptionStrategyContract.BalancerLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.JEUR) - }, - { - inputToken: underlying(assets, assetSymbols.BRZ_JBRL_STABLE_BLP), - strategy: RedemptionStrategyContract.BalancerLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.jBRL) - }, - { - inputToken: underlying(assets, assetSymbols.WMATIC_MATICX_STABLE_BLP), - strategy: RedemptionStrategyContract.BalancerLpTokenLiquidator, - outputToken: WMATIC - }, - { - inputToken: underlying(assets, assetSymbols.WMATIC_CSMATIC_STABLE_BLP), - strategy: RedemptionStrategyContract.BalancerLpTokenLiquidator, - outputToken: WMATIC - }, - { - inputToken: underlying(assets, assetSymbols.TETU_BOOSTED_STABLE_BLP), - strategy: RedemptionStrategyContract.BalancerLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.TETU_LINEAR_USDC) - }, - { - inputToken: underlying(assets, assetSymbols.TETU_LINEAR_USDC), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.USDC) - }, - { - inputToken: underlying(assets, assetSymbols.MaticX_bbaWMATIC), - strategy: RedemptionStrategyContract.BalancerLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC) - }, - { - inputToken: underlying(assets, assetSymbols.StMatic_bbaWMATIC), - strategy: RedemptionStrategyContract.BalancerLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC) - }, - { - inputToken: underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: WMATIC - }, - // USDR -> USDC, WUSDR - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlySwapLiquidator, - outputToken: USDC - }, - { - inputToken: USDC, - strategy: RedemptionStrategyContract.SolidlySwapLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - { - inputToken: USDC, - strategy: RedemptionStrategyContract.SolidlySwapLiquidator, - outputToken: underlying(assets, assetSymbols.WUSDR) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlySwapLiquidator, - outputToken: underlying(assets, assetSymbols.WUSDR) - }, - // CASH -> USDC - { - inputToken: underlying(assets, assetSymbols.CASH), - strategy: RedemptionStrategyContract.UniswapV3LiquidatorFunder, - outputToken: USDC - }, - // USDC -> CASH - { - inputToken: USDC, - strategy: RedemptionStrategyContract.UniswapV3LiquidatorFunder, - outputToken: underlying(assets, assetSymbols.CASH) - }, - // LPs -> USDR || USDC || WETH || CASH - { - inputToken: underlying(assets, assetSymbols.aUSDC_CASH_N), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenLiquidator, - outputToken: USDC - }, - { - inputToken: underlying(assets, assetSymbols.aUSDC_CASH_N), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.CASH) - }, - { - inputToken: underlying(assets, assetSymbols.aUSDC_WETH_N), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenLiquidator, - outputToken: USDC - }, - { - inputToken: underlying(assets, assetSymbols.aWMATIC_MATICX_N), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenLiquidator, - outputToken: WMATIC - }, - { - inputToken: underlying(assets, assetSymbols.aWBTC_WETH_N), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.WBTC) - }, - { - inputToken: underlying(assets, assetSymbols.aWBTC_WETH_N), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - }, - { - inputToken: underlying(assets, assetSymbols["sAMM-USDC/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: USDC - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-wUSDR/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-MATIC/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-TNGBL/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - { - inputToken: underlying(assets, assetSymbols["sAMM-USDC/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - { - inputToken: underlying(assets, assetSymbols["sAMM-DAI/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-WBTC/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-WETH/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - }, - { - inputToken: underlying(assets, assetSymbols["vAMM-WETH/USDR"]), - strategy: RedemptionStrategyContract.SolidlyLpTokenLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - // Reverse: USDC / USDR / WUSDR / CASH -> LPs - { - inputToken: underlying(assets, assetSymbols.USDC), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenWrapper, - outputToken: underlying(assets, assetSymbols.aUSDC_CASH_N) - }, - { - inputToken: underlying(assets, assetSymbols.USDC), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenWrapper, - outputToken: underlying(assets, assetSymbols.aUSDC_WETH_N) - }, - { - inputToken: underlying(assets, assetSymbols.CASH), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenWrapper, - outputToken: underlying(assets, assetSymbols.aUSDC_CASH_N) - }, - { - inputToken: underlying(assets, assetSymbols.WBTC), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenWrapper, - outputToken: underlying(assets, assetSymbols.aWBTC_WETH_N) - }, - { - inputToken: underlying(assets, assetSymbols.WETH), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenWrapper, - outputToken: underlying(assets, assetSymbols.aWBTC_WETH_N) - }, - { - inputToken: underlying(assets, assetSymbols.MATICx), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenWrapper, - outputToken: underlying(assets, assetSymbols.aWMATIC_MATICX_N) - }, - { - inputToken: underlying(assets, assetSymbols.WMATIC), - strategy: RedemptionStrategyContract.GammaUniswapV3LpTokenWrapper, - outputToken: underlying(assets, assetSymbols.aWMATIC_MATICX_N) - }, - { - inputToken: underlying(assets, assetSymbols.USDC), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["sAMM-USDC/USDR"]) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["sAMM-USDC/USDR"]) - }, - { - inputToken: underlying(assets, assetSymbols.WUSDR), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["vAMM-wUSDR/USDR"]) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["vAMM-wUSDR/USDR"]) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["vAMM-MATIC/USDR"]) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["vAMM-WBTC/USDR"]) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["vAMM-WETH/USDR"]) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["vAMM-TNGBL/USDR"]) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlyLpTokenWrapper, - outputToken: underlying(assets, assetSymbols["sAMM-DAI/USDR"]) - }, - // WBTC -> USDR - { - inputToken: underlying(assets, assetSymbols.WBTC), - strategy: RedemptionStrategyContract.SolidlySwapLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - { - inputToken: underlying(assets, assetSymbols.USDR), - strategy: RedemptionStrategyContract.SolidlySwapLiquidator, - outputToken: underlying(assets, assetSymbols.WBTC) - }, - // WUSDR -> USDR - { - inputToken: underlying(assets, assetSymbols.WUSDR), - strategy: RedemptionStrategyContract.SolidlySwapLiquidator, - outputToken: underlying(assets, assetSymbols.USDR) - }, - // Davos - { - inputToken: underlying(assets, assetSymbols.DUSD), - strategy: RedemptionStrategyContract.AlgebraSwapLiquidator, - outputToken: USDC - }, - { - inputToken: USDC, - strategy: RedemptionStrategyContract.AlgebraSwapLiquidator, - outputToken: underlying(assets, assetSymbols.DUSD) - } -]; - -export default redemptionStrategies; diff --git a/packages/chains/src/zkevm/addresses.ts b/packages/chains/src/zkevm/addresses.ts deleted file mode 100644 index f89e6a06d..000000000 --- a/packages/chains/src/zkevm/addresses.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { assetSymbols, ChainAddresses, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { UNISWAP_V3_ADDRESSES } from "../common/addresses"; - -import { assets } from "./assets"; - -const chainAddresses: ChainAddresses = { - W_TOKEN: underlying(assets, assetSymbols.WETH), - W_TOKEN_USD_CHAINLINK_PRICE_FEED: ethers.constants.AddressZero, - UNISWAP_V2_ROUTER: ethers.constants.AddressZero, - UNISWAP_V2_FACTORY: ethers.constants.AddressZero, - UNISWAP_V3_ROUTER: ethers.constants.AddressZero, - PAIR_INIT_HASH: ethers.utils.hexlify("0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"), - STABLE_TOKEN: underlying(assets, assetSymbols.USDC), - W_BTC_TOKEN: underlying(assets, assetSymbols.WBTC), - ALGEBRA_SWAP_ROUTER: "0xF6Ad3CcF71Abb3E12beCf6b3D2a74C963859ADCd" -}; - -export default chainAddresses; diff --git a/packages/chains/src/zkevm/assets.ts b/packages/chains/src/zkevm/assets.ts deleted file mode 100644 index f5cfb44f1..000000000 --- a/packages/chains/src/zkevm/assets.ts +++ /dev/null @@ -1,100 +0,0 @@ -import { assetSymbols, OracleTypes, SupportedAsset, SupportedChains } from "@ionicprotocol/types"; - -import { defaultDocs, wrappedAssetDocs } from "../common"; - -export const WETH = "0x4F9A0e7FD2Bf6067db6994CF12E4495Df938E6e9"; -export const WBTC = "0xEA034fb02eB1808C2cc3adbC15f447B93CbE08e1"; -export const USDC = "0xA8CE8aee21bC2A48a5EF670afCc9274C7bbbC035"; -export const USDT = "0x1E4a5963aBFD975d8c9021ce480b42188849D41d"; -export const DAI = "0xC5015b9d9161Dca7e18e32f6f25C4aD850731Fd4"; -export const FRAX = "0xFf8544feD5379D9ffa8D47a74cE6b91e632AC44D"; -export const WMATIC = "0xa2036f0538221a77A3937F1379699f44945018d0"; - -export const rETH = "0xb23C20EFcE6e24Acca0Cef9B7B7aA196b84EC942"; -export const frxETH = "0xCf7eceE185f19e2E970a301eE37F93536ed66179"; -export const wstETH = "0x5D8cfF95D7A57c0BF50B30b43c7CC0D52825D4a9"; - -export const assets: SupportedAsset[] = [ - { - symbol: assetSymbols.USDC, - underlying: USDC, - name: "USD Coin", - decimals: 6, - oracle: OracleTypes.API3PriceOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", USDC) - }, - { - symbol: assetSymbols.WBTC, - underlying: WBTC, - name: "Wrapped BTC", - decimals: 8, - oracle: OracleTypes.API3PriceOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", WBTC) - }, - { - symbol: assetSymbols.WETH, - underlying: WETH, - name: "Wrapped Ether", - decimals: 18, - oracle: OracleTypes.FixedNativePriceOracle, - extraDocs: wrappedAssetDocs(SupportedChains.zkevm) - }, - { - symbol: assetSymbols.USDT, - underlying: USDT, - name: "Tether USD", - decimals: 6, - oracle: OracleTypes.API3PriceOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", USDT) - }, - { - symbol: assetSymbols.FRAX, - underlying: FRAX, - name: "Frax Stablecoin", - decimals: 18, - oracle: OracleTypes.AlgebraPriceOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", FRAX) - }, - { - symbol: assetSymbols.DAI, - underlying: DAI, - name: "DAI Stablecoin", - decimals: 18, - oracle: OracleTypes.AlgebraPriceOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", DAI) - }, - { - symbol: assetSymbols.WMATIC, - underlying: WMATIC, - name: "Wrapped Matic", - decimals: 18, - oracle: OracleTypes.API3PriceOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", WMATIC) - }, - { - symbol: assetSymbols.frxETH, - underlying: frxETH, - name: "Frax Ether", - decimals: 18, - oracle: OracleTypes.AlgebraPriceOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", frxETH) - }, - { - symbol: assetSymbols.rETH, - underlying: rETH, - name: "Rocket Pool ETH", - decimals: 18, - oracle: OracleTypes.BalancerRateProviderOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", rETH) - }, - { - symbol: assetSymbols.wstETH, - underlying: wstETH, - name: "Wrapped liquid staked Ether", - decimals: 18, - oracle: OracleTypes.BalancerRateProviderOracle, - extraDocs: defaultDocs("https://zkevm.polygonscan.com", wstETH) - } -]; - -export default assets; diff --git a/packages/chains/src/zkevm/fundingStrategies.ts b/packages/chains/src/zkevm/fundingStrategies.ts deleted file mode 100644 index d96178232..000000000 --- a/packages/chains/src/zkevm/fundingStrategies.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { assetSymbols, FundingStrategy, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const fundingStrategies: FundingStrategy[] = []; - -export default fundingStrategies; diff --git a/packages/chains/src/zkevm/irms.ts b/packages/chains/src/zkevm/irms.ts deleted file mode 100644 index 8e6a3ac70..000000000 --- a/packages/chains/src/zkevm/irms.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { IrmTypes } from "@ionicprotocol/types"; - -const baseIrms = [IrmTypes.JumpRateModel]; - -const irms: IrmTypes[] = [...baseIrms]; - -export default irms; diff --git a/packages/chains/src/zkevm/leveragePairs.ts b/packages/chains/src/zkevm/leveragePairs.ts deleted file mode 100644 index aec608582..000000000 --- a/packages/chains/src/zkevm/leveragePairs.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { LeveragePoolConfig } from "@ionicprotocol/types"; - -const leveragePairs: LeveragePoolConfig[] = []; - -export default leveragePairs; diff --git a/packages/chains/src/zkevm/params.ts b/packages/chains/src/zkevm/params.ts deleted file mode 100644 index 1bcb33175..000000000 --- a/packages/chains/src/zkevm/params.ts +++ /dev/null @@ -1,37 +0,0 @@ -import { assetSymbols, ChainParams } from "@ionicprotocol/types"; -import { BigNumber } from "ethers"; - -import chainAddresses from "./addresses"; -import assets from "./assets"; - -const specificParams: ChainParams = { - blocksPerYear: BigNumber.from((40 * 24 * 365 * 60).toString()), - cgId: "ethereum", - metadata: { - chainIdHex: "0x44D", - name: "Polygon zkEVM", - shortName: "zkEVM", - uniswapV3Fees: {}, - img: "https://d1912tcoux65lj.cloudfront.net/network/polygon_zkevm.png", - blockExplorerUrls: { default: { name: "polygonscan", url: "https://zkevm.polygonscan.com" } }, - rpcUrls: { - default: { http: ["https://zkevm-rpc.com"] }, - public: { http: ["https://zkevm-rpc.com"] } - }, - nativeCurrency: { - symbol: "ETH", - name: "ETH" - }, - wrappedNativeCurrency: { - symbol: assetSymbols.WETH, - address: chainAddresses.W_TOKEN, - name: "WETH", - decimals: 18, - color: "#7A88A1", - overlayTextColor: "#fff", - logoURL: "https://d1912tcoux65lj.cloudfront.net/network/polygon_zkevm.png" - } - } -}; - -export default specificParams; diff --git a/packages/chains/src/zkevm/plugins.ts b/packages/chains/src/zkevm/plugins.ts deleted file mode 100644 index 075787ef7..000000000 --- a/packages/chains/src/zkevm/plugins.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { DeployedPlugins } from "@ionicprotocol/types"; - -const deployedPlugins: DeployedPlugins = {}; - -export default deployedPlugins; diff --git a/packages/chains/src/zkevm/redemptionStrategies.ts b/packages/chains/src/zkevm/redemptionStrategies.ts deleted file mode 100644 index de385da5f..000000000 --- a/packages/chains/src/zkevm/redemptionStrategies.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { assetSymbols, RedemptionStrategy, RedemptionStrategyContract, underlying } from "@ionicprotocol/types"; - -import { assets } from "./assets"; - -const redemptionStrategies: RedemptionStrategy[] = [ - { - inputToken: underlying(assets, assetSymbols.wstETH), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - }, - { - inputToken: underlying(assets, assetSymbols.rETH), - strategy: RedemptionStrategyContract.BalancerSwapLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - }, - { - inputToken: underlying(assets, assetSymbols.frxETH), - strategy: RedemptionStrategyContract.AlgebraSwapLiquidator, - outputToken: underlying(assets, assetSymbols.WETH) - } -]; - -export default redemptionStrategies; diff --git a/packages/functions/package.json b/packages/functions/package.json index 1a9260952..84e66e630 100644 --- a/packages/functions/package.json +++ b/packages/functions/package.json @@ -3,6 +3,8 @@ "version": "0.0.3", "private": true, "dependencies": { + "@ionicprotocol/chains": "workspace:*", + "@ionicprotocol/types": "workspace:*", "@supabase/supabase-js": "^2.7.1", "axios": "^1.3.2", "dotenv": "^16.0.3", diff --git a/packages/functions/src/data/flywheels.ts b/packages/functions/src/data/flywheels.ts index fdf27170b..3c0226600 100644 --- a/packages/functions/src/data/flywheels.ts +++ b/packages/functions/src/data/flywheels.ts @@ -1,14 +1,4 @@ import { SupportedChains } from '@ionicprotocol/types'; -export const bscFlywheels = [ - '0xD09b27B5EA296A901D2113c374A28f02Cd46010D', - '0x851Cc0037B6923e60dC81Fa79Ac0799cC983492c', // jarvis, 2brl, DDD Flywheel - '0xC6431455AeE17a08D6409BdFB18c4bc73a4069E4', // jarvis, 2brl, EPX Flywheel -]; -export const polygonFlywheels = []; - type ChainToFlywheels = Partial>; -export const flywheelsOfChain: ChainToFlywheels = { - [SupportedChains.bsc]: bscFlywheels, - [SupportedChains.polygon]: polygonFlywheels, -}; +export const flywheelsOfChain: ChainToFlywheels = {}; diff --git a/packages/functions/src/data/plugins.ts b/packages/functions/src/data/plugins.ts index 59ed0e543..3720f91c1 100644 --- a/packages/functions/src/data/plugins.ts +++ b/packages/functions/src/data/plugins.ts @@ -1,10 +1,4 @@ -import bscDeployedPlugins from '@chains/bsc/plugins'; -import polygonDeployedPlugins from '@chains/polygon/plugins'; - import { DeployedPlugins, SupportedChains } from '@ionicprotocol/types'; type ChainToPlugins = Partial>; -export const pluginsOfChain: ChainToPlugins = { - [SupportedChains.bsc]: bscDeployedPlugins, - [SupportedChains.polygon]: polygonDeployedPlugins, -}; +export const pluginsOfChain: ChainToPlugins = {}; diff --git a/packages/functions/src/data/rpcs.ts b/packages/functions/src/data/rpcs.ts index 06813bfb4..a14830803 100644 --- a/packages/functions/src/data/rpcs.ts +++ b/packages/functions/src/data/rpcs.ts @@ -1,9 +1,11 @@ import { SupportedChains } from '@ionicprotocol/types'; +import { base, bob, mode, optimism } from '@ionicprotocol/chains'; type RpcUrls = Partial>; export const rpcUrls: RpcUrls = { - [SupportedChains.bsc]: 'https://bsc-dataseed1.binance.org/', - [SupportedChains.polygon]: 'https://poly-rpc.gateway.pokt.network', - [SupportedChains.mode]: 'https://mainnet.mode.network', + [SupportedChains.mode]: mode.specificParams.metadata.rpcUrls.default.http[0], + [SupportedChains.base]: base.specificParams.metadata.rpcUrls.default.http[0], + [SupportedChains.optimism]: optimism.specificParams.metadata.rpcUrls.default.http[0], + [SupportedChains.bob]: bob.specificParams.metadata.rpcUrls.default.http[0], }; diff --git a/packages/functions/src/providers/rewards/assets/UniverseStaderlabsAPYProvider.ts b/packages/functions/src/providers/rewards/assets/UniverseStaderlabsAPYProvider.ts index 15d891cbf..9e235de5c 100644 --- a/packages/functions/src/providers/rewards/assets/UniverseStaderlabsAPYProvider.ts +++ b/packages/functions/src/providers/rewards/assets/UniverseStaderlabsAPYProvider.ts @@ -13,12 +13,6 @@ class UniverseStaderlabsAPYProvider extends AbstractAssetAPYProvider { let chainKey = ''; switch (chainId) { - case SupportedChains.polygon: - chainKey = 'polygon'; - break; - case SupportedChains.bsc: - chainKey = 'bnb'; - break; default: break; } diff --git a/packages/functions/src/providers/rewards/assets/index.ts b/packages/functions/src/providers/rewards/assets/index.ts index ffae5113a..5b23f23e0 100644 --- a/packages/functions/src/providers/rewards/assets/index.ts +++ b/packages/functions/src/providers/rewards/assets/index.ts @@ -1,8 +1,6 @@ import { SupportedChains } from '@ionicprotocol/types'; import { functionsAlert } from '../../../alert'; import { AbstractAssetAPYProvider, APYProviderInitObject } from './AbstractAssetAPYProvider'; -import MockAPYProvider from './MockAPYProvider'; -import UniverseStaderlabsAPYProvider from './UniverseStaderlabsAPYProvider'; type ProviderMap = { [key: string]: AbstractAssetAPYProvider; @@ -12,15 +10,7 @@ type ProviderMapForChain = Partial<{ [key in SupportedChains]: ProviderMap; }>; -const providerMap: ProviderMapForChain = { - [SupportedChains.bsc]: { - '0x1bdd3Cf7F79cfB8EdbB955f20ad99211551BA275': new MockAPYProvider(0.0592), - '0xc2E9d07F66A89c44062459A47a0D2Dc038E4fb16': new MockAPYProvider(0.052), - }, - [SupportedChains.polygon]: { - '0xfa68FB4628DFF1028CFEc22b4162FCcd0d45efb6': UniverseStaderlabsAPYProvider, - }, -}; +const providerMap: ProviderMapForChain = {}; export async function getAPYProviders( chainId: SupportedChains, diff --git a/packages/functions/src/providers/rewards/plugins/CurveGaugeAPYProvider.ts b/packages/functions/src/providers/rewards/plugins/CurveGaugeAPYProvider.ts index 3880684e0..79e040130 100644 --- a/packages/functions/src/providers/rewards/plugins/CurveGaugeAPYProvider.ts +++ b/packages/functions/src/providers/rewards/plugins/CurveGaugeAPYProvider.ts @@ -47,12 +47,8 @@ interface CurveGaugeResponse { } class CurveAPYProvider extends AbstractPluginAPYProvider { - static apyEndpoints: Partial> = { - [SupportedChains.polygon]: 'https://api.curve.fi/api/getFactoryAPYs-polygon', - }; - static gaugeEndpoints: Partial> = { - [SupportedChains.polygon]: 'https://api.curve.fi/api/getFactoGauges/polygon', - }; + static apyEndpoints: Partial> = {}; + static gaugeEndpoints: Partial> = {}; private curveAPYs: CurveAPYs | undefined; private gaugeRewards: GaugeRewards | undefined; @@ -102,7 +98,7 @@ class CurveAPYProvider extends AbstractPluginAPYProvider { if (apy === undefined) { await functionsAlert( `CurveAPYProvider: ${lpToken}`, - `Curve Vault: "${lpToken}" not included in Curve APY data` + `Curve Vault: "${lpToken}" not included in Curve APY data`, ); throw `Curve Vault: "${lpToken}" not included in Curve APY data`; } @@ -130,8 +126,8 @@ class CurveAPYProvider extends AbstractPluginAPYProvider { updated_at: new Date().toISOString(), token: extraReward.tokenAddress, flywheel: pluginData.flywheel, - } as PluginWithFlywheelReward) - ) + }) as PluginWithFlywheelReward, + ), ); } } else { diff --git a/packages/monitors/oracle/src/config/feedVerifier/bsc.ts b/packages/monitors/oracle/src/config/feedVerifier/bsc.ts deleted file mode 100644 index c40fde24a..000000000 --- a/packages/monitors/oracle/src/config/feedVerifier/bsc.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { chainIdToConfig } from "@ionicprotocol/chains"; -import { OracleTypes, SupportedChains } from "@ionicprotocol/types"; - -import { FeedVerifierAsset } from "../../types"; - -import { defaultMaxObservationDelay } from "./defaults"; - -const chainAssets = chainIdToConfig[SupportedChains.bsc].assets.filter( - (asset) => asset.disabled === undefined || asset.disabled == false -); - -const chainLinkSupportedAssets = chainAssets.filter((asset) => asset.oracle === OracleTypes.ChainlinkPriceOracleV2); - -const uniswapV2Assets: FeedVerifierAsset[] = []; - -const chainLinkAssets: FeedVerifierAsset[] = chainLinkSupportedAssets.map((asset) => { - return { - ...asset, - deviationThreshold: 0.05, - maxObservationDelay: defaultMaxObservationDelay, - }; -}); - -const assets: FeedVerifierAsset[] = [...uniswapV2Assets, ...chainLinkAssets]; - -export default assets; diff --git a/packages/monitors/oracle/src/config/feedVerifier/index.ts b/packages/monitors/oracle/src/config/feedVerifier/index.ts index 6c78a172d..8348571b7 100644 --- a/packages/monitors/oracle/src/config/feedVerifier/index.ts +++ b/packages/monitors/oracle/src/config/feedVerifier/index.ts @@ -1,11 +1,3 @@ -import { SupportedChains } from "@ionicprotocol/types"; - import { FeedVerifierAsset } from "../../types"; -import { default as bscAssets } from "./bsc"; -import { default as polygonAssets } from "./polygon"; - -export const chainIdToAssets: { [chainId: number]: FeedVerifierAsset[] } = { - [SupportedChains.bsc]: bscAssets, - [SupportedChains.polygon]: polygonAssets, -}; +export const chainIdToAssets: { [chainId: number]: FeedVerifierAsset[] } = {}; diff --git a/packages/monitors/oracle/src/config/feedVerifier/polygon.ts b/packages/monitors/oracle/src/config/feedVerifier/polygon.ts deleted file mode 100644 index a2e014a07..000000000 --- a/packages/monitors/oracle/src/config/feedVerifier/polygon.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { chainIdToConfig } from "@ionicprotocol/chains"; -import { assetFilter, assetSymbols, OracleTypes, SupportedChains } from "@ionicprotocol/types"; - -import { FeedVerifierAsset } from "../../types"; - -import { defaultDeviationThreshold, defaultMaxObservationDelay } from "./defaults"; - -const chainAssets = chainIdToConfig[SupportedChains.polygon].assets.filter( - (asset) => asset.disabled === undefined || asset.disabled == false -); - -const chainLinkSupportedAssets = chainAssets.filter((asset) => asset.oracle === OracleTypes.ChainlinkPriceOracleV2); -const MIMO = assetFilter(chainAssets, assetSymbols.MIMO); - -// Dia Assets -const diaAssets: FeedVerifierAsset[] = [ - { - ...MIMO, - deviationThreshold: defaultDeviationThreshold, - maxObservationDelay: defaultMaxObservationDelay, - }, -]; - -const chainLinkAssets: FeedVerifierAsset[] = chainLinkSupportedAssets.map((asset) => { - return { - ...asset, - deviationThreshold: 0.05, - maxObservationDelay: defaultMaxObservationDelay, - }; -}); - -const assets: FeedVerifierAsset[] = [ - // Dia Assets - ...diaAssets, - ...chainLinkAssets, -]; - -export default assets; diff --git a/packages/monitors/oracle/src/config/priceChangeVerifier/bsc.ts b/packages/monitors/oracle/src/config/priceChangeVerifier/bsc.ts deleted file mode 100644 index a14f35368..000000000 --- a/packages/monitors/oracle/src/config/priceChangeVerifier/bsc.ts +++ /dev/null @@ -1,39 +0,0 @@ -import { chainIdToConfig } from "@ionicprotocol/chains"; -import { assetFilter, assetSymbols, SupportedChains } from "@ionicprotocol/types"; - -import { PriceChangeVerifierAsset } from "../../types"; - -import { lsdPriceChangeDefaults, stablePriceChangeDefaults } from "./defaults"; - -const chainAssets = chainIdToConfig[SupportedChains.bsc].assets; - -// LSD -const stkBNB = assetFilter(chainAssets, assetSymbols.stkBNB); -const BNBx = assetFilter(chainAssets, assetSymbols.BNBx); -const ankrBNB = assetFilter(chainAssets, assetSymbols.ankrBNB); - -// Stables -const MAI = assetFilter(chainAssets, assetSymbols.MAI); - -const assets: PriceChangeVerifierAsset[] = [ - // LSD - { - ...stkBNB, - ...lsdPriceChangeDefaults, - }, - { - ...BNBx, - ...lsdPriceChangeDefaults, - }, - { - ...ankrBNB, - ...lsdPriceChangeDefaults, - }, - // Stables - { - ...MAI, - ...stablePriceChangeDefaults, - }, -]; - -export default assets; diff --git a/packages/monitors/oracle/src/config/priceChangeVerifier/index.ts b/packages/monitors/oracle/src/config/priceChangeVerifier/index.ts index e101872f0..dca4dd795 100644 --- a/packages/monitors/oracle/src/config/priceChangeVerifier/index.ts +++ b/packages/monitors/oracle/src/config/priceChangeVerifier/index.ts @@ -1,11 +1,3 @@ -import { SupportedChains } from "@ionicprotocol/types"; - import { PriceChangeVerifierAsset } from "../../types"; -import { default as bscAssets } from "./bsc"; -import { default as polygonAssets } from "./polygon"; - -export const chainIdToAssets: { [chainId: number]: PriceChangeVerifierAsset[] } = { - [SupportedChains.bsc]: bscAssets, - [SupportedChains.polygon]: polygonAssets, -}; +export const chainIdToAssets: { [chainId: number]: PriceChangeVerifierAsset[] } = {}; diff --git a/packages/monitors/oracle/src/config/priceChangeVerifier/polygon.ts b/packages/monitors/oracle/src/config/priceChangeVerifier/polygon.ts deleted file mode 100644 index bd28f9570..000000000 --- a/packages/monitors/oracle/src/config/priceChangeVerifier/polygon.ts +++ /dev/null @@ -1,62 +0,0 @@ -import { chainIdToConfig } from "@ionicprotocol/chains"; -import { assetFilter, assetSymbols, SupportedChains } from "@ionicprotocol/types"; - -import { PriceChangeVerifierAsset } from "../../types"; - -import { - lsdPriceChangeDefaults, - midCapPriceChangeDefaults, - smallCapPriceChangeDefaults, - stablePriceChangeDefaults, -} from "./defaults"; - -const chainAssets = chainIdToConfig[SupportedChains.polygon].assets; - -// Smaller Cap -const MIMO = assetFilter(chainAssets, assetSymbols.MIMO); -const AAVE = assetFilter(chainAssets, assetSymbols.AAVE); - -// LSD -const MATICx = assetFilter(chainAssets, assetSymbols.MATICx); -const stMATIC = assetFilter(chainAssets, assetSymbols.stMATIC); -const aMATICc = assetFilter(chainAssets, assetSymbols.aMATICc); - -// Stables -const MAI = assetFilter(chainAssets, assetSymbols.MAI); -const PAR = assetFilter(chainAssets, assetSymbols.PAR); - -const assets: PriceChangeVerifierAsset[] = [ - // Small Cap - { - ...MIMO, - ...smallCapPriceChangeDefaults, - }, - { - ...AAVE, - ...midCapPriceChangeDefaults, - }, - // LSD - { - ...MATICx, - ...lsdPriceChangeDefaults, - }, - { - ...stMATIC, - ...lsdPriceChangeDefaults, - }, - { - ...aMATICc, - ...lsdPriceChangeDefaults, - }, - // Stables - { - ...MAI, - ...stablePriceChangeDefaults, - }, - { - ...PAR, - ...stablePriceChangeDefaults, - }, -]; - -export default assets; diff --git a/packages/monitors/oracle/src/config/priceVerifier/bsc.ts b/packages/monitors/oracle/src/config/priceVerifier/bsc.ts deleted file mode 100644 index 2b5016681..000000000 --- a/packages/monitors/oracle/src/config/priceVerifier/bsc.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { chainIdToConfig } from "@ionicprotocol/chains"; -import { assetFilter, assetSymbols, SupportedChains } from "@ionicprotocol/types"; - -import { PriceVerifierAsset } from "../../types"; - -import { priceDeviations } from "./defaults"; - -const chainAssets = chainIdToConfig[SupportedChains.bsc].assets.filter( - (asset) => asset.disabled === undefined || asset.disabled == false -); - -const assets: PriceVerifierAsset[] = [ - { - ...assetFilter(chainAssets, assetSymbols.stkBNB), - maxPriceDeviation: priceDeviations.LSD, - }, - { - ...assetFilter(chainAssets, assetSymbols.BNBx), - maxPriceDeviation: priceDeviations.LSD, - }, - { - ...assetFilter(chainAssets, assetSymbols.ankrBNB), - maxPriceDeviation: priceDeviations.LSD, - }, -]; - -export default assets; diff --git a/packages/monitors/oracle/src/config/priceVerifier/index.ts b/packages/monitors/oracle/src/config/priceVerifier/index.ts index 060820753..3c46add80 100644 --- a/packages/monitors/oracle/src/config/priceVerifier/index.ts +++ b/packages/monitors/oracle/src/config/priceVerifier/index.ts @@ -1,11 +1,3 @@ -import { SupportedChains } from "@ionicprotocol/types"; - import { PriceVerifierAsset } from "../../types"; -import { default as bscAssets } from "./bsc"; -import { default as polygonAssets } from "./polygon"; - -export const chainIdToAssets: { [chainId: number]: PriceVerifierAsset[] } = { - [SupportedChains.bsc]: bscAssets, - [SupportedChains.polygon]: polygonAssets, -}; +export const chainIdToAssets: { [chainId: number]: PriceVerifierAsset[] } = {}; diff --git a/packages/monitors/oracle/src/config/priceVerifier/polygon.ts b/packages/monitors/oracle/src/config/priceVerifier/polygon.ts deleted file mode 100644 index 40072dfd7..000000000 --- a/packages/monitors/oracle/src/config/priceVerifier/polygon.ts +++ /dev/null @@ -1,43 +0,0 @@ -import { chainIdToConfig } from "@ionicprotocol/chains"; -import { assetFilter, assetSymbols, SupportedChains } from "@ionicprotocol/types"; - -import { PriceVerifierAsset } from "../../types"; - -import { priceDeviations } from "./defaults"; - -const chainAssets = chainIdToConfig[SupportedChains.polygon].assets.filter( - (asset) => asset.disabled === undefined || asset.disabled == false -); - -const assets: PriceVerifierAsset[] = [ - { - ...assetFilter(chainAssets, assetSymbols.MIMO), - maxPriceDeviation: priceDeviations.SMALL_CAP, - }, - { - ...assetFilter(chainAssets, assetSymbols.MAI), - maxPriceDeviation: 1, - }, - { - ...assetFilter(chainAssets, assetSymbols.MATICx), - maxPriceDeviation: priceDeviations.LSD, - }, - { - ...assetFilter(chainAssets, assetSymbols.stMATIC), - maxPriceDeviation: priceDeviations.LSD, - }, - { - ...assetFilter(chainAssets, assetSymbols.aMATICc), - maxPriceDeviation: priceDeviations.LSD, - }, - { - ...assetFilter(chainAssets, assetSymbols.PAR), - maxPriceDeviation: 3, - }, - { - ...assetFilter(chainAssets, assetSymbols.JEUR), - maxPriceDeviation: priceDeviations.STABLE, - }, -]; - -export default assets; diff --git a/packages/monitors/oracle/tests/run.ts b/packages/monitors/oracle/tests/run.ts index 44e082203..8c1c65048 100644 --- a/packages/monitors/oracle/tests/run.ts +++ b/packages/monitors/oracle/tests/run.ts @@ -17,7 +17,7 @@ export async function runVerifier(sdk: IonicSdk, service: Services, assetsOverri } (async function () { - const chainId: number = process.env.TARGET_CHAIN_ID ? parseInt(process.env.TARGET_CHAIN_ID) : SupportedChains.ganache; + const chainId: number = process.env.TARGET_CHAIN_ID ? parseInt(process.env.TARGET_CHAIN_ID) : SupportedChains.mode; const provider = new JsonRpcProvider(process.env.WEB3_HTTP_PROVIDER_URL); const signer = new Wallet(baseConfig.adminPrivateKey, provider); const ionicSdk = setUpSdk(chainId, signer); diff --git a/packages/monitors/oracle/tests/services/feedVerifier.spec.ts b/packages/monitors/oracle/tests/services/feedVerifier.spec.ts index 31691aac0..2b6d66878 100644 --- a/packages/monitors/oracle/tests/services/feedVerifier.spec.ts +++ b/packages/monitors/oracle/tests/services/feedVerifier.spec.ts @@ -15,15 +15,15 @@ describe("Feed verifier", () => { let feedVerifier: FeedVerifier; let sdk: IonicSdk; - const chainConfig = chainIdToConfig[SupportedChains.bsc]; + const chainConfig = chainIdToConfig[SupportedChains.mode]; const assetsToTest = [assetSymbols.WBNB, assetSymbols.BUSD, assetSymbols.BTCB, assetSymbols.USDT, assetSymbols.DAI]; const assets = chainConfig.assets.filter((x) => assetsToTest.some((y) => y === x.symbol)); // @ts-ignore const config = configs[Services.FeedVerifier]; beforeEach(() => { - const signer = getSigner(SupportedChains.bsc); - sdk = new IonicSdk(signer, chainIdToConfig[SupportedChains.bsc]); + const signer = getSigner(SupportedChains.mode); + sdk = new IonicSdk(signer, chainIdToConfig[SupportedChains.mode]); feedVerifier = new FeedVerifier(sdk, assets[0], config); }); afterEach(function () { diff --git a/packages/monitors/oracle/tests/services/priceVerifier.spec.ts b/packages/monitors/oracle/tests/services/priceVerifier.spec.ts index c0a3071df..9dcfb5971 100644 --- a/packages/monitors/oracle/tests/services/priceVerifier.spec.ts +++ b/packages/monitors/oracle/tests/services/priceVerifier.spec.ts @@ -16,7 +16,7 @@ describe("Price verifier", () => { let sdk: IonicSdk; let env: Record; - const chainConfig = chainIdToConfig[SupportedChains.bsc]; + const chainConfig = chainIdToConfig[SupportedChains.mode]; const assetsToTest = [assetSymbols.WBNB, assetSymbols.BUSD, assetSymbols.BTCB, assetSymbols.USDT, assetSymbols.DAI]; const assets = chainConfig.assets.filter((x) => assetsToTest.some((y) => y === x.symbol)); const config = configs[Services.PriceVerifier]; @@ -25,8 +25,8 @@ describe("Price verifier", () => { env = process.env; process.env = { ...process.env, SERVICE_TO_RUN: "price-verifier" }; - const signer = getSigner(SupportedChains.bsc); - sdk = new IonicSdk(signer, chainIdToConfig[SupportedChains.bsc]); + const signer = getSigner(SupportedChains.mode); + sdk = new IonicSdk(signer, chainIdToConfig[SupportedChains.mode]); priceVerifier = new PriceVerifier(sdk, assets[0], config); }); afterEach(function () { diff --git a/packages/sdk/chainDeploy/helpers/dynamicFlywheels.ts b/packages/sdk/chainDeploy/helpers/dynamicFlywheels.ts index 03191c42a..7f27385c3 100644 --- a/packages/sdk/chainDeploy/helpers/dynamicFlywheels.ts +++ b/packages/sdk/chainDeploy/helpers/dynamicFlywheels.ts @@ -1,7 +1,7 @@ import { constants } from "ethers"; -import { FuseFlywheelDeployFnParams } from ".."; -import { IonicFlywheel } from "../../typechain/IonicFlywheel"; +import { IonicFlywheel } from "../../typechain"; +import { FuseFlywheelDeployFnParams } from "../helpers/types"; export const deployFlywheelWithDynamicRewards = async ({ ethers, diff --git a/packages/sdk/chainDeploy/helpers/oracles/chainlink.ts b/packages/sdk/chainDeploy/helpers/oracles/chainlink.ts index 1bf22a03e..1a0c8a426 100644 --- a/packages/sdk/chainDeploy/helpers/oracles/chainlink.ts +++ b/packages/sdk/chainDeploy/helpers/oracles/chainlink.ts @@ -1,5 +1,4 @@ import { ChainlinkFeedBaseCurrency, underlying } from "@ionicprotocol/types"; -import { ContractTransaction, PopulatedTransaction } from "ethers"; import { AddressesProvider } from "../../../typechain/AddressesProvider"; import { addTransaction } from "../logging"; diff --git a/packages/sdk/chainDeploy/index.ts b/packages/sdk/chainDeploy/index.ts index 12705a8d2..b0703096b 100644 --- a/packages/sdk/chainDeploy/index.ts +++ b/packages/sdk/chainDeploy/index.ts @@ -1,6 +1,6 @@ import { ChainDeployConfig } from "./helpers"; -import { deploy as deploy1337, deployConfig as deployConfig1337 } from "./local/local"; import { deploy as deploy8453, deployConfig as deployConfig8453 } from "./mainnets/base"; +import { deploy as deploy60808, deployConfig as deployConfig60808 } from "./mainnets/bob"; import { deploy as deploy34443, deployConfig as deployConfig34443 } from "./mainnets/mode"; import { deploy as deploy10, deployConfig as deployConfig10 } from "./mainnets/optimism"; import { deploy as deploy11155420, deployConfig as deployConfig11155420 } from "./testnets/sepolia"; @@ -10,10 +10,10 @@ export const chainDeployConfig: Record a.symbol === assetSymbols.WETH)!.underlying, - nativeTokenName: "Ethereum (Local)", - nativeTokenSymbol: "ETH", - stableToken: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48", - wBTCToken: "0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599", - blocksPerYear: 4 * 24 * 365 * 60, - uniswap: { - uniswapV2RouterAddress: "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - uniswapV2FactoryAddress: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", - pairInitHashCode: ethers.utils.hexlify("0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"), - hardcoded: [], - uniswapData: [], - uniswapOracleInitialDeployTokens: [], - flashSwapFee: 0 - }, - dynamicFlywheels: [ - { - // 0x681cEEE3d6781394b2ECD7a4b9d5214f537aFeEb - rewardToken: "0x02Ec29Fd9f0bB212eD2C4926ACe1aeab732ed620", // TOUCH - cycleLength: 100000, - name: "TOUCH" - } - ], - cgId: "ethereum" -}; - -export const deploy = async ({ ethers, getNamedAccounts, deployments, run }: ChainDeployFnParams): Promise => { - const { deployer, alice, bob } = await getNamedAccounts(); - - //// - //// TOKENS - const weth = await deployments.deploy("WETH", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - - console.log("WETH", weth.address); - const tribe = await deployments.deploy("TRIBEToken", { - from: deployer, - args: [ethers.utils.parseEther("1250000000"), deployer], - log: true, - waitConfirmations: 1 - }); - console.log("TRIBEToken: ", tribe.address); - const tribeToken = await ethers.getContractAt("TRIBEToken", tribe.address, deployer); - let tx = await tribeToken.transfer(alice, ethers.utils.parseEther("100000"), { from: deployer }); - await tx.wait(); - - tx = await tribeToken.transfer(bob, ethers.utils.parseEther("100000"), { from: deployer }); - await tx.wait(); - const touch = await deployments.deploy("TOUCHToken", { - from: deployer, - args: [ethers.utils.parseEther("2250000000"), deployer], - log: true, - waitConfirmations: 1 - }); - console.log("TOUCHToken: ", touch.address); - const touchToken = await ethers.getContractAt("TOUCHToken", touch.address, deployer); - tx = await touchToken.transfer(alice, ethers.utils.parseEther("100000"), { from: deployer }); - await tx.wait(); - - tx = await touchToken.transfer(alice, ethers.utils.parseEther("100000"), { from: deployer }); - await tx.wait(); - - tx = await touchToken.transfer(bob, ethers.utils.parseEther("100000"), { from: deployer }); - await tx.wait(); - //// - - // rewards - deployConfig.dynamicFlywheels[0].rewardToken = touchToken.address; - - const masterPriceOracle = (await ethers.getContract("MasterPriceOracle", deployer)) as MasterPriceOracle; - - const fixedNativePriceOracle = (await ethers.getContract( - "FixedNativePriceOracle", - deployer - )) as FixedNativePriceOracle; - const simplePriceOracle = await ethers.getContract("SimplePriceOracle", deployer); - - // get the ERC20 address of deployed cERC20 - const underlyings = [tribe.address, touch.address, weth.address]; - const oracles = [simplePriceOracle.address, simplePriceOracle.address, fixedNativePriceOracle.address]; - - tx = await masterPriceOracle.add(underlyings, oracles); - await tx.wait(); - console.log(`Master Price Oracle updated for tokens ${underlyings.join(", ")}`); - - tx = await masterPriceOracle.setDefaultOracle(simplePriceOracle.address); - await tx.wait(); - - // Plugins & Rewards - await deployFlywheelWithDynamicRewards({ - ethers, - getNamedAccounts, - deployments, - run, - deployConfig - }); - //// -}; diff --git a/packages/sdk/chainDeploy/mainnets/arbitrum.ts b/packages/sdk/chainDeploy/mainnets/arbitrum.ts deleted file mode 100644 index 0e84c340d..000000000 --- a/packages/sdk/chainDeploy/mainnets/arbitrum.ts +++ /dev/null @@ -1,239 +0,0 @@ -import { arbitrum } from "@ionicprotocol/chains"; -import { assetSymbols, ChainlinkFeedBaseCurrency, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { - ChainDeployConfig, - deployChainlinkOracle, - deployCurveLpOracle, - deployUniswapLpOracle, - deployUniswapV3Oracle -} from "../helpers"; -import { - ChainDeployFnParams, - ChainlinkAsset, - ConcentratedLiquidityOracleConfig, - CurvePoolConfig -} from "../helpers/types"; - -const assets = arbitrum.assets; -const USDC = underlying(assets, assetSymbols.USDC); -const WETH = underlying(assets, assetSymbols.WETH); - -export const deployConfig: ChainDeployConfig = { - wtoken: WETH, - nativeTokenName: "Wrapped ETH", - nativeTokenSymbol: "ETH", - stableToken: USDC, - nativeTokenUsdChainlinkFeed: "0x639Fe6ab55C921f74e7fac1ee960C0B6293ba612", - blocksPerYear: arbitrum.specificParams.blocksPerYear.toNumber(), // 12 second blocks, 5 blocks per minute// 12 second blocks, 5 blocks per minute - uniswap: { - hardcoded: [], - uniswapData: [], - pairInitHashCode: ethers.utils.hexlify("0xe18a34eb0e04b04f7a0ac29a6e80748dca96319b42c54d679cb821dca90c6303"), - uniswapV2RouterAddress: "0x1b02dA8Cb0d097eB8D57A175b88c7D8b47997506", - uniswapV2FactoryAddress: "0xc35DADB65012eC5796536bD9864eD8773aBc74C4", - uniswapV3FactoryAddress: "0x1F98431c8aD98523631AE4a59f267346ea31F984", - uniswapOracleInitialDeployTokens: [], - uniswapOracleLpTokens: [], - flashSwapFee: 25 - }, - dynamicFlywheels: [], - cgId: arbitrum.specificParams.cgId -}; - -const uniswapV3OracleTokens: Array = [ - { - assetAddress: underlying(assets, assetSymbols.GMX), - poolAddress: "0x80A9ae39310abf666A87C743d6ebBD0E8C42158E", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: WETH - }, - { - assetAddress: underlying(assets, assetSymbols.USDs), - poolAddress: "0x50450351517117Cb58189edBa6bbaD6284D45902", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: USDC - } -]; - -const chainlinkAssets: ChainlinkAsset[] = [ - { - symbol: assetSymbols.BAL, - aggregator: "0xBE5eA816870D11239c543F84b71439511D70B94f", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.BNB, - aggregator: "0x6970460aabF80C5BE983C6b74e5D06dEDCA95D4A", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.CRV, - aggregator: "0xaebDA2c976cfd1eE1977Eac079B4382acb849325", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.DAI, - aggregator: "0xc5C8E77B397E531B8EC06BFb0048328B30E9eCfB", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.FRAX, - aggregator: "0x0809E3d38d1B4214958faf06D8b1B1a2b73f2ab8", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.FXS, - aggregator: "0x36a121448D74Fa81450c992A1a44B9b7377CD3a5", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.LINK, - aggregator: "0xb7c8Fb1dB45007F98A68Da0588e1AA524C317f27", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.SUSHI, - aggregator: "0xb2A8BA74cbca38508BA1632761b56C897060147C", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.USDC, - aggregator: "0x50834F3163758fcC1Df9973b6e91f0F0F0434aD3", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.USDT, - aggregator: "0x3f3f5dF88dC9F13eac63DF89EC16ef6e7E25DdE7", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.WBTC, - aggregator: "0x6ce185860a4963106506C203335A2910413708e9", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.MAGIC, - aggregator: "0x47E55cCec6582838E173f252D08Afd8116c2202d", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.DPX, - aggregator: "0xc373B9DB0707fD451Bc56bA5E9b029ba26629DF0", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.wstETH, - aggregator: "0xb523AE262D20A936BC152e6023996e46FDC2A95D", - feedBaseCurrency: ChainlinkFeedBaseCurrency.ETH - }, - { - symbol: assetSymbols.rETH, - aggregator: "0xF3272CAfe65b190e76caAF483db13424a3e23dD2", - feedBaseCurrency: ChainlinkFeedBaseCurrency.ETH - }, - { - symbol: assetSymbols.OHM, - aggregator: "0x761aaeBf021F19F198D325D7979965D0c7C9e53b", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - } -]; - -// https://arbitrum.curve.fi/ -const curvePools: CurvePoolConfig[] = []; - -export const deploy = async ({ run, ethers, getNamedAccounts, deployments }: ChainDeployFnParams): Promise => { - const { deployer } = await getNamedAccounts(); - - //// deploy uniswap v3 price oracle - await deployUniswapV3Oracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - concentratedLiquidityOracleTokens: uniswapV3OracleTokens - }); - - //// ORACLES - //// Uniswap Oracle - // await deployUniswapOracle({ run, ethers, getNamedAccounts, deployments, deployConfig }); - - //// ChainLinkV2 Oracle - await deployChainlinkOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - assets: assets, - chainlinkAssets - }); - - //// Uniswap Lp Oracle - await deployUniswapLpOracle({ run, ethers, getNamedAccounts, deployments, deployConfig }); - - //// Curve LP Oracle - await deployCurveLpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - curvePools - }); - - // Quoter - const quoter = await deployments.deploy("Quoter", { - from: deployer, - args: [deployConfig.uniswap.uniswapV3FactoryAddress], - log: true, - waitConfirmations: 1 - }); - console.log("Quoter: ", quoter.address); - - // Liquidators - - //// CurveLPLiquidator - const curveLpTokenLiquidatorNoRegistry = await deployments.deploy("CurveLpTokenLiquidatorNoRegistry", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveLpTokenLiquidatorNoRegistry.transactionHash) - await ethers.provider.waitForTransaction(curveLpTokenLiquidatorNoRegistry.transactionHash); - console.log("CurveLpTokenLiquidatorNoRegistry: ", curveLpTokenLiquidatorNoRegistry.address); - - //// Uniswap V3 Liquidator Funder - const uniswapV3LiquidatorFunder = await deployments.deploy("UniswapV3LiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - console.log("UniswapV3LiquidatorFunder: ", uniswapV3LiquidatorFunder.address); - - //// Balancer Lp token liquidator - const balancerLpTokenLiquidator = await deployments.deploy("BalancerLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (balancerLpTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(balancerLpTokenLiquidator.transactionHash); - console.log("BalancerLpTokenLiquidator: ", balancerLpTokenLiquidator.address); - - //// Balancer Swap token liquidator - const balancerSwapTokenLiquidator = await deployments.deploy("BalancerSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (balancerSwapTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(balancerSwapTokenLiquidator.transactionHash); - console.log("BalancerSwapLiquidator: ", balancerSwapTokenLiquidator.address); -}; diff --git a/packages/sdk/chainDeploy/mainnets/bob.ts b/packages/sdk/chainDeploy/mainnets/bob.ts new file mode 100644 index 000000000..9ac25312f --- /dev/null +++ b/packages/sdk/chainDeploy/mainnets/bob.ts @@ -0,0 +1,67 @@ +import { bob } from "@ionicprotocol/chains"; +import { ChainlinkSpecificParams, OracleTypes, PythSpecificParams } from "@ionicprotocol/types"; + +import { ChainDeployConfig, deployChainlinkOracle, deployPythPriceOracle } from "../helpers"; +import { ChainlinkAsset, PythAsset } from "../helpers/types"; + +const assets = bob.assets; + +export const deployConfig: ChainDeployConfig = { + blocksPerYear: bob.specificParams.blocksPerYear.toNumber(), + cgId: bob.specificParams.cgId, + nativeTokenName: "Base", + nativeTokenSymbol: "ETH", + stableToken: bob.chainAddresses.STABLE_TOKEN, + uniswap: { + flashSwapFee: 30, // TODO set the correct fee + hardcoded: [], + uniswapData: [], + uniswapOracleInitialDeployTokens: [], + uniswapV2FactoryAddress: bob.chainAddresses.UNISWAP_V2_FACTORY, + uniswapV2RouterAddress: bob.chainAddresses.UNISWAP_V2_ROUTER, + uniswapV3SwapRouter: bob.chainAddresses.UNISWAP_V3_ROUTER, + uniswapV3Quoter: bob.chainAddresses.UNISWAP_V3?.QUOTER_V2 + }, + wtoken: bob.chainAddresses.W_TOKEN, + nativeTokenUsdChainlinkFeed: bob.chainAddresses.W_TOKEN_USD_CHAINLINK_PRICE_FEED +}; + +const chainlinkAssets: ChainlinkAsset[] = bob.assets + .filter((asset) => asset.oracle === OracleTypes.ChainlinkPriceOracleV2) + .map((asset) => ({ + aggregator: (asset.oracleSpecificParams! as ChainlinkSpecificParams).aggregator, + feedBaseCurrency: (asset.oracleSpecificParams! as ChainlinkSpecificParams).feedBaseCurrency, + symbol: asset.symbol + })); + +export const deploy = async ({ run, ethers, getNamedAccounts, deployments }): Promise => { + const { deployer } = await getNamedAccounts(); + + //// ChainLinkV2 Oracle + await deployChainlinkOracle({ + run, + ethers, + getNamedAccounts, + deployments, + deployConfig, + assets, + chainlinkAssets + }); + + //// Uniswap V3 Liquidator Funder + const uniswapV3LiquidatorFunder = await deployments.deploy("UniswapV3LiquidatorFunder", { + from: deployer, + args: [], + log: true, + waitConfirmations: 1 + }); + console.log("UniswapV3LiquidatorFunder: ", uniswapV3LiquidatorFunder.address); + + const solidlySwapLiquidator = await deployments.deploy("SolidlySwapLiquidator", { + from: deployer, + args: [], + log: true, + waitConfirmations: 1 + }); + console.log("solidlySwapLiquidator: ", solidlySwapLiquidator.address); +}; diff --git a/packages/sdk/chainDeploy/mainnets/bsc.ts b/packages/sdk/chainDeploy/mainnets/bsc.ts deleted file mode 100644 index 97a17297d..000000000 --- a/packages/sdk/chainDeploy/mainnets/bsc.ts +++ /dev/null @@ -1,685 +0,0 @@ -import { bsc } from "@ionicprotocol/chains"; -import { assetSymbols, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { AddressesProvider } from "../../typechain/AddressesProvider"; -import { - ChainDeployConfig, - ChainlinkFeedBaseCurrency, - deployAlgebraPriceOracle, - deployAnkrCertificateTokenPriceOracle, - deployChainlinkOracle, - deployCurveLpOracle, - deployCurveV2LpOracle, - deployFlywheelWithDynamicRewards, - deployGammaPoolOracle, - deploySolidlyLpOracle, - deploySolidlyPriceOracle, - deployStkBNBOracle, - deployUniswapLpOracle, - deployUniswapOracle, - deployWombatOracle -} from "../helpers"; -import { - ChainDeployFnParams, - ChainlinkAsset, - ConcentratedLiquidityOracleConfig, - CurvePoolConfig, - CurveV2PoolConfig, - GammaLpAsset, - GammaUnderlyingSwap, - SolidlyLpAsset, - SolidlyOracleAssetConfig, - WombatAsset -} from "../helpers/types"; - -const assets = bsc.assets; -const wbnb = underlying(assets, assetSymbols.WBNB); - -export const deployConfig: ChainDeployConfig = { - wtoken: wbnb, - nativeTokenUsdChainlinkFeed: "0x0567F2323251f0Aab15c8dFb1967E4e8A7D42aeE", - nativeTokenName: "Binance Network Token", - nativeTokenSymbol: "BNB", - stableToken: underlying(assets, assetSymbols.BUSD), - wBTCToken: underlying(assets, assetSymbols.BTCB), - blocksPerYear: bsc.specificParams.blocksPerYear.toNumber(), - uniswap: { - hardcoded: [], - uniswapData: [ - { - lpDisplayName: "PancakeSwap", - lpName: "Pancake LPs", - lpSymbol: "Cake-LP" - } - ], - pairInitHashCode: ethers.utils.hexlify("0x00fb7f630766e6a796048ea87d01acd3068e8ff67d078148a3fa3f4a84f69bd5"), - uniswapV2RouterAddress: "0x10ED43C718714eb63d5aA57B78B54704E256024E", - uniswapV2FactoryAddress: "0xcA143Ce32Fe78f1f7019d7d551a6402fC5350c73", - uniswapOracleInitialDeployTokens: [ - { - token: underlying(assets, assetSymbols.DDD), - pair: "0xc19956eCA8A3333671490EF6D6d4329Df049dddD", // WBNB-DDD - baseToken: wbnb, - minPeriod: 1800, - deviationThreshold: "50000000000000000" // 5% - }, - { - token: underlying(assets, assetSymbols.EPX), - pair: "0x30B8A03ba1269cC2daf1Be481bca699DC98D8726", // WBNB-EPX - baseToken: wbnb, - minPeriod: 1800, - deviationThreshold: "50000000000000000" // 5% - } - ], - uniswapOracleLpTokens: [ - underlying(assets, assetSymbols["WBNB-BUSD"]), // WBNB-BUSD PCS LP - underlying(assets, assetSymbols["WBNB-DAI"]), // WBNB-DAI PCS LP - underlying(assets, assetSymbols["WBNB-USDC"]), // WBNB-USDC PCS LP - underlying(assets, assetSymbols["WBNB-USDT"]), // WBNB-USDT PCS LP - underlying(assets, assetSymbols["USDC-ETH"]), // USDC-ETH PCS LP - underlying(assets, assetSymbols["BUSD-BTCB"]), // BUSD-BTCB PCS LP - underlying(assets, assetSymbols["CAKE-WBNB"]), // CAKE-WBNB PCS LP - underlying(assets, assetSymbols["BTCB-ETH"]), // BTCB-ETH PCS LP - underlying(assets, assetSymbols["WBNB-ETH"]), // WBNB-ETH PCS LP - underlying(assets, assetSymbols["USDC-BUSD"]), // USDC-BUSD PCS LP - underlying(assets, assetSymbols["BUSD-USDT"]), // BUSD-USDT PCS LP - underlying(assets, assetSymbols["BTCB-ETH"]), // BTCB-ETH PCS LP - underlying(assets, assetSymbols["stkBNB-WBNB"]), // stkBNB-WBNB PCS LP - underlying(assets, assetSymbols["ANKR-ankrBNB"]), // ANKR-ankrBNB PCS LP - underlying(assets, assetSymbols["asANKR-ankrBNB"]) // ANKR-ankrBNB ApeSwap LP - ], - flashSwapFee: 25 - }, - dynamicFlywheels: [ - { - rewardToken: "0x84c97300a190676a19D1E13115629A11f8482Bd1", - cycleLength: 1, - name: "DDD", - flywheelToReplace: "0x851Cc0037B6923e60dC81Fa79Ac0799cC983492c" - }, - { - rewardToken: "0xAf41054C1487b0e5E2B9250C0332eCBCe6CE9d71", - cycleLength: 1, - name: "EPX", - flywheelToReplace: "0xC6431455AeE17a08D6409BdFB18c4bc73a4069E4" - }, - { - rewardToken: "0xa184088a740c695E156F91f5cC086a06bb78b827", - cycleLength: 1, - name: "AUTOv2" - }, - { - rewardToken: underlying(assets, assetSymbols.THE), - cycleLength: 1, - name: "THE" - } - ], - cgId: bsc.specificParams.cgId -}; - -const chainlinkAssets: ChainlinkAsset[] = [ - // - { - symbol: assetSymbols.BUSD, - aggregator: "0xcBb98864Ef56E9042e7d2efef76141f15731B82f", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.BTCB, - aggregator: "0x264990fbd0A4796A3E3d8E37C4d5F87a3aCa5Ebf", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.DAI, - aggregator: "0x132d3C0B1D2cEa0BC552588063bdBb210FDeecfA", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.ETH, - aggregator: "0x9ef1B8c0E4F7dc8bF5719Ea496883DC6401d5b2e", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - // CZ - { - symbol: assetSymbols.BETH, - aggregator: "0x2A3796273d47c4eD363b361D3AEFb7F7E2A13782", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.CAKE, - aggregator: "0xB6064eD41d4f67e353768aA239cA86f4F73665a1", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - // - { - symbol: assetSymbols.AUTO, - aggregator: "0x88E71E6520E5aC75f5338F5F0c9DeD9d4f692cDA", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.BIFI, - aggregator: "0xaB827b69daCd586A37E80A7d552a4395d576e645", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - // stables - { - symbol: assetSymbols.USDC, - aggregator: "0x51597f405303C4377E36123cBc172b13269EA163", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.USDT, - aggregator: "0xB97Ad0E74fa7d920791E90258A6E2085088b4320", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.TUSD, - aggregator: "0xa3334A9762090E827413A7495AfeCE76F41dFc06", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - // Jarvis - { - symbol: assetSymbols.jBRL, - aggregator: "0x5cb1Cb3eA5FB46de1CE1D0F3BaDB3212e8d8eF48", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.JEUR, - aggregator: "0x0bf79F617988C472DcA68ff41eFe1338955b9A80", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.BRZ, - aggregator: "0x5cb1Cb3eA5FB46de1CE1D0F3BaDB3212e8d8eF48", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.ALPACA, - aggregator: "0xe0073b60833249ffd1bb2af809112c2fbf221DF6", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.BNBx, - aggregator: "0xc4429B539397a3166eF3ef132c29e34715a3ABb4", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.FRAX, - aggregator: "0x13A9c98b07F098c5319f4FF786eB16E22DC738e1", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.RDNT, - aggregator: "0x20123C6ebd45c6496102BeEA86e1a6616Ca547c6", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - } -]; - -// TODO use these as funding and redemption strategies -// https://docs.ellipsis.finance/deployment-links -const curvePools: CurvePoolConfig[] = [ - { - // 3EPS - lpToken: underlying(assets, assetSymbols["3EPS"]), - pool: "0x160CAed03795365F3A589f10C379FfA7d75d4E76", - underlyings: [ - underlying(assets, assetSymbols.BUSD), - underlying(assets, assetSymbols.USDC), - underlying(assets, assetSymbols.USDT) - ] - }, - { - // 2BRL pool - lpToken: underlying(assets, assetSymbols["2brl"]), - pool: "0xad51e40D8f255dba1Ad08501D6B1a6ACb7C188f3", - underlyings: [underlying(assets, assetSymbols.jBRL), underlying(assets, assetSymbols.BRZ)] - } -]; - -const curveV2Pools: CurveV2PoolConfig[] = [ - { - // BNBx-BNB pool - lpToken: underlying(assets, assetSymbols["epsBNBx-BNB"]), - pool: "0xFD4afeAc39DA03a05f61844095A75c4fB7D766DA" - } -]; - -const wombatAssets: WombatAsset[] = [ - { - symbol: assetSymbols["WOMBATLP-WBNB"], - underlying: underlying(assets, assetSymbols["WOMBATLP-WBNB"]) - } -]; - -const algebraOracleTokens: Array = [ - { - assetAddress: underlying(assets, assetSymbols.THE), - poolAddress: "0x51Bd5e6d3da9064D59BcaA5A76776560aB42cEb8", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.WBNB) - } -]; - -const solidlyLps: SolidlyLpAsset[] = [ - { lpTokenAddress: underlying(assets, assetSymbols["sAMM-jBRL/BRZ"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["sAMM-HAY/BUSD"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["vAMM-ANKR/ankrBNB"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["vAMM-ANKR/HAY"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["sAMM-stkBNB/WBNB"]) } -]; - -const gammaLps: GammaLpAsset[] = [ - { - lpTokenAddress: underlying(assets, assetSymbols.aWBNB_STKBNB) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aWBNB_BTCB) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aWBNB_ETH) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aANKRBNB_ANKR_N) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aANKRBNB_ANKR_W) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aANKRBNB_RDNT_N) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aANKRBNB_RDNT_W) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aANKRBNB_THE_N) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aANKRBNB_THE_W) - } -]; - -const solidlyOracleSupportedStables: string[] = [ - deployConfig.stableToken!, - underlying(assets, assetSymbols.USDC), - underlying(assets, assetSymbols.ankrBNB), - underlying(assets, assetSymbols.FRAX), - underlying(assets, assetSymbols.BUSD) -]; - -const solidlyOracles: SolidlyOracleAssetConfig[] = [ - { - underlying: underlying(assets, assetSymbols.HAY), - poolAddress: "0x93B32a8dfE10e9196403dd111974E325219aec24", // sAMM-HAY-BUSD - baseToken: underlying(assets, assetSymbols.BUSD) - }, - { - underlying: underlying(assets, assetSymbols.ANKR), - poolAddress: "0x7ef540f672Cd643B79D2488344944499F7518b1f", // vAMM-ankrBNB-ANKR - baseToken: underlying(assets, assetSymbols.ankrBNB) - }, - { - underlying: underlying(assets, assetSymbols.MAI), - poolAddress: "0x49ad051F4263517BD7204f75123b7C11aF9Fd31C", // sAMM-MAI-FRAX - baseToken: underlying(assets, assetSymbols.FRAX) - }, - { - underlying: underlying(assets, assetSymbols.pSTAKE), - poolAddress: "0x67e51F1DE32318f3a27265287ed766839A62Cf13", // sAMM-BUSD-pSTAKE - baseToken: underlying(assets, assetSymbols.BUSD) - } -]; - -export const deploy = async ({ run, ethers, getNamedAccounts, deployments }: ChainDeployFnParams): Promise => { - const { deployer } = await getNamedAccounts(); - //// - //// ORACLES - //// ChainLinkV2 Oracle - await deployChainlinkOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - assets: assets, - chainlinkAssets - }); - - //// deploy algebra price oracle - await deployAlgebraPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - concentratedLiquidityOracleTokens: algebraOracleTokens - }); - - //// Uniswap Oracle - await deployUniswapOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig - }); - - //// Solidly Price Oracle - await deploySolidlyPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - supportedBaseTokens: solidlyOracleSupportedStables, - assets: solidlyOracles - }); - - // set Native BNB price - const mpo = await ethers.getContract("MasterPriceOracle", deployer); - const nativeBnb = underlying(assets, assetSymbols.BNB); - - const existingOracle = await mpo.callStatic.oracles(nativeBnb); - if (existingOracle === ethers.constants.AddressZero) { - const fpo = await ethers.getContract("FixedNativePriceOracle", deployer); - const tx = await mpo.add([nativeBnb], [fpo.address]); - await tx.wait(); - } - - //// Wombat Price Oracle - await deployWombatOracle({ - run, - ethers, - getNamedAccounts, - deployments, - wombatAssets - }); - - //// Uniswap LP Oracle - await deployUniswapLpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig - }); - - //// Solidly LP Oracle - await deploySolidlyLpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - solidlyLps - }); - - //// Gamma LP Oracle - await deployGammaPoolOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - gammaLps, - swap: GammaUnderlyingSwap.ALGEBRA - }); - - //// Curve LP Oracle - await deployCurveLpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - curvePools - }); - - //// Curve V2 LP Oracle - await deployCurveV2LpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - curveV2Pools - }); - - //// stk BNB oracle - await deployStkBNBOracle({ - run, - ethers, - getNamedAccounts, - deployments, - assets - }); - - // Ankr BNB Certificate oracle - await deployAnkrCertificateTokenPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - assets, - certificateAssetSymbol: assetSymbols.ankrBNB - }); - - //// Liquidator Redemption Strategies - const uniswapLpTokenLiquidator = await deployments.deploy("UniswapLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (uniswapLpTokenLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(uniswapLpTokenLiquidator.transactionHash); - } - console.log("UniswapLpTokenLiquidator: ", uniswapLpTokenLiquidator.address); - - const algebraSwapLiquidator = await deployments.deploy("AlgebraSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (algebraSwapLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(algebraSwapLiquidator.transactionHash); - } - console.log("AlgebraSwapLiquidator: ", algebraSwapLiquidator.address); - - const solidlyLiquidator = await deployments.deploy("SolidlySwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (solidlyLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(solidlyLiquidator.transactionHash); - } - console.log("SolidlySwapLiquidator: ", solidlyLiquidator.address); - - const solidlyLpTokenLiquidator = await deployments.deploy("SolidlyLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (solidlyLpTokenLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(solidlyLpTokenLiquidator.transactionHash); - } - console.log("SolidlyLpTokenLiquidator: ", solidlyLpTokenLiquidator.address); - - /// curve LP tokens - const curveLpTokenLiquidatorNoRegistry = await deployments.deploy("CurveLpTokenLiquidatorNoRegistry", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveLpTokenLiquidatorNoRegistry.transactionHash) - await ethers.provider.waitForTransaction(curveLpTokenLiquidatorNoRegistry.transactionHash); - console.log("CurveLpTokenLiquidatorNoRegistry: ", curveLpTokenLiquidatorNoRegistry.address); - - // curve swap underlying tokens - const curveSwapLiquidator = await deployments.deploy("CurveSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveSwapLiquidator.transactionHash) - await ethers.provider.waitForTransaction(curveSwapLiquidator.transactionHash); - console.log("CurveSwapLiquidator: ", curveSwapLiquidator.address); - - // CurveLpTokenWrapper - const curveLpTokenWrapper = await deployments.deploy("CurveLpTokenWrapper", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveLpTokenWrapper.transactionHash) - await ethers.provider.waitForTransaction(curveLpTokenWrapper.transactionHash); - console.log("CurveLpTokenWrapper: ", curveLpTokenWrapper.address); - - // wombat Lp token liquidator - const wombatLpTokenLiquidator = await deployments.deploy("WombatLpTokenLiquidator", { - from: deployer, - args: [], - log: true - }); - if (wombatLpTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(wombatLpTokenLiquidator.transactionHash); - console.log("WombatLpTokenLiquidator: ", wombatLpTokenLiquidator.address); - - // Gamma Algebra LP token liquidator - const gammaAlgebraLpTokenLiquidator = await deployments.deploy("GammaAlgebraLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (gammaAlgebraLpTokenLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(gammaAlgebraLpTokenLiquidator.transactionHash); - } - console.log("GammaAlgebraLpTokenLiquidator: ", gammaAlgebraLpTokenLiquidator.address); - - //// Liquidator Funding Strategies - - //// custom uniswap v2 redemptions and funding - const uniswapV2LiquidatorFunder = await deployments.deploy("UniswapV2LiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (uniswapV2LiquidatorFunder.transactionHash) { - await ethers.provider.waitForTransaction(uniswapV2LiquidatorFunder.transactionHash); - } - console.log("UniswapV2LiquidatorFunder: ", uniswapV2LiquidatorFunder.address); - - //// JarvisLiquidatorFunder - const jarvisLiquidatorFunder = await deployments.deploy("JarvisLiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (jarvisLiquidatorFunder.transactionHash) - await ethers.provider.waitForTransaction(jarvisLiquidatorFunder.transactionHash); - console.log("JarvisLiquidatorFunder: ", jarvisLiquidatorFunder.address); - - // curve swap liquidator funder - TODO replace the CurveSwapLiquidator above - const curveSwapLiquidatorFunder = await deployments.deploy("CurveSwapLiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveSwapLiquidatorFunder.transactionHash) - await ethers.provider.waitForTransaction(curveSwapLiquidatorFunder.transactionHash); - console.log("CurveSwapLiquidatorFunder: ", curveSwapLiquidatorFunder.address); - - //// deploy ankr bnb adjustable interest rate model - const abairm = await deployments.deploy("AdjustableAnkrBNBIrm", { - from: deployer, - args: [ - { - blocksPerYear: deployConfig.blocksPerYear, - multiplierPerYear: ethers.utils.parseEther("0.4").toString(), - jumpMultiplierPerYear: ethers.utils.parseEther("4").toString(), - kink: ethers.utils.parseEther("0.75").toString() - }, - { - day: 3, - rate_provider: "0xCb0006B31e6b403fEeEC257A8ABeE0817bEd7eBa", - abond: "0x52F24a5e03aee338Da5fd9Df68D2b6FAe1178827" - } - ], - log: true - }); - if (abairm.transactionHash) await ethers.provider.waitForTransaction(abairm.transactionHash); - console.log("AnkrBNBInterestRateModel: ", abairm.address); - - //// deploy ankr bnb interest rate model - const abirm = await deployments.deploy("AnkrBNBInterestRateModel", { - from: deployer, - args: [ - deployConfig.blocksPerYear, - ethers.utils.parseEther("0.005").toString(), - ethers.utils.parseEther("3").toString(), - ethers.utils.parseEther("0.8").toString(), - 3, - "0xCb0006B31e6b403fEeEC257A8ABeE0817bEd7eBa", - "0x52F24a5e03aee338Da5fd9Df68D2b6FAe1178827" - ], - log: true - }); - if (abirm.transactionHash) await ethers.provider.waitForTransaction(abirm.transactionHash); - console.log("AnkrBNBInterestRateModel: ", abirm.address); - - // Plugins & Rewards - const dynamicFlywheels = await deployFlywheelWithDynamicRewards({ - ethers, - getNamedAccounts, - deployments, - run, - deployConfig - }); - console.log("deployed dynamicFlywheels: ", dynamicFlywheels); - - /// Addresses Provider - set bUSD - const addressesProvider = (await ethers.getContract("AddressesProvider", deployer)) as AddressesProvider; - const busdAddress = underlying(assets, assetSymbols.BUSD); - const busdAddressAp = await addressesProvider.callStatic.getAddress("bUSD"); - if (busdAddressAp != busdAddress) { - const tx = await addressesProvider.setAddress("bUSD", busdAddress); - await tx.wait(); - console.log("setAddress bUSD: ", tx.hash); - } - - // set CurveLpTokenLiquidatorNoRegistry - const curveLpTokenLiquidatorNoRegistryAddress = await addressesProvider.callStatic.getAddress( - "CurveLpTokenLiquidatorNoRegistry" - ); - if (curveLpTokenLiquidatorNoRegistryAddress !== curveLpTokenLiquidatorNoRegistry.address) { - const tx = await addressesProvider.setAddress( - "CurveLpTokenLiquidatorNoRegistry", - curveLpTokenLiquidatorNoRegistry.address - ); - await tx.wait(); - console.log("setAddress CurveLpTokenLiquidatorNoRegistry: ", tx.hash); - } - - // set CurveSwapLiquidator - const curveSwapLiquidatorAddress = await addressesProvider.callStatic.getAddress("CurveSwapLiquidator"); - if (curveSwapLiquidatorAddress !== curveSwapLiquidator.address) { - const tx = await addressesProvider.setAddress("CurveSwapLiquidator", curveSwapLiquidator.address); - await tx.wait(); - console.log("setAddress CurveSwapLiquidator: ", tx.hash); - } - //// - - // update sd apeswap oracle factory - await run("oracle:deploy-apeswap-oracle"); -}; diff --git a/packages/sdk/chainDeploy/mainnets/ethereum.ts b/packages/sdk/chainDeploy/mainnets/ethereum.ts deleted file mode 100644 index 8389c9dd5..000000000 --- a/packages/sdk/chainDeploy/mainnets/ethereum.ts +++ /dev/null @@ -1,429 +0,0 @@ -import { ethereum } from "@ionicprotocol/chains"; -import { assetSymbols, ChainlinkFeedBaseCurrency, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { AddressesProvider } from "../../typechain/AddressesProvider"; -import { - ChainDeployConfig, - deployBalancerLinearPoolPriceOracle, - deployBalancerLpPriceOracle, - deployBalancerStableLpPriceOracle, - deployChainlinkOracle, - deployCurveV2Oracle, - deployDiaOracle, - deployErc4626PriceOracle, - deployFlywheelWithDynamicRewards, - deployUniswapV3Oracle, - deployWstEthOracle -} from "../helpers"; -import { - BalancerLinearPoolAsset, - BalancerLpAsset, - BalancerStableLpAsset, - ChainDeployFnParams, - ChainlinkAsset, - ConcentratedLiquidityOracleConfig, - CurveV2OracleConfig, - DiaAsset, - ERC4626Asset -} from "../helpers/types"; - -const assets = ethereum.assets; -const USDC = underlying(assets, assetSymbols.USDC); -const WETH = underlying(assets, assetSymbols.WETH); - -export const deployConfig: ChainDeployConfig = { - wtoken: WETH, - nativeTokenName: "Wrapped ETH", - nativeTokenSymbol: "ETH", - stableToken: USDC, - nativeTokenUsdChainlinkFeed: "0x5f4eC3Df9cbd43714FE2740f5E3616155c5b8419", - blocksPerYear: ethereum.specificParams.blocksPerYear.toNumber(), // 12 second blocks, 5 blocks per minute// 12 second blocks, 5 blocks per minute - uniswap: { - hardcoded: [], - uniswapData: [], - pairInitHashCode: ethers.utils.hexlify("0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"), - uniswapV2RouterAddress: "0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D", - uniswapV2FactoryAddress: "0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f", - uniswapV3FactoryAddress: "0x1F98431c8aD98523631AE4a59f267346ea31F984", - uniswapOracleInitialDeployTokens: [], - uniswapOracleLpTokens: [], - flashSwapFee: 30 - }, - dynamicFlywheels: [], - cgId: ethereum.specificParams.cgId -}; - -const chainlinkAssets: ChainlinkAsset[] = [ - { - symbol: assetSymbols.BAL, - aggregator: "0xdF2917806E30300537aEB49A7663062F4d1F2b5F", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.DAI, - aggregator: "0xAed0c38402a5d19df6E4c03F4E2DceD6e29c1ee9", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.FRAX, - aggregator: "0xB9E1E3A9feFf48998E45Fa90847ed4D467E8BcfD", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.USDC, - aggregator: "0x8fFfFfd4AfB6115b954Bd326cbe7B4BA576818f6", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.USDT, - aggregator: "0xEe9F2375b4bdF6387aa8265dD4FB8F16512A1d46", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.MIM, - aggregator: "0x7A364e8770418566e3eb2001A96116E6138Eb32F", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.OHM, - aggregator: "0x9a72298ae3886221820B1c878d12D872087D3a23", - feedBaseCurrency: ChainlinkFeedBaseCurrency.ETH - }, - { - symbol: assetSymbols.WBTC, - aggregator: "0xF4030086522a5bEEa4988F8cA5B36dbC97BeE88c", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.ANKR, - aggregator: "0x7eed379bf00005CfeD29feD4009669dE9Bcc21ce", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.stETH, - aggregator: "0xCfE54B5cD566aB89272946F602D76Ea879CAb4a8", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.rETH, - aggregator: "0x536218f9E9Eb48863970252233c8F271f554C2d0", - feedBaseCurrency: ChainlinkFeedBaseCurrency.ETH - }, - { - symbol: assetSymbols.cbETH, - aggregator: "0xF017fcB346A1885194689bA23Eff2fE6fA5C483b", - feedBaseCurrency: ChainlinkFeedBaseCurrency.ETH - } -]; - -const erc4626Assets: ERC4626Asset[] = [ - { - assetAddress: underlying(assets, assetSymbols.realYieldUSD) - }, - { - assetAddress: underlying(assets, assetSymbols.realYieldETH) - }, - { - assetAddress: underlying(assets, assetSymbols.ethBtcTrend) - } -]; - -const uniswapV3OracleTokens: Array = [ - { - assetAddress: underlying(assets, assetSymbols.PAR), - poolAddress: "0xD7Dcb0eb6AaB643b85ba74cf9997c840fE32e695", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: USDC - }, - { - assetAddress: underlying(assets, assetSymbols.GOHM), - poolAddress: "0xcF7e21b96a7DAe8e1663b5A266FD812CBE973E70", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: USDC - }, - { - assetAddress: underlying(assets, assetSymbols.frxETH), - poolAddress: "0x8a15b2Dc9c4f295DCEbB0E7887DD25980088fDCB", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: WETH - } -]; - -const diaAssets: DiaAsset[] = [ - { - symbol: assetSymbols.swETH, - underlying: underlying(assets, assetSymbols.swETH), - feed: "0xf5cECAc781d91b99db6935E975097F552786b7C3", - key: "swETH/USD" - } -]; - -const balancerStableLpAssets: BalancerStableLpAsset[] = [ - { - lpTokenAddress: underlying(assets, assetSymbols.WSTETH_WETH_STABLE_BPT) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.WSTETH_RETH_FRXETH_STABLE_BPT) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.WBETH_WSTETH_STABLE_BPT) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.WSTETH_CBETH_STABLE_BPT) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.AAVE_BOOSTED_STABLE_BPT) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.SWETH_BBA_WETH_BPT) - } -]; - -const balancerLinerPoolAssets: BalancerLinearPoolAsset[] = [ - { - lpTokenAddress: underlying(assets, assetSymbols.AAVE_LINEAR_DAI) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.AAVE_LINEAR_USDC) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.AAVE_LINEAR_USDT) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.AAVE_LINEAR_WETH) - } -]; - -const balancerLpAssets: BalancerLpAsset[] = [ - { - lpTokenAddress: underlying(assets, assetSymbols.OHM50_DAI50_BPT) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.OHM50_WETH50_BPT) - } -]; - -const curveV2OraclePools: CurveV2OracleConfig[] = [ - { - token: underlying(assets, assetSymbols.eUSD), - pool: "0x880F2fB3704f1875361DE6ee59629c6c6497a5E3" - }, - { - token: underlying(assets, assetSymbols.frxETH), - pool: "0xa1F8A6807c402E4A15ef4EBa36528A3FED24E577" - } -]; - -export const deploy = async ({ run, ethers, getNamedAccounts, deployments }: ChainDeployFnParams): Promise => { - const { deployer } = await getNamedAccounts(); - - //// ORACLES - - //// ChainLinkV2 Oracle - await deployChainlinkOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - assets: assets, - chainlinkAssets - }); - - /// WstEth Oracle - await deployWstEthOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - assets - }); - - //// deploy Curve V2 price oracle - await deployCurveV2Oracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - curveV2OraclePools - }); - - //// deploy uniswap v3 price oracle - await deployUniswapV3Oracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - concentratedLiquidityOracleTokens: uniswapV3OracleTokens - }); - - /// Dia Price Oracle - await deployDiaOracle({ - run, - ethers, - getNamedAccounts, - deployments, - diaAssets, - deployConfig, - diaNativeFeed: { feed: "0xf5cECAc781d91b99db6935E975097F552786b7C3", key: "ETH/USD" } - }); - - // ERC4626 Oracle - await deployErc4626PriceOracle({ run, ethers, getNamedAccounts, deployments, erc4626Assets }); - - /// Balancer Stable LP Price Oracle - await deployBalancerLinearPoolPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - balancerLinerPoolAssets - }); - - /// Balancer LP Price Oracle - await deployBalancerLpPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - balancerLpAssets - }); - - /// Balancer Stable LP Price Oracle - await deployBalancerStableLpPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - balancerLpAssets: balancerStableLpAssets - }); - - // Quoter - const quoter = await deployments.deploy("Quoter", { - from: deployer, - args: [deployConfig.uniswap.uniswapV3FactoryAddress], - log: true, - waitConfirmations: 1 - }); - console.log("Quoter: ", quoter.address); - - // Liquidators - - //// ERC4626Liquidator - const erc4626TokenLiquidator = await deployments.deploy("ERC4626Liquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (erc4626TokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(erc4626TokenLiquidator.transactionHash); - console.log("ERC4626Liquidator: ", erc4626TokenLiquidator.address); - - //// - - // Plugins & Rewards - const dynamicFlywheels = await deployFlywheelWithDynamicRewards({ - ethers, - getNamedAccounts, - deployments, - run, - deployConfig - }); - - console.log("deployed dynamicFlywheels: ", dynamicFlywheels); - - //// Liquidator Redemption Strategies - - //// UniswapLpTokenLiquidator - //// Balancer Lp token liquidator - const balancerLpTokenLiquidator = await deployments.deploy("BalancerLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (balancerLpTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(balancerLpTokenLiquidator.transactionHash); - console.log("BalancerLpTokenLiquidator: ", balancerLpTokenLiquidator.address); - - //// Balancer Swap token liquidator - const balancerSwapTokenLiquidator = await deployments.deploy("BalancerSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (balancerSwapTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(balancerSwapTokenLiquidator.transactionHash); - console.log("BalancerSwapLiquidator: ", balancerSwapTokenLiquidator.address); - - //// CurveLPLiquidator - const curveLpTokenLiquidatorNoRegistry = await deployments.deploy("CurveLpTokenLiquidatorNoRegistry", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveLpTokenLiquidatorNoRegistry.transactionHash) - await ethers.provider.waitForTransaction(curveLpTokenLiquidatorNoRegistry.transactionHash); - console.log("CurveLpTokenLiquidatorNoRegistry: ", curveLpTokenLiquidatorNoRegistry.address); - - // UniswapV3Liquidator - const uniswapV3Liquidator = await deployments.deploy("UniswapV3Liquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (uniswapV3Liquidator.transactionHash) - await ethers.provider.waitForTransaction(uniswapV3Liquidator.transactionHash); - console.log("UniswapV3Liquidator: ", uniswapV3Liquidator.address); - - // curve swap liquidator funder - TODO replace the CurveSwapLiquidator above - const curveSwapLiquidatorFunder = await deployments.deploy("CurveSwapLiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveSwapLiquidatorFunder.transactionHash) - await ethers.provider.waitForTransaction(curveSwapLiquidatorFunder.transactionHash); - console.log("CurveSwapLiquidatorFunder: ", curveSwapLiquidatorFunder.address); - - //// Uniswap V3 Liquidator Funder - const uniswapV3LiquidatorFunder = await deployments.deploy("UniswapV3LiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - console.log("UniswapV3LiquidatorFunder: ", uniswapV3LiquidatorFunder.address); - - /// Addresses Provider - const addressesProvider = (await ethers.getContract("AddressesProvider", deployer)) as AddressesProvider; - /// set BalancerLpStablePoolPriceOracle - const balancerLpStablePoolPriceOracle = await ethers.getContractOrNull("BalancerLpStablePoolPriceOracle", deployer); - const balancerLpStablePoolPriceOracleAp = await addressesProvider.callStatic.getAddress( - "BalancerLpStablePoolPriceOracle" - ); - if ( - balancerLpStablePoolPriceOracle && - balancerLpStablePoolPriceOracleAp !== balancerLpStablePoolPriceOracle.address - ) { - const tx = await addressesProvider.setAddress( - "BalancerLpStablePoolPriceOracle", - balancerLpStablePoolPriceOracle.address - ); - console.log("setAddress BalancerLpStablePoolPriceOracle: ", tx.hash); - await tx.wait(); - console.log("mined setAddress BalancerLpStablePoolPriceOracle: ", tx.hash); - } -}; diff --git a/packages/sdk/chainDeploy/mainnets/linea.ts b/packages/sdk/chainDeploy/mainnets/linea.ts deleted file mode 100644 index f41beb730..000000000 --- a/packages/sdk/chainDeploy/mainnets/linea.ts +++ /dev/null @@ -1,108 +0,0 @@ -import { linea } from "@ionicprotocol/chains"; -import { assetSymbols, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { ChainDeployConfig, deployKyberSwapPriceOracle, deployUmbrellaOracle } from "../helpers"; -import { ConcentratedLiquidityOracleConfig, UmbrellaAsset } from "../helpers/types"; - -const assets = linea.assets; - -export const deployConfig: ChainDeployConfig = { - wtoken: linea.chainAddresses.W_TOKEN, - nativeTokenUsdChainlinkFeed: "", - nativeTokenName: "Linea", - nativeTokenSymbol: "ETH", - stableToken: linea.chainAddresses.STABLE_TOKEN, - wBTCToken: linea.chainAddresses.W_BTC_TOKEN, - blocksPerYear: linea.specificParams.blocksPerYear.toNumber(), - uniswap: { - hardcoded: [], - uniswapData: [], - pairInitHashCode: ethers.utils.hexlify("0x1f475d88284b09799561ca05d87dc757c1ff4a9f48983cdb84d1dd6e209d3ae2"), - uniswapV2RouterAddress: "0xbdFa4a05372a10172EeEB75075c85FCbff521625", - uniswapV2FactoryAddress: "", - uniswapV3FactoryAddress: "0x865412B6cDf424bE36088fE3DeC2A072a26Cc494", - uniswapOracleLpTokens: [], - uniswapOracleInitialDeployTokens: [], - flashSwapFee: 30 - }, - cgId: linea.specificParams.cgId -}; - -const umbrellaAssets: UmbrellaAsset[] = [ - { - underlying: underlying(assets, assetSymbols.USDC), - feed: "USDC-USD" - }, - { - underlying: underlying(assets, assetSymbols.WETH), - feed: "ETH-USD" - }, - { - underlying: underlying(assets, assetSymbols.WBTC), - feed: "WBTC-USD" - }, - { - underlying: underlying(assets, assetSymbols.USDT), - feed: "USDT-USD" - } -]; - -const kyberSwapOracleTokens: Array = [ - { - assetAddress: underlying(assets, assetSymbols.DAI), - poolAddress: "0xB6E91bA27bB6C3b2ADC31884459D3653F9293e33", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.USDC) - } -]; - -// const pythAssets: PythAsset[] = [ -// { -// underlying: underlying(assets, assetSymbols.BUSD), -// feed: "0x5bc91f13e412c07599167bae86f07543f076a638962b8d6017ec19dab4a82814" -// }, -// { -// underlying: underlying(assets, assetSymbols.WBNB), -// feed: "0x2f95862b045670cd22bee3114c39763a4a08beeb663b145d283c31d7d1101c4f" -// }, -// { -// underlying: underlying(assets, assetSymbols.WMATIC), -// feed: "0x5de33a9112c2b700b8d30b8a3402c103578ccfa2765696471cc672bd5cf6ac52" -// } -// ]; - -export const deploy = async ({ run, ethers, getNamedAccounts, deployments }): Promise => { - const { deployer } = await getNamedAccounts(); - await deployUmbrellaOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - umbrellaAssets, - nativeUsdFeed: "ETH-USD", - registryAddress: "0x1B17DBB40fbED8735E7fE8C9eB02C20984fAdfD6" - }); - - //// deploy algebra price oracle - await deployKyberSwapPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - concentratedLiquidityOracleTokens: kyberSwapOracleTokens - }); - // await deployPythPriceOracle({ - // run, - // ethers, - // getNamedAccounts, - // deployments, - // deployConfig, - // pythAssets, - // pythAddress: "0xA2aa501b19aff244D90cc15a4Cf739D2725B5729", - // nativeTokenUsdFeed: "0x", - // usdToken: underlying(assets, assetSymbols.USDC) - // }); -}; diff --git a/packages/sdk/chainDeploy/mainnets/neon.ts b/packages/sdk/chainDeploy/mainnets/neon.ts deleted file mode 100644 index df636621d..000000000 --- a/packages/sdk/chainDeploy/mainnets/neon.ts +++ /dev/null @@ -1,118 +0,0 @@ -import { neon } from "@ionicprotocol/chains"; -import { assetSymbols, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { ChainDeployConfig, ChainlinkFeedBaseCurrency, deployChainlinkOracle } from "../helpers"; -import { getCgPrice } from "../helpers/getCgPrice"; -import { ChainlinkAsset } from "../helpers/types"; - -const assets = neon.assets; -const BN = ethers.utils.parseEther("1"); - -export const deployConfig: ChainDeployConfig = { - wtoken: neon.chainAddresses.W_TOKEN, - nativeTokenUsdChainlinkFeed: ethers.constants.AddressZero, - nativeTokenName: "Neon", - nativeTokenSymbol: "NEON", - stableToken: neon.chainAddresses.STABLE_TOKEN, - wBTCToken: neon.chainAddresses.W_BTC_TOKEN, - blocksPerYear: neon.specificParams.blocksPerYear.toNumber(), - uniswap: { - hardcoded: [], - uniswapData: [], - pairInitHashCode: neon.chainAddresses.PAIR_INIT_HASH, - uniswapV2RouterAddress: neon.chainAddresses.UNISWAP_V2_ROUTER, - uniswapV2FactoryAddress: neon.chainAddresses.UNISWAP_V2_FACTORY, - uniswapOracleLpTokens: [], - uniswapOracleInitialDeployTokens: [], - flashSwapFee: 30 - }, - cgId: neon.specificParams.cgId -}; - -const chainlinkAssets: ChainlinkAsset[] = [ - // - { - symbol: assetSymbols.WETH, - aggregator: "0xC55B1E0c36A69e2b40BD16759434B071F4bBe8df", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.WBTC, - aggregator: "0x002A8368a4fd76C1809765ea66a9AFa3D424d8e0", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.SOL, - aggregator: "0x76721563EC3CF5fB94737Eb583F38f3cD166C7Bb", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.USDT, - aggregator: "0xba92eACD3fb46661E130577cD03fa32E6D4D757a", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - } -]; - -// const pythAssets: PythAsset[] = [ -// { -// underlying: underlying(assets, assetSymbols.USDC), -// feed: "0xeaa020c61cc479712813461ce153894a96a6c00b21ed0cfc2798d1f9a9e9c94a" -// }, -// { -// underlying: underlying(assets, assetSymbols.WETH), -// feed: "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace" -// }, -// { -// underlying: underlying(assets, assetSymbols.WBTC), -// feed: "0xe62df6c8b4a85fe1a67db44dc12de5db330f7ac66b72dc658afedf0f4a415b43" -// } -// ]; - -export const deploy = async ({ run, ethers, getNamedAccounts, deployments }): Promise => { - const { deployer } = await getNamedAccounts(); - - const cgPrice = await getCgPrice(deployConfig.cgId); - const masterPriceOracle = await ethers.getContract("MasterPriceOracle", deployer); - const simplePriceOracle = await ethers.getContract("SimplePriceOracle", deployer); - let tx; - - const NEON_FIXED_PRICE_USD_BN = ethers.utils.parseEther(cgPrice.toString()); - console.log(NEON_FIXED_PRICE_USD_BN.toString()); - - tx = await simplePriceOracle.setDirectPrice( - underlying(assets, assetSymbols.USDC), - BN.mul(1).mul(BN).div(NEON_FIXED_PRICE_USD_BN) - ); - console.log(`setDirectPrice ${assetSymbols.USDC}`, tx.hash); - await tx.wait(); - console.log(`setDirectPrice ${assetSymbols.USDC} mined`, tx.hash); - - tx = await masterPriceOracle.add([underlying(assets, assetSymbols.USDC)], [simplePriceOracle.address]); - await tx.wait(); - - console.log(`add ${assetSymbols.USDC} mined`, tx.hash); - - // await deployPythPriceOracle({ - // run, - // ethers, - // getNamedAccounts, - // deployments, - // deployConfig, - // pythAssets, - // pythAddress: "0x7f2dB085eFC3560AFF33865dD727225d91B4f9A5", - // nativeTokenUsdFeed: "0x", - // usdToken: underlying(assets, assetSymbols.USDC) - // }); - - //// ChainLinkV2 Oracle - await deployChainlinkOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - assets: assets, - chainlinkAssets - }); -}; diff --git a/packages/sdk/chainDeploy/mainnets/polygon.ts b/packages/sdk/chainDeploy/mainnets/polygon.ts deleted file mode 100644 index 3cd1a545c..000000000 --- a/packages/sdk/chainDeploy/mainnets/polygon.ts +++ /dev/null @@ -1,943 +0,0 @@ -import { polygon } from "@ionicprotocol/chains"; -import { assetSymbols, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { AddressesProvider } from "../../typechain/AddressesProvider"; -import { - ChainDeployConfig, - ChainlinkFeedBaseCurrency, - configureBalancerSwap, - deployAlgebraPriceOracle, - deployAnkrCertificateTokenPriceOracle, - deployBalancerLinearPoolPriceOracle, - deployBalancerLpPriceOracle, - deployBalancerRateProviderPriceOracle, - deployBalancerStableLpPriceOracle, - deployChainlinkOracle, - deployCurveLpOracle, - deployDiaOracle, - deployGammaPoolOracle, - deployGelatoGUniPriceOracle, - deploySolidlyLpOracle, - deploySolidlyPriceOracle, - deployUniswapLpOracle, - deployUniswapV3Oracle -} from "../helpers"; -import { deployFlywheelWithDynamicRewards } from "../helpers/dynamicFlywheels"; -import { - BalancerLinearPoolAsset, - BalancerLpAsset, - BalancerRateProviderAsset, - BalancerStableLpAsset, - BalancerSwapTokenLiquidatorData, - ChainDeployFnParams, - ChainlinkAsset, - ConcentratedLiquidityOracleConfig, - CurvePoolConfig, - DiaAsset, - GammaLpAsset, - GammaUnderlyingSwap, - GelatoGUniAsset, - SolidlyLpAsset, - SolidlyOracleAssetConfig -} from "../helpers/types"; - -const assets = polygon.assets; - -export const deployConfig: ChainDeployConfig = { - wtoken: polygon.chainAddresses.W_TOKEN, - nativeTokenUsdChainlinkFeed: "0xAB594600376Ec9fD91F8e885dADF0CE036862dE0", - nativeTokenName: "Matic Token", - nativeTokenSymbol: "MATIC", - stableToken: polygon.chainAddresses.STABLE_TOKEN, - wBTCToken: polygon.chainAddresses.W_BTC_TOKEN, - blocksPerYear: polygon.specificParams.blocksPerYear.toNumber(), - uniswap: { - hardcoded: [], - uniswapData: [ - { - lpDisplayName: "Uniswap", - lpName: "Uniswap LPs", - lpSymbol: "UNI-LP" - }, - { - lpDisplayName: "SushiSwap", - lpName: "SushiSwap LPs", - lpSymbol: "SUSHI-LP" - }, - { - lpDisplayName: "QuickSwap", - lpName: "QuickSwap LPs", - lpSymbol: "QUICK-LP" - } - ], - - // quickswap - pairInitHashCode: ethers.utils.hexlify("0x96e8ac4277198ff8b6f785478aa9a39f403cb768dd02cbee326c3e7da348845f"), - uniswapV2RouterAddress: "0xa5E0829CaCEd8fFDD4De3c43696c57F7D7A678ff", - uniswapV2FactoryAddress: "0x5757371414417b8C6CAad45bAeF941aBc7d3Ab32", - uniswapV3FactoryAddress: "0x1F98431c8aD98523631AE4a59f267346ea31F984", - uniswapOracleInitialDeployTokens: [], - uniswapOracleLpTokens: [ - underlying(assets, assetSymbols["WMATIC-USDC"]), - underlying(assets, assetSymbols["WMATIC-ETH"]), - underlying(assets, assetSymbols["WMATIC-USDT"]), - underlying(assets, assetSymbols["WETH-WBTC"]), - underlying(assets, assetSymbols["MAI-USDC"]), - underlying(assets, assetSymbols["WMATIC-MATICx"]), - underlying(assets, assetSymbols["DAI-GNS"]), - underlying(assets, assetSymbols["IXT-USDT"]) - ], - flashSwapFee: 30 - }, - dynamicFlywheels: [ - { - rewardToken: "0xADAC33f543267c4D59a8c299cF804c303BC3e4aC", - cycleLength: 1, - name: "MIMO" - } - ], - cgId: polygon.specificParams.cgId -}; - -const uniswapV3OracleTokens: Array = [ - { - assetAddress: underlying(assets, assetSymbols.GNS), - poolAddress: "0xEFa98Fdf168f372E5e9e9b910FcDfd65856f3986", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.WMATIC) - }, - { - assetAddress: underlying(assets, assetSymbols.TNGBL), - poolAddress: "0xDC8a5c5975726235402cFac9B28268EEccd42813", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.DAI) - }, - { - assetAddress: underlying(assets, assetSymbols.CASH), - poolAddress: "0x619259F699839dD1498FFC22297044462483bD27", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.USDC) - } -]; - -const algebraOracleTokens: Array = [ - { - assetAddress: underlying(assets, assetSymbols.IXT), - poolAddress: "0xD6e486c197606559946384AE2624367d750A160f", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.USDT) - }, - { - assetAddress: underlying(assets, assetSymbols.SD), - poolAddress: "0x5D0aCfa39A0FCA603147f1c14e53f46BE76984BC", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.USDC) - }, - { - assetAddress: underlying(assets, assetSymbols.DUSD), - poolAddress: "0xfb0bc232CD11dBe804B489860c470B7f9cc80D9F", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.USDC) - } -]; - -const chainlinkAssets: ChainlinkAsset[] = [ - // - { - symbol: assetSymbols.AAVE, - aggregator: "0x72484B12719E23115761D5DA1646945632979bB6", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.ALCX, - aggregator: "0x5DB6e61B6159B20F068dc15A47dF2E5931b14f29", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.BAL, - aggregator: "0xD106B538F2A868c28Ca1Ec7E298C3325E0251d66", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.oBNB, - aggregator: "0x82a6c4AF830caa6c97bb504425f6A66165C2c26e", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.BUSD, - aggregator: "0xE0dC07D5ED74741CeeDA61284eE56a2A0f7A4Cc9", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.CRV, - aggregator: "0x336584C8E6Dc19637A5b36206B1c79923111b405", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.CVX, - aggregator: "0x5ec151834040B4D453A1eA46aA634C1773b36084", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.DAI, - aggregator: "0x4746DeC9e833A82EC7C2C1356372CcF2cfcD2F3D", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.WETH, - aggregator: "0xF9680D99D6C9589e2a93a78A04A279e509205945", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.FRAX, - aggregator: "0x00DBeB1e45485d53DF7C2F0dF1Aa0b6Dc30311d3", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.FTM, - aggregator: "0x58326c0F831b2Dbf7234A4204F28Bba79AA06d5f", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.FXS, - aggregator: "0x6C0fe985D3cAcbCdE428b84fc9431792694d0f51", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.GHST, - aggregator: "0xDD229Ce42f11D8Ee7fFf29bDB71C7b81352e11be", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.LINK, - aggregator: "0xd9FFdb71EbE7496cC440152d43986Aae0AB76665", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.MAI, - aggregator: "0xd8d483d813547CfB624b8Dc33a00F2fcbCd2D428", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.MATICx, - aggregator: "0x5d37E4b374E6907de8Fc7fb33EE3b0af403C7403", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.MKR, - aggregator: "0xa070427bF5bA5709f70e98b94Cb2F435a242C46C", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.RAI, - aggregator: "0x7f45273fD7C644714825345670414Ea649b50b16", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.SNX, - aggregator: "0xbF90A5D9B6EE9019028dbFc2a9E50056d5252894", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.SOL, - aggregator: "0x10C8264C0935b3B9870013e057f330Ff3e9C56dC", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.stMATIC, - aggregator: "0x97371dF4492605486e23Da797fA68e55Fc38a13f", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.USDC, - aggregator: "0xfE4A8cc5b5B2366C1B58Bea3858e81843581b2F7", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.USDT, - aggregator: "0x0A6513e40db6EB1b165753AD52E80663aeA50545", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.WBTC, - aggregator: "0xDE31F8bFBD8c84b5360CFACCa3539B938dd78ae6", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.AGEUR, - aggregator: "0x9b88d07B2354eF5f4579690356818e07371c7BeD", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.JEUR, - aggregator: "0x73366Fe0AA0Ded304479862808e02506FE556a98", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.EURT, - aggregator: "0x73366Fe0AA0Ded304479862808e02506FE556a98", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.EURE, - aggregator: "0x73366Fe0AA0Ded304479862808e02506FE556a98", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.jBRL, - aggregator: "0xB90DA3ff54C3ED09115abf6FbA0Ff4645586af2c", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: assetSymbols.BRZ, - aggregator: "0xB90DA3ff54C3ED09115abf6FbA0Ff4645586af2c", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - } -]; - -// https://polygon.curve.fi/ -const curvePools: CurvePoolConfig[] = [ - { - lpToken: underlying(assets, assetSymbols["JEUR-PAR"]), - pool: "0x0f110c55EfE62c16D553A3d3464B77e1853d0e97", - underlyings: [underlying(assets, assetSymbols.PAR), underlying(assets, assetSymbols.JEUR)] - }, - { - lpToken: underlying(assets, assetSymbols.am3CRV), - pool: "0x445FE580eF8d70FF569aB36e80c647af338db351", - underlyings: [ - underlying(assets, assetSymbols.DAI), - underlying(assets, assetSymbols.USDC), - underlying(assets, assetSymbols.USDT) - ] - } -]; - -const gelatoAssets: GelatoGUniAsset[] = [ - { - // USDC/WETH - vaultAddress: underlying(assets, assetSymbols.arrakis_USDC_WETH_005) - }, - { - // WBTC/WETH - vaultAddress: underlying(assets, assetSymbols.arrakis_WBTC_WETH_005) - }, - { - // USDC/PAR - vaultAddress: underlying(assets, assetSymbols.arrakis_USDC_PAR_005) - }, - { - // WMATIC/USDC - vaultAddress: underlying(assets, assetSymbols.arrakis_WMATIC_USDC_005) - }, - { - // USDC/agEUR - vaultAddress: underlying(assets, assetSymbols.arrakis_USDC_agEUR_001) - }, - { - // WMATIC/WETH - vaultAddress: underlying(assets, assetSymbols.arrakis_WMATIC_WETH_005) - }, - { - // WMATIC/AAVE - vaultAddress: underlying(assets, assetSymbols.arrakis_WMATIC_AAVE_03) - }, - { - // USDC/MAI - vaultAddress: underlying(assets, assetSymbols.arrakis_USDC_MAI_005) - }, - { - // USDC/USDT 0.01 % fee tier - vaultAddress: underlying(assets, assetSymbols.arrakis_USDC_USDT_001) - }, - { - // USDC/USDT 0.05 % fee tier - vaultAddress: underlying(assets, assetSymbols.arrakis_USDC_USDT_005) - }, - { - // USDC/DAI - vaultAddress: underlying(assets, assetSymbols.arrakis_USDC_DAI_005) - }, - { - // WETH/DAI - vaultAddress: underlying(assets, assetSymbols.arrakis_WETH_DAI_03) - } -]; - -const diaAssets: DiaAsset[] = [ - { - symbol: assetSymbols.MIMO, - underlying: underlying(assets, assetSymbols.MIMO), - feed: "0xd3709072C338689F94a4072a26Bb993559D9a026", - key: "MIMO/USD" - }, - { - symbol: assetSymbols.PAR, - underlying: underlying(assets, assetSymbols.PAR), - feed: "0xd3709072C338689F94a4072a26Bb993559D9a026", - key: "PAR/USD" - }, - { - symbol: assetSymbols.USDR, - underlying: underlying(assets, assetSymbols.USDR), - feed: "0x763F20F3Fcdd30e11EF633A70B4396B91C149189", - key: "USDR/USD" - } -]; - -const balancerLpAssets: BalancerLpAsset[] = [ - { - lpTokenAddress: underlying(assets, assetSymbols.MIMO_PAR_80_20) - } -]; - -const balancerStableLpAssets: BalancerStableLpAsset[] = [ - { - lpTokenAddress: underlying(assets, assetSymbols.BRZ_JBRL_STABLE_BLP) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.WMATIC_STMATIC_STABLE_BLP) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.WMATIC_CSMATIC_STABLE_BLP) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.WMATIC_MATICX_STABLE_BLP) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.TETU_BOOSTED_STABLE_BLP) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.MaticX_bbaWMATIC) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.StMatic_bbaWMATIC) - } -]; - -const balancerLinerPoolAssets: BalancerLinearPoolAsset[] = [ - { - lpTokenAddress: underlying(assets, assetSymbols.TETU_LINEAR_USDT) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.TETU_LINEAR_USDC) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.TETU_LINEAR_DAI) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC) - } -]; - -const balancerRateProviderAssets: BalancerRateProviderAsset[] = [ - { - tokenAddress: underlying(assets, assetSymbols.csMATIC), - baseToken: underlying(assets, assetSymbols.WMATIC), - rateProviderAddress: "0x87393BE8ac323F2E63520A6184e5A8A9CC9fC051" - } -]; - -const solidlyLps: SolidlyLpAsset[] = [ - { lpTokenAddress: underlying(assets, assetSymbols["sAMM-USDC/USDR"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["vAMM-wUSDR/USDR"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["vAMM-MATIC/USDR"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["sAMM-DAI/USDR"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["vAMM-TNGBL/USDR"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["vAMM-WBTC/USDR"]) }, - { lpTokenAddress: underlying(assets, assetSymbols["vAMM-WETH/USDR"]) } -]; - -const solidlyOracleSupportedStables: string[] = [ - deployConfig.stableToken!, - underlying(assets, assetSymbols.USDC), - underlying(assets, assetSymbols.USDR) -]; - -const solidlyOracles: SolidlyOracleAssetConfig[] = [ - { - underlying: underlying(assets, assetSymbols.WUSDR), - poolAddress: underlying(assets, assetSymbols["vAMM-wUSDR/USDR"]), // vAMM-wUSDR-USDR - baseToken: underlying(assets, assetSymbols.USDR) - } -]; - -const balancerSwapLiquidatorData: BalancerSwapTokenLiquidatorData[] = [ - { - inputToken: underlying(assets, assetSymbols.TETU_LINEAR_USDC), - outputToken: underlying(assets, assetSymbols.USDC), - poolAddress: underlying(assets, assetSymbols.TETU_LINEAR_USDC) - }, - { - inputToken: underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC), - outputToken: underlying(assets, assetSymbols.WMATIC), - poolAddress: underlying(assets, assetSymbols.AAVE_LINEAR_WMATIC) - }, - { - inputToken: underlying(assets, assetSymbols.MATICx), - outputToken: underlying(assets, assetSymbols.MaticX_bbaWMATIC), - poolAddress: underlying(assets, assetSymbols.MaticX_bbaWMATIC) - }, - { - inputToken: underlying(assets, assetSymbols.MaticX_bbaWMATIC), - outputToken: underlying(assets, assetSymbols.MATICx), - poolAddress: underlying(assets, assetSymbols.MaticX_bbaWMATIC) - }, - { - inputToken: underlying(assets, assetSymbols.PAR), - outputToken: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP), - poolAddress: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP) - }, - { - inputToken: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP), - outputToken: underlying(assets, assetSymbols.PAR), - poolAddress: underlying(assets, assetSymbols.JEUR_PAR_STABLE_BLP) - }, - { - inputToken: underlying(assets, assetSymbols.MATICx), - outputToken: underlying(assets, assetSymbols.WMATIC), - poolAddress: underlying(assets, assetSymbols.WMATIC_MATICX_STABLE_BLP) - }, - { - inputToken: underlying(assets, assetSymbols.WMATIC), - outputToken: underlying(assets, assetSymbols.MATICx), - poolAddress: underlying(assets, assetSymbols.WMATIC_MATICX_STABLE_BLP) - }, - { - inputToken: underlying(assets, assetSymbols.stMATIC), - outputToken: underlying(assets, assetSymbols.WMATIC), - poolAddress: underlying(assets, assetSymbols.WMATIC_STMATIC_STABLE_BLP) - }, - { - inputToken: underlying(assets, assetSymbols.WMATIC), - outputToken: underlying(assets, assetSymbols.stMATIC), - poolAddress: underlying(assets, assetSymbols.WMATIC_STMATIC_STABLE_BLP) - } -]; - -// retro ALM -const gammaLps: GammaLpAsset[] = [ - { - lpTokenAddress: underlying(assets, assetSymbols.aUSDC_CASH_N) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aUSDC_WETH_N) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aWMATIC_MATICX_N) - }, - { - lpTokenAddress: underlying(assets, assetSymbols.aWBTC_WETH_N) - } -]; - -export const deploy = async ({ run, ethers, getNamedAccounts, deployments }: ChainDeployFnParams): Promise => { - const { deployer } = await getNamedAccounts(); - //// - //// ORACLES - - //// Gamma Uniswap LP Oracle - await deployGammaPoolOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - gammaLps, - swap: GammaUnderlyingSwap.UNISWAP - }); - - //// Solidly Price Oracle - await deploySolidlyPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - supportedBaseTokens: solidlyOracleSupportedStables, - assets: solidlyOracles - }); - - //// deploy uniswap v3 price oracle - await deployUniswapV3Oracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - concentratedLiquidityOracleTokens: uniswapV3OracleTokens - }); - - //// deploy algebra price oracle - await deployAlgebraPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - concentratedLiquidityOracleTokens: algebraOracleTokens - }); - - //// ChainLinkV2 Oracle - await deployChainlinkOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - assets: assets, - chainlinkAssets - }); - //// - - //// Uniswap LP Oracle - await deployUniswapLpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig - }); - - //// Curve LP Oracle - await deployCurveLpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - curvePools - }); - - //// Gelato GUni Oracle - await deployGelatoGUniPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - gelatoAssets - }); - - /// Dia Price Oracle - await deployDiaOracle({ - run, - ethers, - getNamedAccounts, - deployments, - diaAssets, - deployConfig, - diaNativeFeed: { feed: ethers.constants.AddressZero, key: "" } - }); - - /// Balancer LP Price Oracle - await deployBalancerLpPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - balancerLpAssets - }); - - /// Balancer LP Price Oracle - await deployBalancerRateProviderPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - balancerRateProviderAssets - }); - /// Balancer Stable LP Price Oracle - await deployBalancerLinearPoolPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - balancerLinerPoolAssets - }); - - /// Balancer Stable LP Price Oracle - await deployBalancerStableLpPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - balancerLpAssets: balancerStableLpAssets - }); - - /// Ankr Certificate Price Oracle - await deployAnkrCertificateTokenPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - assets, - certificateAssetSymbol: assetSymbols.aMATICc - }); - - //// Solidly LP Oracle - await deploySolidlyLpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - solidlyLps - }); - - // Plugins & Rewards - const dynamicFlywheels = await deployFlywheelWithDynamicRewards({ - ethers, - getNamedAccounts, - deployments, - run, - deployConfig - }); - console.log("deployed dynamicFlywheels: ", dynamicFlywheels); - - // Quoter - const quoter = await deployments.deploy("Quoter", { - from: deployer, - args: [deployConfig.uniswap.uniswapV3FactoryAddress], - log: true, - waitConfirmations: 1 - }); - console.log("Quoter: ", quoter.address); - - //// Liquidator Redemption Strategies - - //// UniswapLpTokenLiquidator - const uniswapLpTokenLiquidator = await deployments.deploy("UniswapLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (uniswapLpTokenLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(uniswapLpTokenLiquidator.transactionHash); - } - console.log("UniswapLpTokenLiquidator: ", uniswapLpTokenLiquidator.address); - - //// Balancer Lp token liquidator - const balancerLpTokenLiquidator = await deployments.deploy("BalancerLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (balancerLpTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(balancerLpTokenLiquidator.transactionHash); - console.log("BalancerLpTokenLiquidator: ", balancerLpTokenLiquidator.address); - - //// Balancer Swap token liquidator - const balancerSwapTokenLiquidator = await deployments.deploy("BalancerSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (balancerSwapTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(balancerSwapTokenLiquidator.transactionHash); - console.log("BalancerSwapLiquidator: ", balancerSwapTokenLiquidator.address); - - const algebraSwapLiquidator = await deployments.deploy("AlgebraSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (algebraSwapLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(algebraSwapLiquidator.transactionHash); - } - console.log("AlgebraSwapLiquidator: ", algebraSwapLiquidator.address); - - //// CurveLPLiquidator - const curveLpTokenLiquidatorNoRegistry = await deployments.deploy("CurveLpTokenLiquidatorNoRegistry", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveLpTokenLiquidatorNoRegistry.transactionHash) - await ethers.provider.waitForTransaction(curveLpTokenLiquidatorNoRegistry.transactionHash); - console.log("CurveLpTokenLiquidatorNoRegistry: ", curveLpTokenLiquidatorNoRegistry.address); - - // CurveSwapLiquidator - const curveSwapLiquidator = await deployments.deploy("CurveSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveSwapLiquidator.transactionHash) - await ethers.provider.waitForTransaction(curveSwapLiquidator.transactionHash); - console.log("CurveSwapLiquidator: ", curveSwapLiquidator.address); - - // CurveLpTokenWrapper - const curveLpTokenWrapper = await deployments.deploy("CurveLpTokenWrapper", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveLpTokenWrapper.transactionHash) - await ethers.provider.waitForTransaction(curveLpTokenWrapper.transactionHash); - console.log("CurveLpTokenWrapper: ", curveLpTokenWrapper.address); - - //// Gelato GUNI Liquidator - const gelatoGUniLiquidator = await deployments.deploy("GelatoGUniLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (gelatoGUniLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(gelatoGUniLiquidator.transactionHash); - } - console.log("GelatoGUniLiquidator: ", gelatoGUniLiquidator.address); - - //// Aave AToken Liquidator - const aaveTokenLiquidator = await deployments.deploy("AaveTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (aaveTokenLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(aaveTokenLiquidator.transactionHash); - } - console.log("AaveTokenLiquidator: ", aaveTokenLiquidator.address); - - // curve swap liquidator funder - TODO replace the CurveSwapLiquidator above - const curveSwapLiquidatorFunder = await deployments.deploy("CurveSwapLiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (curveSwapLiquidatorFunder.transactionHash) - await ethers.provider.waitForTransaction(curveSwapLiquidatorFunder.transactionHash); - console.log("CurveSwapLiquidatorFunder: ", curveSwapLiquidatorFunder.address); - - //// JarvisLiquidatorFunder - const jarvisLiquidatorFunder = await deployments.deploy("JarvisLiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (jarvisLiquidatorFunder.transactionHash) - await ethers.provider.waitForTransaction(jarvisLiquidatorFunder.transactionHash); - console.log("JarvisLiquidatorFunder: ", jarvisLiquidatorFunder.address); - - //// Uniswap V3 Liquidator Funder - const uniswapV3LiquidatorFunder = await deployments.deploy("UniswapV3LiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - console.log("UniswapV3LiquidatorFunder: ", uniswapV3LiquidatorFunder.address); - - //// custom uniswap v2 redemptions and funding - const uniswapV2LiquidatorFunder = await deployments.deploy("UniswapV2LiquidatorFunder", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (uniswapV2LiquidatorFunder.transactionHash) { - await ethers.provider.waitForTransaction(uniswapV2LiquidatorFunder.transactionHash); - } - console.log("UniswapV2LiquidatorFunder: ", uniswapV2LiquidatorFunder.address); - - // Solidly Liquidators - const solidlyLpTokenLiquidator = await deployments.deploy("SolidlyLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (solidlyLpTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(solidlyLpTokenLiquidator.transactionHash); - console.log("SolidlyLpTokenLiquidator: ", solidlyLpTokenLiquidator.address); - - const solidlyLpTokenWrapper = await deployments.deploy("SolidlyLpTokenWrapper", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (solidlyLpTokenWrapper.transactionHash) - await ethers.provider.waitForTransaction(solidlyLpTokenWrapper.transactionHash); - console.log("SolidlyLpTokenWrapper: ", solidlyLpTokenWrapper.address); - - const solidlySwapLiquidator = await deployments.deploy("SolidlySwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (solidlySwapLiquidator.transactionHash) - await ethers.provider.waitForTransaction(solidlySwapLiquidator.transactionHash); - console.log("SolidlySwapLiquidator: ", solidlySwapLiquidator.address); - - // Gamma Uniswap LP token liquidator - const gammaUniswapLpTokenLiquidator = await deployments.deploy("GammaUniswapV3LpTokenLiquidator", { - from: deployer, - args: [], - log: true - }); - if (gammaUniswapLpTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(gammaUniswapLpTokenLiquidator.transactionHash); - console.log("GammaUniswapV3LpTokenLiquidator: ", gammaUniswapLpTokenLiquidator.address); - - // Gamma Uniswap LP token wrapper - const gammaUniswapLpTokenWrapper = await deployments.deploy("GammaUniswapV3LpTokenWrapper", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (gammaUniswapLpTokenWrapper.transactionHash) { - await ethers.provider.waitForTransaction(gammaUniswapLpTokenWrapper.transactionHash); - } - console.log("gammaUniswapV3LpTokenWrapper: ", gammaUniswapLpTokenWrapper.address); - - /// Addresses Provider - /// set bUSD - const addressesProvider = (await ethers.getContract("AddressesProvider", deployer)) as AddressesProvider; - const busdAddress = underlying(assets, assetSymbols.BUSD); - const busdAddressAp = await addressesProvider.callStatic.getAddress("bUSD"); - if (busdAddressAp !== busdAddress) { - const tx = await addressesProvider.setAddress("bUSD", busdAddress); - await tx.wait(); - console.log("setAddress bUSD: ", tx.hash); - } - /// set BalancerLpStablePoolPriceOracle - const balancerLpStablePoolPriceOracle = await ethers.getContractOrNull("BalancerLpStablePoolPriceOracle", deployer); - const balancerLpStablePoolPriceOracleAp = await addressesProvider.callStatic.getAddress( - "BalancerLpStablePoolPriceOracle" - ); - if ( - balancerLpStablePoolPriceOracle && - balancerLpStablePoolPriceOracleAp !== balancerLpStablePoolPriceOracle.address - ) { - const tx = await addressesProvider.setAddress( - "BalancerLpStablePoolPriceOracle", - balancerLpStablePoolPriceOracle.address - ); - console.log("setAddress BalancerLpStablePoolPriceOracle: ", tx.hash); - await tx.wait(); - console.log("mined setAddress BalancerLpStablePoolPriceOracle: ", tx.hash); - } - await configureBalancerSwap(addressesProvider, balancerSwapLiquidatorData); -}; diff --git a/packages/sdk/chainDeploy/mainnets/zkevm.ts b/packages/sdk/chainDeploy/mainnets/zkevm.ts deleted file mode 100644 index 8c6927fb6..000000000 --- a/packages/sdk/chainDeploy/mainnets/zkevm.ts +++ /dev/null @@ -1,162 +0,0 @@ -import { zkevm } from "@ionicprotocol/chains"; -import { assetSymbols, underlying } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { AddressesProvider } from "../../typechain/AddressesProvider"; -import { - ChainDeployConfig, - configureBalancerSwap, - deployAlgebraPriceOracle, - deployAPI3PriceOracle, - deployBalancerRateProviderPriceOracle -} from "../helpers"; -import { - BalancerRateProviderAsset, - BalancerSwapTokenLiquidatorData, - ConcentratedLiquidityOracleConfig, - PythAsset -} from "../helpers/types"; - -const assets = zkevm.assets; - -export const deployConfig: ChainDeployConfig = { - wtoken: zkevm.chainAddresses.W_TOKEN, - nativeTokenUsdChainlinkFeed: "", - nativeTokenName: "Ethereum", - nativeTokenSymbol: "ETH", - stableToken: zkevm.chainAddresses.STABLE_TOKEN, - wBTCToken: zkevm.chainAddresses.W_BTC_TOKEN, - blocksPerYear: zkevm.specificParams.blocksPerYear.toNumber(), - uniswap: { - hardcoded: [], - uniswapData: [], - pairInitHashCode: ethers.utils.hexlify("0x1f475d88284b09799561ca05d87dc757c1ff4a9f48983cdb84d1dd6e209d3ae2"), - uniswapV2RouterAddress: ethers.constants.AddressZero, - uniswapV2FactoryAddress: ethers.constants.AddressZero, - uniswapV3FactoryAddress: ethers.constants.AddressZero, - uniswapOracleLpTokens: [], - uniswapOracleInitialDeployTokens: [], - flashSwapFee: 30 - }, - cgId: zkevm.specificParams.cgId -}; - -const api3Assets: PythAsset[] = [ - { - underlying: underlying(assets, assetSymbols.USDC), - feed: "0x8DF7d919Fe9e866259BB4D135922c5Bd96AF6A27" - }, - { - underlying: underlying(assets, assetSymbols.USDT), - feed: "0xF63Fa6EA00678F435Ae3e845541EBb2Db0a1e8fF" - }, - { - underlying: underlying(assets, assetSymbols.WBTC), - feed: "0xe5Cf15fED24942E656dBF75165aF1851C89F21B5" - }, - { - underlying: underlying(assets, assetSymbols.DAI), - feed: "0x6538D9c4b12b5E5E209917D29C097465Ba8EFA02" - }, - { - underlying: underlying(assets, assetSymbols.WMATIC), - feed: "0x3ACccB328Db79Af1B81a4801DAf9ac8370b9FBF8" - } -]; - -const algebraOracleTokens: Array = [ - { - assetAddress: underlying(assets, assetSymbols.FRAX), - poolAddress: "0xC4aD89d0A07081871f3007079f816B0757D2638E", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.USDC) - }, - { - assetAddress: underlying(assets, assetSymbols.frxETH), - poolAddress: "0x0B19F0144bD78528C8ACDB6FC38914D855CDb0fa", - twapWindow: ethers.BigNumber.from(30 * 60), - baseToken: underlying(assets, assetSymbols.WETH) - } -]; - -const balancerRateProviderAssets: BalancerRateProviderAsset[] = [ - { - tokenAddress: underlying(assets, assetSymbols.rETH), - baseToken: underlying(assets, assetSymbols.WETH), - rateProviderAddress: "0x60b39BEC6AF8206d1E6E8DFC63ceA214A506D6c3" - }, - { - tokenAddress: underlying(assets, assetSymbols.wstETH), - baseToken: underlying(assets, assetSymbols.WETH), - rateProviderAddress: "0x00346D2Fd4B2Dc3468fA38B857409BC99f832ef8" - } -]; - -const balancerSwapLiquidatorData: BalancerSwapTokenLiquidatorData[] = [ - { - inputToken: underlying(assets, assetSymbols.rETH), - outputToken: underlying(assets, assetSymbols.WETH), - poolAddress: "0x1d0A8a31CDb04efAC3153237526Fb15cc65A2520" - }, - { - inputToken: underlying(assets, assetSymbols.wstETH), - outputToken: underlying(assets, assetSymbols.WETH), - poolAddress: "0xe1F2c039a68A216dE6DD427Be6c60dEcf405762A" - } -]; - -export const deploy = async ({ run, ethers, getNamedAccounts, deployments }): Promise => { - const { deployer } = await getNamedAccounts(); - await deployAPI3PriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - api3Assets, - nativeTokenUsdFeed: "0x26690F9f17FdC26D419371315bc17950a0FC90eD", - usdToken: underlying(assets, assetSymbols.USDC) - }); - //// deploy algebra price oracle - await deployAlgebraPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - concentratedLiquidityOracleTokens: algebraOracleTokens - }); - /// Balancer LP Price Oracle - await deployBalancerRateProviderPriceOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig, - balancerRateProviderAssets - }); - - const algebraSwapLiquidator = await deployments.deploy("AlgebraSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (algebraSwapLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(algebraSwapLiquidator.transactionHash); - } - console.log("AlgebraSwapLiquidator: ", algebraSwapLiquidator.address); - - //// Balancer Swap token liquidator - const balancerSwapTokenLiquidator = await deployments.deploy("BalancerSwapLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (balancerSwapTokenLiquidator.transactionHash) - await ethers.provider.waitForTransaction(balancerSwapTokenLiquidator.transactionHash); - console.log("BalancerSwapLiquidator: ", balancerSwapTokenLiquidator.address); - const addressesProvider = (await ethers.getContract("AddressesProvider", deployer)) as AddressesProvider; - await configureBalancerSwap(addressesProvider, balancerSwapLiquidatorData); -}; diff --git a/packages/sdk/chainDeploy/testnets/chapel.ts b/packages/sdk/chainDeploy/testnets/chapel.ts deleted file mode 100644 index 3f296987d..000000000 --- a/packages/sdk/chainDeploy/testnets/chapel.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { chapel } from "@ionicprotocol/chains"; -import { assetSymbols, SupportedAsset } from "@ionicprotocol/types"; -import { ethers } from "ethers"; - -import { - ChainDeployConfig, - ChainlinkFeedBaseCurrency, - deployChainlinkOracle, - deployUniswapLpOracle, - deployUniswapOracle -} from "../helpers"; -import { ChainlinkAsset } from "../helpers/types"; - -const assets = chapel.assets; - -export const deployConfig: ChainDeployConfig = { - wtoken: assets.find((a: SupportedAsset) => a.symbol === assetSymbols.WBNB)!.underlying, - nativeTokenUsdChainlinkFeed: "0x2514895c72f50D8bd4B4F9b1110F0D6bD2c97526", - nativeTokenName: "Binance Coin Token (Testnet)", - nativeTokenSymbol: "TBNB", - stableToken: assets.find((a: SupportedAsset) => a.symbol === assetSymbols.BUSD)!.underlying, - wBTCToken: assets.find((a: SupportedAsset) => a.symbol === assetSymbols.BTCB)!.underlying, - blocksPerYear: chapel.specificParams.blocksPerYear.toNumber(), - uniswap: { - hardcoded: [ - { - name: "Binance Bitcoin", - symbol: "BTCB", - address: assets.find((a: SupportedAsset) => a.symbol === assetSymbols.BTCB)!.underlying - } - ], - uniswapData: [], - // see: https://bsc.kiemtienonline360.com/ for addresses - pairInitHashCode: ethers.utils.hexlify("0xecba335299a6693cb2ebc4782e74669b84290b6378ea3a3873c7231a8d7d1074"), - uniswapV2RouterAddress: "0x9Ac64Cc6e4415144C455BD8E4837Fea55603e5c3", - uniswapV2FactoryAddress: "0xB7926C0430Afb07AA7DEfDE6DA862aE0Bde767bc", - uniswapOracleLpTokens: [ - assets.find((a) => a.symbol === assetSymbols["BUSD-USDT"])!.underlying, // BUSD-USDT PCS LP - assets.find((a) => a.symbol === assetSymbols["WBNB-DAI"])!.underlying, // WBNB-DAI PCS LP - assets.find((a) => a.symbol === assetSymbols["WBNB-BUSD"])!.underlying // WBNB-BUSD PCS LP - ], - uniswapOracleInitialDeployTokens: [], - flashSwapFee: 30 - }, - cgId: chapel.specificParams.cgId -}; - -export const deploy = async ({ run, ethers, getNamedAccounts, deployments }): Promise => { - const { deployer } = await getNamedAccounts(); - //// - //// ORACLES - const chainlinkAssets: ChainlinkAsset[] = [ - { - symbol: "BUSD", - aggregator: "0x9331b55D9830EF609A2aBCfAc0FBCE050A52fdEa", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: "BTCB", - aggregator: "0x5741306c21795FdCBb9b265Ea0255F499DFe515C", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - }, - { - symbol: "ETH", - aggregator: "0x143db3CEEfbdfe5631aDD3E50f7614B6ba708BA7", - feedBaseCurrency: ChainlinkFeedBaseCurrency.USD - } - ]; - - //// ChainLinkV2 Oracle - await deployChainlinkOracle({ - ethers, - getNamedAccounts, - deployments, - deployConfig, - assets: assets, - chainlinkAssets, - run - }); - //// - - //// Uniswap Oracle - await deployUniswapOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig - }); - - //// UniswapLp Oracle - await deployUniswapLpOracle({ - run, - ethers, - getNamedAccounts, - deployments, - deployConfig - }); - - //// Liquidator Redemption Strategies - const uniswapLpTokenLiquidator = await deployments.deploy("UniswapLpTokenLiquidator", { - from: deployer, - args: [], - log: true, - waitConfirmations: 1 - }); - if (uniswapLpTokenLiquidator.transactionHash) { - await ethers.provider.waitForTransaction(uniswapLpTokenLiquidator.transactionHash); - } - console.log("UniswapLpTokenLiquidator: ", uniswapLpTokenLiquidator.address); -}; diff --git a/packages/sdk/deploy/10-deploy-liquidators.ts b/packages/sdk/deploy/10-deploy-liquidators.ts index b4c6cd545..2a695bfa3 100644 --- a/packages/sdk/deploy/10-deploy-liquidators.ts +++ b/packages/sdk/deploy/10-deploy-liquidators.ts @@ -16,9 +16,9 @@ const func: DeployFunction = async ({ run, ethers, getNamedAccounts, deployments const { config: chainDeployParams }: { config: ChainDeployConfig } = chainDeployConfig[chainId]; //// Liquidator - let liquidatorContractName: string; - if (chainId !== 34443) { - liquidatorContractName = await deployIonicLiquidator({ + let liquidatorContractName: string | undefined; + if (chainId === 34443) { + liquidatorContractName = await deployIonicUniV3Liquidator({ run, ethers, getNamedAccounts, @@ -26,8 +26,10 @@ const func: DeployFunction = async ({ run, ethers, getNamedAccounts, deployments deployConfig: chainDeployParams, chainId }); + } else if (chainId === 60808) { + // TODO } else { - liquidatorContractName = await deployIonicUniV3Liquidator({ + liquidatorContractName = await deployIonicLiquidator({ run, ethers, getNamedAccounts, @@ -38,12 +40,14 @@ const func: DeployFunction = async ({ run, ethers, getNamedAccounts, deployments } //// Configure Liquidator - await configureIonicLiquidator({ - contractName: liquidatorContractName, - ethers, - getNamedAccounts, - chainId - }); + if (liquidatorContractName) { + await configureIonicLiquidator({ + contractName: liquidatorContractName, + ethers, + getNamedAccounts, + chainId + }); + } }; func.tags = ["prod", "deploy-liquidators"]; diff --git a/packages/sdk/deployments/bob/.chainId b/packages/sdk/deployments/bob/.chainId new file mode 100644 index 000000000..05585e52e --- /dev/null +++ b/packages/sdk/deployments/bob/.chainId @@ -0,0 +1 @@ +60808 \ No newline at end of file diff --git a/packages/sdk/deployments/bob/AddressesProvider.json b/packages/sdk/deployments/bob/AddressesProvider.json new file mode 100644 index 000000000..f09ec72ba --- /dev/null +++ b/packages/sdk/deployments/bob/AddressesProvider.json @@ -0,0 +1,978 @@ +{ + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balancerPoolForTokens", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "curveSwapPoolsConfig", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "poolAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "flywheelRewards", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "fundingStrategiesConfig", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "inputToken", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAddress", + "inputs": [ + { + "name": "id", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBalancerPoolForTokens", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "address" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCurveSwapPools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct AddressesProvider.CurveSwapPool[]", + "components": [ + { + "name": "poolAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "coins", + "type": "address[]", + "internalType": "address[]" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getFundingStrategy", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct AddressesProvider.FundingStrategy", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "inputToken", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getJarvisPools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct AddressesProvider.JarvisPool[]", + "components": [ + { + "name": "syntheticToken", + "type": "address", + "internalType": "address" + }, + { + "name": "collateralToken", + "type": "address", + "internalType": "address" + }, + { + "name": "liquidityPool", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRedemptionStrategy", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct AddressesProvider.RedemptionStrategy", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "jarvisPoolsConfig", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "syntheticToken", + "type": "address", + "internalType": "address" + }, + { + "name": "collateralToken", + "type": "address", + "internalType": "address" + }, + { + "name": "liquidityPool", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "plugins", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redemptionStrategiesConfig", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setAddress", + "inputs": [ + { + "name": "id", + "type": "string", + "internalType": "string" + }, + { + "name": "newAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setBalancerPoolForTokens", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "address" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + }, + { + "name": "pool", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setCurveSwapPool", + "inputs": [ + { + "name": "poolAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "coins", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setFlywheelRewards", + "inputs": [ + { + "name": "rewardToken", + "type": "address", + "internalType": "address" + }, + { + "name": "flywheelRewardsModule", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setFundingStrategy", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "inputToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setJarvisPool", + "inputs": [ + { + "name": "syntheticToken", + "type": "address", + "internalType": "address" + }, + { + "name": "collateralToken", + "type": "address", + "internalType": "address" + }, + { + "name": "liquidityPool", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPlugin", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "plugin", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setRedemptionStrategy", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "transactionIndex": 1, + "gasUsed": "772720", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000001002000001000000000000100000000000000000000100020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000200000000004000000000000000000000080000000000000", + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec", + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000bbdca7858ac2417b06636f7ba35e7d9ea39402ea" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + }, + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + }, + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + }, + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + }, + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + } + ], + "blockNumber": 3777885, + "cumulativeGasUsed": "816559", + "status": 1, + "byzantium": true + }, + "args": [ + "0xBbDcA7858ac2417b06636F7BA35e7d9EA39402ea", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xc4d66de80000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x1155b614971f16758C92c4890eD338C9e3ede6b7" + ] + }, + "implementation": "0xBbDcA7858ac2417b06636F7BA35e7d9EA39402ea", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/AddressesProvider_Implementation.json b/packages/sdk/deployments/bob/AddressesProvider_Implementation.json new file mode 100644 index 000000000..776836a1f --- /dev/null +++ b/packages/sdk/deployments/bob/AddressesProvider_Implementation.json @@ -0,0 +1,1630 @@ +{ + "address": "0xBbDcA7858ac2417b06636F7BA35e7d9EA39402ea", + "abi": [ + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balancerPoolForTokens", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "curveSwapPoolsConfig", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "poolAddress", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "flywheelRewards", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "fundingStrategiesConfig", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "inputToken", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAddress", + "inputs": [ + { + "name": "id", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBalancerPoolForTokens", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "address" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCurveSwapPools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct AddressesProvider.CurveSwapPool[]", + "components": [ + { + "name": "poolAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "coins", + "type": "address[]", + "internalType": "address[]" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getFundingStrategy", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct AddressesProvider.FundingStrategy", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "inputToken", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getJarvisPools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct AddressesProvider.JarvisPool[]", + "components": [ + { + "name": "syntheticToken", + "type": "address", + "internalType": "address" + }, + { + "name": "collateralToken", + "type": "address", + "internalType": "address" + }, + { + "name": "liquidityPool", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRedemptionStrategy", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple", + "internalType": "struct AddressesProvider.RedemptionStrategy", + "components": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "jarvisPoolsConfig", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "syntheticToken", + "type": "address", + "internalType": "address" + }, + { + "name": "collateralToken", + "type": "address", + "internalType": "address" + }, + { + "name": "liquidityPool", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "plugins", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redemptionStrategiesConfig", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "addr", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setAddress", + "inputs": [ + { + "name": "id", + "type": "string", + "internalType": "string" + }, + { + "name": "newAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setBalancerPoolForTokens", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "address" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + }, + { + "name": "pool", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setCurveSwapPool", + "inputs": [ + { + "name": "poolAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "coins", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setFlywheelRewards", + "inputs": [ + { + "name": "rewardToken", + "type": "address", + "internalType": "address" + }, + { + "name": "flywheelRewardsModule", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setFundingStrategy", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "inputToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setJarvisPool", + "inputs": [ + { + "name": "syntheticToken", + "type": "address", + "internalType": "address" + }, + { + "name": "collateralToken", + "type": "address", + "internalType": "address" + }, + { + "name": "liquidityPool", + "type": "address", + "internalType": "address" + }, + { + "name": "expirationTime", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPlugin", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "plugin", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setRedemptionStrategy", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "strategy", + "type": "address", + "internalType": "address" + }, + { + "name": "contractInterface", + "type": "string", + "internalType": "string" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xb9500d47bd248c665f9233c1140c1ea68d86a0e1a4f861f55cec9a4273c33821", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xBbDcA7858ac2417b06636F7BA35e7d9EA39402ea", + "transactionIndex": 2, + "gasUsed": "1524145", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x70ac4eff21f76231311c12593da61e4fb0991cfcb23c78997cc9d141501aad45", + "transactionHash": "0xb9500d47bd248c665f9233c1140c1ea68d86a0e1a4f861f55cec9a4273c33821", + "logs": [], + "blockNumber": 3777882, + "cumulativeGasUsed": "1700062", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balancerPoolForTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "curveSwapPoolsConfig", + "outputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "flywheelRewards", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "fundingStrategiesConfig", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "id", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAddress", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBalancerPoolForTokens", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCurveSwapPools", + "outputs": [ + { + "internalType": "struct AddressesProvider.CurveSwapPool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "coins", + "type": "address[]" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getFundingStrategy", + "outputs": [ + { + "internalType": "struct AddressesProvider.FundingStrategy", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getJarvisPools", + "outputs": [ + { + "internalType": "struct AddressesProvider.JarvisPool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRedemptionStrategy", + "outputs": [ + { + "internalType": "struct AddressesProvider.RedemptionStrategy", + "name": "", + "type": "tuple", + "components": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "jarvisPoolsConfig", + "outputs": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "plugins", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesConfig", + "outputs": [ + { + "internalType": "address", + "name": "addr", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "string", + "name": "id", + "type": "string" + }, + { + "internalType": "address", + "name": "newAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setAddress" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setBalancerPoolForTokens" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + }, + { + "internalType": "address[]", + "name": "coins", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setCurveSwapPool" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "address", + "name": "flywheelRewardsModule", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setFlywheelRewards" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "strategy", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "inputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setFundingStrategy" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "syntheticToken", + "type": "address" + }, + { + "internalType": "address", + "name": "collateralToken", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidityPool", + "type": "address" + }, + { + "internalType": "uint256", + "name": "expirationTime", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setJarvisPool" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "plugin", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPlugin" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "address", + "name": "strategy", + "type": "address" + }, + { + "internalType": "string", + "name": "contractInterface", + "type": "string" + }, + { + "internalType": "address", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setRedemptionStrategy" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "getAddress(string)": { + "details": "Returns an address by id", + "returns": { + "_0": "The address" + } + }, + "initialize(address)": { + "details": "Initializer to set the admin that can set and change contracts addresses" + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setAddress(string,address)": { + "details": "Sets an address for an id replacing the address saved in the addresses map", + "params": { + "id": "The id", + "newAddress": "The address to set" + } + }, + "setFlywheelRewards(address,address,string)": { + "details": "sets the address and contract interface ID of the flywheel for the reward token", + "params": { + "contractInterface": "a string that uniquely identifies the contract's interface", + "flywheelRewardsModule": "the flywheel rewards module address", + "rewardToken": "the reward token address" + } + }, + "setFundingStrategy(address,address,string,address)": { + "details": "sets the address and contract interface ID of the funding strategy for the asset", + "params": { + "asset": "the asset address", + "contractInterface": "a string that uniquely identifies the contract's interface", + "strategy": "funding strategy address" + } + }, + "setJarvisPool(address,address,address,uint256)": { + "details": "configures the Jarvis pool of a Jarvis synthetic token", + "params": { + "collateralToken": "the collateral token address", + "expirationTime": "the operation expiration time", + "liquidityPool": "the liquidity pool address", + "syntheticToken": "the synthetic token address" + } + }, + "setPlugin(address,address,string)": { + "details": "sets the address and contract interface ID of the ERC4626 plugin for the asset", + "params": { + "asset": "the asset address", + "contractInterface": "a string that uniquely identifies the contract's interface", + "plugin": "the ERC4626 plugin address" + } + }, + "setRedemptionStrategy(address,address,string,address)": { + "details": "sets the address and contract interface ID of the redemption strategy for the asset", + "params": { + "asset": "the asset address", + "contractInterface": "a string that uniquely identifies the contract's interface", + "strategy": "redemption strategy address" + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/AddressesProvider.sol": "AddressesProvider" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/ionic/AddressesProvider.sol": { + "keccak256": "0xf48e9e8b2150408c1c6b68dd957226c342ba47396da792fdaa0922f539a7e163", + "urls": [ + "bzz-raw://43c0a6c40861da4c19b67da9faee7df21572020e2d863611080a9181acc3ba3a", + "dweb:/ipfs/QmQpPDVAYTba8R9N1fGggzkG7JhUFVbAhxdfNw9xofVi4m" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50611a98806100206000396000f3fe608060405234801561001057600080fd5b50600436106101c45760003560e01c8063959fc097116100f9578063bf40fac111610097578063cf78b30a11610071578063cf78b30a1461044c578063e30c39781461045f578063f2fde38b14610472578063fc4d33f91461048557600080fd5b8063bf40fac114610413578063c4d66de814610426578063ceb4e9431461043957600080fd5b8063a11b73a6116100d3578063a11b73a6146103ba578063a13449d6146103cd578063b40dc803146103ed578063b91975541461040057600080fd5b8063959fc0971461033b578063984d8655146103735780639b2ea4bd146103a757600080fd5b806362772c731161016657806377d792191161014057806377d79219146102a65780637930b9b0146102bb57806381bc3632146103035780638da5cb5b1461031657600080fd5b806362772c73146102785780636e96dfd71461028b578063715018a61461029e57600080fd5b8063316eb395116101a2578063316eb3951461020f5780634172e7f91461023157806344fca697146102525780634b12e6431461026557600080fd5b8063073d0b6c146101c95780631783a521146101de5780632cf3219c146101f1575b600080fd5b6101dc6101d73660046114ec565b61048d565b005b6101dc6101ec3660046114ec565b610567565b6101f9610610565b6040516102069190611562565b60405180910390f35b61022261021d366004611611565b6106dc565b60405161020693929190611680565b61024461023f366004611611565b61079a565b6040516102069291906116b5565b6101dc6102603660046116e1565b610849565b610244610273366004611611565b61095e565b6101dc61028636600461172c565b61098a565b6101dc610299366004611611565b610a3c565b6101dc610aa6565b6102ae610aee565b60405161020691906117b2565b6102ce6102c9366004611824565b610b76565b60405161020694939291906001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6101dc61031136600461183d565b610bc0565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610206565b61032361034936600461189e565b6001600160a01b039182166000908152606d60209081526040808320938516835292905220541690565b61032361038136600461189e565b606d6020908152600092835260408084209091529082529020546001600160a01b031681565b6101dc6103b53660046118d1565b610c6c565b6101dc6103c836600461183d565b610cbb565b6103e06103db366004611611565b610d5e565b6040516102069190611966565b6102226103fb366004611611565b610e74565b6101dc61040e366004611979565b610ea0565b6103236104213660046119b3565b610ee5565b6101dc610434366004611611565b610f1a565b610323610447366004611824565b611029565b6103e061045a366004611611565b611058565b606554610323906001600160a01b031681565b6101dc610480366004611611565b6110d1565b6101dc611142565b610495611256565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038481166020938401528881168252606a83526040909120835181546001600160a01b0319169216919091178155828201518051919261053692600185019290910190611399565b5060409190910151600290910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b61056f611256565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038481166020938401528881168252606983526040909120835181546001600160a01b0319169216919091178155828201518051919261053692600185019290910190611399565b6060606c805480602002602001604051908101604052809291908181526020016000905b828210156106d35760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156106bb57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161069d575b50505050508152505081526020019060010190610634565b50505050905090565b606a60205260009081526040902080546001820180546001600160a01b039092169291610708906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610734906119f5565b80156107815780601f1061075657610100808354040283529160200191610781565b820191906000526020600020905b81548152906001019060200180831161076457829003601f168201915b505050600290930154919250506001600160a01b031683565b606860205260009081526040902080546001820180546001600160a01b0390921692916107c6906119f5565b80601f01602080910402602001604051908101604052809291908181526020018280546107f2906119f5565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905082565b610851611256565b604080516080810182526001600160a01b0395861681529385166020850190815292851690840190815260608401918252606b8054600181018255600091909152935160049094027fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4810180549587166001600160a01b031996871617905592517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b584018054918716918616919091179055517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b68301805491909516931692909217909255517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b790910155565b606760205260009081526040902080546001820180546001600160a01b0390921692916107c6906119f5565b610992611256565b606c6040518060400160405280856001600160a01b031681526020018484808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939094525050835460018082018655948252602091829020845160029092020180546001600160a01b0319166001600160a01b0390921691909117815583820151805194959194610a34945091850192019061141d565b505050505050565b610a44611256565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b610aae611256565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b6060606b805480602002602001604051908101604052809291908181526020016000905b828210156106d3576000848152602090819020604080516080810182526004860290920180546001600160a01b0390811684526001808301548216858701526002830154909116928401929092526003015460608301529083529092019101610b12565b606b8181548110610b8657600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039283169450908216929091169084565b610bc8611256565b6040518060400160405280846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038781168252606760209081526040909220845181546001600160a01b0319169216919091178155838201518051919350610c63926001850192910190611399565b50505050505050565b610c74611256565b8060668484604051610c87929190611a30565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b610cc3611256565b6040518060400160405280846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038781168252606860209081526040909220845181546001600160a01b0319169216919091178155838201518051919350610c63926001850192910190611399565b610d94604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6001600160a01b038083166000908152606a60209081526040918290208251606081019093528054909316825260018301805492939291840191610dd7906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e03906119f5565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050509183525050600291909101546001600160a01b031660209091015292915050565b606960205260009081526040902080546001820180546001600160a01b039092169291610708906119f5565b610ea8611256565b6001600160a01b039283166000908152606d6020908152604080832094861683529390529190912080546001600160a01b03191691909216179055565b600060668383604051610ef9929190611a30565b908152604051908190036020019020546001600160a01b0316905092915050565b600054610100900460ff1615808015610f3a5750600054600160ff909116105b80610f545750303b158015610f54575060005460ff166001145b610fb75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ae5565b6000805460ff191660011790558015610fda576000805461ff0019166101001790555b610fe3826112b2565b8015611025576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610a9a565b5050565b606c818154811061103957600080fd5b60009182526020909120600290910201546001600160a01b0316905081565b61108e604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6001600160a01b038083166000908152606960209081526040918290208251606081019093528054909316825260018301805492939291840191610dd7906119f5565b6110d9611256565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146111945760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401610ae5565b60006111a86033546001600160a01b031690565b6065549091506001600160a01b03166111c0816112ed565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610a9a565b6033546001600160a01b031633146112b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ae5565b565b600054610100900460ff166112d95760405162461bcd60e51b8152600401610ae590611a40565b6112e161133f565b6112ea816112ed565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113665760405162461bcd60e51b8152600401610ae590611a40565b6112b0600054610100900460ff166113905760405162461bcd60e51b8152600401610ae590611a40565b6112b0336112ed565b8280546113a5906119f5565b90600052602060002090601f0160209004810192826113c7576000855561140d565b82601f106113e057805160ff191683800117855561140d565b8280016001018555821561140d579182015b8281111561140d5782518255916020019190600101906113f2565b50611419929150611472565b5090565b82805482825590600052602060002090810192821561140d579160200282015b8281111561140d57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061143d565b5b808211156114195760008155600101611473565b80356001600160a01b038116811461149e57600080fd5b919050565b60008083601f8401126114b557600080fd5b50813567ffffffffffffffff8111156114cd57600080fd5b6020830191508360208285010111156114e557600080fd5b9250929050565b60008060008060006080868803121561150457600080fd5b61150d86611487565b945061151b60208701611487565b9350604086013567ffffffffffffffff81111561153757600080fd5b611543888289016114a3565b9094509250611556905060608701611487565b90509295509295909350565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561160257898403603f19018652825180516001600160a01b039081168652908901518986018990528051898701819052908a0191849160608801905b808410156115ec57845183168252938c019360019390930192908c01906115ca565b50988b019896505050928801925060010161158a565b50919998505050505050505050565b60006020828403121561162357600080fd5b61162c82611487565b9392505050565b6000815180845260005b818110156116595760208185018101518683018201520161163d565b8181111561166b576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038086168352606060208401526116a26060840186611633565b9150808416604084015250949350505050565b6001600160a01b03831681526040602082018190526000906116d990830184611633565b949350505050565b600080600080608085870312156116f757600080fd5b61170085611487565b935061170e60208601611487565b925061171c60408601611487565b9396929550929360600135925050565b60008060006040848603121561174157600080fd5b61174a84611487565b9250602084013567ffffffffffffffff8082111561176757600080fd5b818601915086601f83011261177b57600080fd5b81358181111561178a57600080fd5b8760208260051b850101111561179f57600080fd5b6020830194508093505050509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561181757815180516001600160a01b0390811686528782015181168887015286820151168686015260609081015190850152608090930192908501906001016117cf565b5091979650505050505050565b60006020828403121561183657600080fd5b5035919050565b6000806000806060858703121561185357600080fd5b61185c85611487565b935061186a60208601611487565b9250604085013567ffffffffffffffff81111561188657600080fd5b611892878288016114a3565b95989497509550505050565b600080604083850312156118b157600080fd5b6118ba83611487565b91506118c860208401611487565b90509250929050565b6000806000604084860312156118e657600080fd5b833567ffffffffffffffff8111156118fd57600080fd5b611909868287016114a3565b909450925061191c905060208501611487565b90509250925092565b600060018060a01b0380835116845260208301516060602086015261194d6060860182611633565b9050816040850151166040860152809250505092915050565b60208152600061162c6020830184611925565b60008060006060848603121561198e57600080fd5b61199784611487565b92506119a560208501611487565b915061191c60408501611487565b600080602083850312156119c657600080fd5b823567ffffffffffffffff8111156119dd57600080fd5b6119e9858286016114a3565b90969095509350505050565b600181811c90821680611a0957607f821691505b60208210811415611a2a57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "404:5467:133:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101c45760003560e01c8063959fc097116100f9578063bf40fac111610097578063cf78b30a11610071578063cf78b30a1461044c578063e30c39781461045f578063f2fde38b14610472578063fc4d33f91461048557600080fd5b8063bf40fac114610413578063c4d66de814610426578063ceb4e9431461043957600080fd5b8063a11b73a6116100d3578063a11b73a6146103ba578063a13449d6146103cd578063b40dc803146103ed578063b91975541461040057600080fd5b8063959fc0971461033b578063984d8655146103735780639b2ea4bd146103a757600080fd5b806362772c731161016657806377d792191161014057806377d79219146102a65780637930b9b0146102bb57806381bc3632146103035780638da5cb5b1461031657600080fd5b806362772c73146102785780636e96dfd71461028b578063715018a61461029e57600080fd5b8063316eb395116101a2578063316eb3951461020f5780634172e7f91461023157806344fca697146102525780634b12e6431461026557600080fd5b8063073d0b6c146101c95780631783a521146101de5780632cf3219c146101f1575b600080fd5b6101dc6101d73660046114ec565b61048d565b005b6101dc6101ec3660046114ec565b610567565b6101f9610610565b6040516102069190611562565b60405180910390f35b61022261021d366004611611565b6106dc565b60405161020693929190611680565b61024461023f366004611611565b61079a565b6040516102069291906116b5565b6101dc6102603660046116e1565b610849565b610244610273366004611611565b61095e565b6101dc61028636600461172c565b61098a565b6101dc610299366004611611565b610a3c565b6101dc610aa6565b6102ae610aee565b60405161020691906117b2565b6102ce6102c9366004611824565b610b76565b60405161020694939291906001600160a01b039485168152928416602084015292166040820152606081019190915260800190565b6101dc61031136600461183d565b610bc0565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610206565b61032361034936600461189e565b6001600160a01b039182166000908152606d60209081526040808320938516835292905220541690565b61032361038136600461189e565b606d6020908152600092835260408084209091529082529020546001600160a01b031681565b6101dc6103b53660046118d1565b610c6c565b6101dc6103c836600461183d565b610cbb565b6103e06103db366004611611565b610d5e565b6040516102069190611966565b6102226103fb366004611611565b610e74565b6101dc61040e366004611979565b610ea0565b6103236104213660046119b3565b610ee5565b6101dc610434366004611611565b610f1a565b610323610447366004611824565b611029565b6103e061045a366004611611565b611058565b606554610323906001600160a01b031681565b6101dc610480366004611611565b6110d1565b6101dc611142565b610495611256565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038481166020938401528881168252606a83526040909120835181546001600160a01b0319169216919091178155828201518051919261053692600185019290910190611399565b5060409190910151600290910180546001600160a01b0319166001600160a01b039092169190911790555050505050565b61056f611256565b6040518060600160405280856001600160a01b0316815260200184848080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509385525050506001600160a01b038481166020938401528881168252606983526040909120835181546001600160a01b0319169216919091178155828201518051919261053692600185019290910190611399565b6060606c805480602002602001604051908101604052809291908181526020016000905b828210156106d35760008481526020908190206040805180820182526002860290920180546001600160a01b031683526001810180548351818702810187019094528084529394919385830193928301828280156106bb57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161069d575b50505050508152505081526020019060010190610634565b50505050905090565b606a60205260009081526040902080546001820180546001600160a01b039092169291610708906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610734906119f5565b80156107815780601f1061075657610100808354040283529160200191610781565b820191906000526020600020905b81548152906001019060200180831161076457829003601f168201915b505050600290930154919250506001600160a01b031683565b606860205260009081526040902080546001820180546001600160a01b0390921692916107c6906119f5565b80601f01602080910402602001604051908101604052809291908181526020018280546107f2906119f5565b801561083f5780601f106108145761010080835404028352916020019161083f565b820191906000526020600020905b81548152906001019060200180831161082257829003601f168201915b5050505050905082565b610851611256565b604080516080810182526001600160a01b0395861681529385166020850190815292851690840190815260608401918252606b8054600181018255600091909152935160049094027fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b4810180549587166001600160a01b031996871617905592517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b584018054918716918616919091179055517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b68301805491909516931692909217909255517fbd43cb8ece8cd1863bcd6082d65c5b0d25665b1ce17980f0da43c0ed545f98b790910155565b606760205260009081526040902080546001820180546001600160a01b0390921692916107c6906119f5565b610992611256565b606c6040518060400160405280856001600160a01b031681526020018484808060200260200160405190810160405280939291908181526020018383602002808284376000920182905250939094525050835460018082018655948252602091829020845160029092020180546001600160a01b0319166001600160a01b0390921691909117815583820151805194959194610a34945091850192019061141d565b505050505050565b610a44611256565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b610aae611256565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b6060606b805480602002602001604051908101604052809291908181526020016000905b828210156106d3576000848152602090819020604080516080810182526004860290920180546001600160a01b0390811684526001808301548216858701526002830154909116928401929092526003015460608301529083529092019101610b12565b606b8181548110610b8657600080fd5b600091825260209091206004909102018054600182015460028301546003909301546001600160a01b039283169450908216929091169084565b610bc8611256565b6040518060400160405280846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038781168252606760209081526040909220845181546001600160a01b0319169216919091178155838201518051919350610c63926001850192910190611399565b50505050505050565b610c74611256565b8060668484604051610c87929190611a30565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055505050565b610cc3611256565b6040518060400160405280846001600160a01b0316815260200183838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052509390945250506001600160a01b038781168252606860209081526040909220845181546001600160a01b0319169216919091178155838201518051919350610c63926001850192910190611399565b610d94604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6001600160a01b038083166000908152606a60209081526040918290208251606081019093528054909316825260018301805492939291840191610dd7906119f5565b80601f0160208091040260200160405190810160405280929190818152602001828054610e03906119f5565b8015610e505780601f10610e2557610100808354040283529160200191610e50565b820191906000526020600020905b815481529060010190602001808311610e3357829003601f168201915b5050509183525050600291909101546001600160a01b031660209091015292915050565b606960205260009081526040902080546001820180546001600160a01b039092169291610708906119f5565b610ea8611256565b6001600160a01b039283166000908152606d6020908152604080832094861683529390529190912080546001600160a01b03191691909216179055565b600060668383604051610ef9929190611a30565b908152604051908190036020019020546001600160a01b0316905092915050565b600054610100900460ff1615808015610f3a5750600054600160ff909116105b80610f545750303b158015610f54575060005460ff166001145b610fb75760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401610ae5565b6000805460ff191660011790558015610fda576000805461ff0019166101001790555b610fe3826112b2565b8015611025576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001610a9a565b5050565b606c818154811061103957600080fd5b60009182526020909120600290910201546001600160a01b0316905081565b61108e604051806060016040528060006001600160a01b031681526020016060815260200160006001600160a01b031681525090565b6001600160a01b038083166000908152606960209081526040918290208251606081019093528054909316825260018301805492939291840191610dd7906119f5565b6110d9611256565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146111945760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401610ae5565b60006111a86033546001600160a01b031690565b6065549091506001600160a01b03166111c0816112ed565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610a9a565b6033546001600160a01b031633146112b05760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610ae5565b565b600054610100900460ff166112d95760405162461bcd60e51b8152600401610ae590611a40565b6112e161133f565b6112ea816112ed565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166113665760405162461bcd60e51b8152600401610ae590611a40565b6112b0600054610100900460ff166113905760405162461bcd60e51b8152600401610ae590611a40565b6112b0336112ed565b8280546113a5906119f5565b90600052602060002090601f0160209004810192826113c7576000855561140d565b82601f106113e057805160ff191683800117855561140d565b8280016001018555821561140d579182015b8281111561140d5782518255916020019190600101906113f2565b50611419929150611472565b5090565b82805482825590600052602060002090810192821561140d579160200282015b8281111561140d57825182546001600160a01b0319166001600160a01b0390911617825560209092019160019091019061143d565b5b808211156114195760008155600101611473565b80356001600160a01b038116811461149e57600080fd5b919050565b60008083601f8401126114b557600080fd5b50813567ffffffffffffffff8111156114cd57600080fd5b6020830191508360208285010111156114e557600080fd5b9250929050565b60008060008060006080868803121561150457600080fd5b61150d86611487565b945061151b60208701611487565b9350604086013567ffffffffffffffff81111561153757600080fd5b611543888289016114a3565b9094509250611556905060608701611487565b90509295509295909350565b60006020808301818452808551808352604092508286019150828160051b8701018488016000805b8481101561160257898403603f19018652825180516001600160a01b039081168652908901518986018990528051898701819052908a0191849160608801905b808410156115ec57845183168252938c019360019390930192908c01906115ca565b50988b019896505050928801925060010161158a565b50919998505050505050505050565b60006020828403121561162357600080fd5b61162c82611487565b9392505050565b6000815180845260005b818110156116595760208185018101518683018201520161163d565b8181111561166b576000602083870101525b50601f01601f19169290920160200192915050565b600060018060a01b038086168352606060208401526116a26060840186611633565b9150808416604084015250949350505050565b6001600160a01b03831681526040602082018190526000906116d990830184611633565b949350505050565b600080600080608085870312156116f757600080fd5b61170085611487565b935061170e60208601611487565b925061171c60408601611487565b9396929550929360600135925050565b60008060006040848603121561174157600080fd5b61174a84611487565b9250602084013567ffffffffffffffff8082111561176757600080fd5b818601915086601f83011261177b57600080fd5b81358181111561178a57600080fd5b8760208260051b850101111561179f57600080fd5b6020830194508093505050509250925092565b602080825282518282018190526000919060409081850190868401855b8281101561181757815180516001600160a01b0390811686528782015181168887015286820151168686015260609081015190850152608090930192908501906001016117cf565b5091979650505050505050565b60006020828403121561183657600080fd5b5035919050565b6000806000806060858703121561185357600080fd5b61185c85611487565b935061186a60208601611487565b9250604085013567ffffffffffffffff81111561188657600080fd5b611892878288016114a3565b95989497509550505050565b600080604083850312156118b157600080fd5b6118ba83611487565b91506118c860208401611487565b90509250929050565b6000806000604084860312156118e657600080fd5b833567ffffffffffffffff8111156118fd57600080fd5b611909868287016114a3565b909450925061191c905060208501611487565b90509250925092565b600060018060a01b0380835116845260208301516060602086015261194d6060860182611633565b9050816040850151166040860152809250505092915050565b60208152600061162c6020830184611925565b60008060006060848603121561198e57600080fd5b61199784611487565b92506119a560208501611487565b915061191c60408501611487565b600080602083850312156119c657600080fd5b823567ffffffffffffffff8111156119dd57600080fd5b6119e9858286016114a3565b90969095509350505050565b600181811c90821680611a0957607f821691505b60208210811415611a2a57634e487b7160e01b600052602260045260246000fd5b50919050565b8183823760009101908152919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "404:5467:133:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3693:253;;;;;;:::i;:::-;;:::i;:::-;;3002:264;;;;;;:::i;:::-;;:::i;5283:112::-;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;688:66;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;557:51::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;4389:265::-;;;;;;:::i;:::-;;:::i;510:43::-;;;;;;:::i;:::-;;:::i;4658:161::-;;;;;;:::i;:::-;;:::i;1602:386:140:-;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;5399:103:133:-;;;:::i;:::-;;;;;;;:::i;758:37::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;6759:15:504;;;6741:34;;6811:15;;;6806:2;6791:18;;6784:43;6863:15;;6858:2;6843:18;;6836:43;6910:2;6895:18;;6888:34;;;;6690:3;6675:19;;6472:456;2537:181:133;;;;;;:::i;:::-;;:::i;1441:85:454:-;1513:6;;-1:-1:-1;;;;;1513:6:454;1441:85;;;-1:-1:-1;;;;;7661:32:504;;;7643:51;;7631:2;7616:18;1441:85:454;7497:203:504;5698:171:133;;;;;;:::i;:::-;-1:-1:-1;;;;;5818:33:133;;;5796:7;5818:33;;;:21;:33;;;;;;;;:46;;;;;;;;;;;;5698:171;846:76;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;846:76:133;;;4984:117;;;;;;:::i;:::-;;:::i;2021:240::-;;;;;;:::i;:::-;;:::i;3950:136::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;612:72::-;;;;;;:::i;:::-;;:::i;5506:188::-;;;;;;:::i;:::-;;:::i;5177:102::-;;;;;;:::i;:::-;;:::i;1011:90::-;;;;;;:::i;:::-;;:::i;799:43::-;;;;;;:::i;:::-;;:::i;3270:145::-;;;;;;:::i;:::-;;:::i;530:27:140:-;;;;;-1:-1:-1;;;;;530:27:140;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;3693:253:133:-;1334:13:454;:11;:13::i;:::-;3885:56:133::1;;;;;;;;3901:8;-1:-1:-1::0;;;;;3885:56:133::1;;;;;3911:17;;3885:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;3885:56:133;;;-1:-1:-1;;;;;;;;3885:56:133;;::::1;;::::0;;::::1;::::0;3852:30;;::::1;::::0;;:23:::1;:30:::0;;;;;;:89;;;;-1:-1:-1;;;;;;3852:89:133::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;:30;;:89:::1;::::0;-1:-1:-1;3852:89:133;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;3852:89:133::1;::::0;;;::::1;::::0;::::1;::::0;;::::1;::::0;;-1:-1:-1;;;;;;3852:89:133::1;-1:-1:-1::0;;;;;3852:89:133;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;3693:253:133:o;3002:264::-;1334:13:454;:11;:13::i;:::-;3201:60:133::1;;;;;;;;3220:8;-1:-1:-1::0;;;;;3201:60:133::1;;;;;3230:17;;3201:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;3201:60:133;;;-1:-1:-1;;;;;;;;3201:60:133;;::::1;;::::0;;::::1;::::0;3165:33;;::::1;::::0;;:26:::1;:33:::0;;;;;;:96;;;;-1:-1:-1;;;;;;3165:96:133::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;:33;;:96:::1;::::0;-1:-1:-1;3165:96:133;::::1;::::0;;;::::1;::::0;::::1;:::i;5283:112::-:0;5333:22;5370:20;5363:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5363:27:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5363:27:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5283:112;:::o;688:66::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;688:66:133;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;688:66:133;;;;;;;-1:-1:-1;;;;;;;688:66:133;;:::o;557:51::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;557:51:133;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4389:265::-;1334:13:454;:11;:13::i;:::-;4574:74:133::1;::::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;;;;;4574:74:133;;::::1;::::0;;;;::::1;;::::0;::::1;::::0;;;;;::::1;::::0;;;;;;;;;;;;4551:17:::1;:98:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;4551:98:133;;;;;;::::1;::::0;;::::1;::::0;;::::1;::::0;;;;::::1;-1:-1:-1::0;;;;;;4551:98:133;;::::1;;::::0;;;;;;;;;;;::::1;::::0;;::::1;::::0;;;::::1;::::0;;;;;;;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;4389:265::o;510:43::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;510:43:133;;;;;;;;:::i;4658:161::-;1334:13:454;:11;:13::i;:::-;4754:20:133::1;4780:33;;;;;;;;4794:11;-1:-1:-1::0;;;;;4780:33:133::1;;;;;4807:5;;4780:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;4780:33:133;;;;-1:-1:-1;;4754:60:133;;::::1;::::0;;::::1;::::0;;;;;::::1;::::0;;;;;;::::1;::::0;;::::1;;::::0;;-1:-1:-1;;;;;;4754:60:133::1;-1:-1:-1::0;;;;;4754:60:133;;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;;;;;::::1;::::0;-1:-1:-1;4754:60:133;;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;4658:161:::0;;;:::o;1602:386:140:-;1334:13:454;:11;:13::i;:::-;1758:12:140::1;::::0;;-1:-1:-1;;;;;1830:30:140;;::::1;-1:-1:-1::0;;;;;;1830:30:140;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;10797:34:504::0;;;10862:2;10847:18;;10840:43;;;;1934:49:140::1;::::0;10732:18:504;1934:49:140::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:454;:11;:13::i;:::-;2804:26:140::1;::::0;-1:-1:-1;;;2804:26:140;;11096:2:504;2804:26:140::1;::::0;::::1;11078:21:504::0;11135:2;11115:18;;;11108:30;-1:-1:-1;;;11154:18:504;;;11147:46;11210:18;;2804:26:140::1;;;;;;;;5399:103:133::0;5446:19;5480:17;5473:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5473:24:133;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;758:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;758:37:133;;;;-1:-1:-1;758:37:133;;;;;;;;;:::o;2537:181::-;1334:13:454;:11;:13::i;:::-;2678:35:133::1;;;;;;;;2687:6;-1:-1:-1::0;;;;;2678:35:133::1;;;;;2695:17;;2678:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;2678:35:133;;;;-1:-1:-1;;;;;;;2661:14:133;;::::1;::::0;;:7:::1;:14;::::0;;;;;;;:52;;;;-1:-1:-1;;;;;;2661:52:133::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;:14;;-1:-1:-1;2661:52:133::1;::::0;-1:-1:-1;2661:52:133;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;;;;;;;2537:181:133:o;4984:117::-;1334:13:454;:11;:13::i;:::-;5086:10:133::1;5069;5080:2;;5069:14;;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:27;;-1:-1:-1;;;;;5069:27:133;;;::::1;-1:-1:-1::0;;;;;;5069:27:133;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;4984:117:133:o;2021:240::-;1334:13:454;:11;:13::i;:::-;2206:50:133::1;;;;;;;;2215:21;-1:-1:-1::0;;;;;2206:50:133::1;;;;;2238:17;;2206:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;2206:50:133;;;;-1:-1:-1;;;;;;;2175:28:133;;::::1;::::0;;:15:::1;:28;::::0;;;;;;;:81;;;;-1:-1:-1;;;;;;2175:81:133::1;::::0;::::1;::::0;;;::::1;::::0;;;;::::1;::::0;;;:28;;-1:-1:-1;2175:81:133::1;::::0;-1:-1:-1;2175:81:133;::::1;::::0;;::::1;::::0;::::1;:::i;3950:136::-:0;4014:22;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4014:22:133;-1:-1:-1;;;;;4051:30:133;;;;;;;:23;:30;;;;;;;;;4044:37;;;;;;;;;;;;;;;;;;;;;;4051:30;4044:37;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;4044:37:133;;;-1:-1:-1;;4044:37:133;;;;;;-1:-1:-1;;;;;4044:37:133;;;;;;;3950:136;-1:-1:-1;;3950:136:133:o;612:72::-;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;612:72:133;;;;;;;;:::i;5506:188::-;1334:13:454;:11;:13::i;:::-;-1:-1:-1;;;;;5636:33:133;;::::1;;::::0;;;:21:::1;:33;::::0;;;;;;;:46;;::::1;::::0;;;;;;;;;:53;;-1:-1:-1;;;;;;5636:53:133::1;::::0;;;::::1;;::::0;;5506:188::o;5177:102::-;5238:7;5260:10;5271:2;;5260:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;5260:14:133;;-1:-1:-1;5177:102:133;;;;:::o;1011:90::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;11719:2:504;3314:201:457;;;11701:21:504;11758:2;11738:18;;;11731:30;11797:34;11777:18;;;11770:62;-1:-1:-1;;;11848:18:504;;;11841:44;11902:19;;3314:201:457;11517:410:504;3314:201:457;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;1071:25:133::1;1090:5;1071:18;:25::i;:::-;3640:14:457::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;12084:36:504;;3710:14:457;;12072:2:504;12057:18;3710:14:457;11932:194:504;3636:99:457;3258:483;1011:90:133;:::o;799:43::-;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;799:43:133;;-1:-1:-1;799:43:133;:::o;3270:145::-;3337:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3337:25:133;-1:-1:-1;;;;;3377:33:133;;;;;;;:26;:33;;;;;;;;;3370:40;;;;;;;;;;;;;;;;;;;;;;3377:33;3370:40;;;;;;;:::i;2839:155:140:-;1334:13:454;:11;:13::i;:::-;2937:12:140::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:140;;::::1;10797:34:504::0;;10867:15;;;10862:2;10847:18;;10840:43;2921:39:140::1;::::0;10732:18:504;2921:39:140::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:140::1;-1:-1:-1::0;;;;;2966:23:140;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:140;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:140;;12333:2:504;2263:60:140;;;12315:21:504;12372:2;12352:18;;;12345:30;-1:-1:-1;;;12391:18:504;;;12384:51;12452:18;;2263:60:140;12131:345:504;2263:60:140;2378:16;2397:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2397:7:140;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:140;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:140;;;2605:32;;;-1:-1:-1;;;;;10815:15:504;;10797:34;;-1:-1:-1;10862:2:504;10847:18;;10840:43;2605:32:140;;10732:18:504;2605:32:140;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;10815:15:504;;;10797:34;;2681:12:140;;;10862:2:504;10847:18;;10840:43;2648:46:140;;10732:18:504;2648:46:140;10585:304:504;1599:130:454;1513:6;;-1:-1:-1;;;;;1513:6:454;929:10:467;1662:23:454;1654:68;;;;-1:-1:-1;;;1654:68:454;;12683:2:504;1654:68:454;;;12665:21:504;;;12702:18;;;12695:30;12761:34;12741:18;;;12734:62;12813:18;;1654:68:454;12481:356:504;1654:68:454;1599:130::o;562:129:140:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;638:16:140::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;2673:187:454:-;2765:6;;;-1:-1:-1;;;;;2781:17:454;;;-1:-1:-1;;;;;;2781:17:454;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1065:26:454::1;5363:13:457::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1176:32:454::1;929:10:467::0;1176:18:454::1;:32::i;-1:-1:-1:-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:173:504;82:20;;-1:-1:-1;;;;;131:31:504;;121:42;;111:70;;177:1;174;167:12;111:70;14:173;;;:::o;192:348::-;244:8;254:6;308:3;301:4;293:6;289:17;285:27;275:55;;326:1;323;316:12;275:55;-1:-1:-1;349:20:504;;392:18;381:30;;378:50;;;424:1;421;414:12;378:50;461:4;453:6;449:17;437:29;;513:3;506:4;497:6;489;485:19;481:30;478:39;475:59;;;530:1;527;520:12;475:59;192:348;;;;;:::o;545:634::-;643:6;651;659;667;675;728:3;716:9;707:7;703:23;699:33;696:53;;;745:1;742;735:12;696:53;768:29;787:9;768:29;:::i;:::-;758:39;;816:38;850:2;839:9;835:18;816:38;:::i;:::-;806:48;;905:2;894:9;890:18;877:32;932:18;924:6;921:30;918:50;;;964:1;961;954:12;918:50;1003:59;1054:7;1045:6;1034:9;1030:22;1003:59;:::i;:::-;1081:8;;-1:-1:-1;977:85:504;-1:-1:-1;1135:38:504;;-1:-1:-1;1169:2:504;1154:18;;1135:38;:::i;:::-;1125:48;;545:634;;;;;;;;:::o;1184:1578::-;1390:4;1419:2;1459;1448:9;1444:18;1489:2;1478:9;1471:21;1512:6;1547;1541:13;1578:6;1570;1563:22;1604:2;1594:12;;1637:2;1626:9;1622:18;1615:25;;1699:2;1689:6;1686:1;1682:14;1671:9;1667:30;1663:39;1737:2;1729:6;1725:15;1758:1;1779;1789:944;1805:6;1800:3;1797:15;1789:944;;;1874:22;;;-1:-1:-1;;1870:36:504;1858:49;;1930:13;;2059:9;;-1:-1:-1;;;;;2055:18:504;;;2040:34;;2113:11;;;2107:18;2145:15;;;2138:27;;;2226:19;;1970:15;;;2258:24;;;2348:21;;;;2393:1;;2316:2;2304:15;;;2407:218;2423:8;2418:3;2415:17;2407:218;;;2504:15;;2500:24;;2486:39;;2594:17;;;;2451:1;2442:11;;;;;2551:14;;;;2407:218;;;-1:-1:-1;2711:12:504;;;;2648:5;-1:-1:-1;;;2676:15:504;;;;-1:-1:-1;1831:1:504;1822:11;1789:944;;;-1:-1:-1;2750:6:504;;1184:1578;-1:-1:-1;;;;;;;;;1184:1578:504:o;2767:186::-;2826:6;2879:2;2867:9;2858:7;2854:23;2850:32;2847:52;;;2895:1;2892;2885:12;2847:52;2918:29;2937:9;2918:29;:::i;:::-;2908:39;2767:186;-1:-1:-1;;;2767:186:504:o;2958:472::-;3000:3;3038:5;3032:12;3065:6;3060:3;3053:19;3090:1;3100:162;3114:6;3111:1;3108:13;3100:162;;;3176:4;3232:13;;;3228:22;;3222:29;3204:11;;;3200:20;;3193:59;3129:12;3100:162;;;3280:6;3277:1;3274:13;3271:87;;;3346:1;3339:4;3330:6;3325:3;3321:16;3317:27;3310:38;3271:87;-1:-1:-1;3412:2:504;3391:15;-1:-1:-1;;3387:29:504;3378:39;;;;3419:4;3374:50;;2958:472;-1:-1:-1;;2958:472:504:o;3435:418::-;3603:4;3649:1;3645;3640:3;3636:11;3632:19;3690:2;3682:6;3678:15;3667:9;3660:34;3730:2;3725;3714:9;3710:18;3703:30;3750:45;3791:2;3780:9;3776:18;3768:6;3750:45;:::i;:::-;3742:53;;3843:2;3835:6;3831:15;3826:2;3815:9;3811:18;3804:43;;3435:418;;;;;;:::o;3858:317::-;-1:-1:-1;;;;;4035:32:504;;4017:51;;4104:2;4099;4084:18;;4077:30;;;-1:-1:-1;;4124:45:504;;4150:18;;4142:6;4124:45;:::i;:::-;4116:53;3858:317;-1:-1:-1;;;;3858:317:504:o;4180:403::-;4266:6;4274;4282;4290;4343:3;4331:9;4322:7;4318:23;4314:33;4311:53;;;4360:1;4357;4350:12;4311:53;4383:29;4402:9;4383:29;:::i;:::-;4373:39;;4431:38;4465:2;4454:9;4450:18;4431:38;:::i;:::-;4421:48;;4488:38;4522:2;4511:9;4507:18;4488:38;:::i;:::-;4180:403;;;;-1:-1:-1;4478:48:504;;4573:2;4558:18;4545:32;;-1:-1:-1;;4180:403:504:o;4588:689::-;4683:6;4691;4699;4752:2;4740:9;4731:7;4727:23;4723:32;4720:52;;;4768:1;4765;4758:12;4720:52;4791:29;4810:9;4791:29;:::i;:::-;4781:39;;4871:2;4860:9;4856:18;4843:32;4894:18;4935:2;4927:6;4924:14;4921:34;;;4951:1;4948;4941:12;4921:34;4989:6;4978:9;4974:22;4964:32;;5034:7;5027:4;5023:2;5019:13;5015:27;5005:55;;5056:1;5053;5046:12;5005:55;5096:2;5083:16;5122:2;5114:6;5111:14;5108:34;;;5138:1;5135;5128:12;5108:34;5191:7;5186:2;5176:6;5173:1;5169:14;5165:2;5161:23;5157:32;5154:45;5151:65;;;5212:1;5209;5202:12;5151:65;5243:2;5239;5235:11;5225:21;;5265:6;5255:16;;;;;4588:689;;;;;:::o;5282:1000::-;5511:2;5563:21;;;5633:13;;5536:18;;;5655:22;;;5482:4;;5511:2;5696;;5714:18;;;;5755:15;;;5482:4;5798:458;5812:6;5809:1;5806:13;5798:458;;;5871:13;;5955:9;;-1:-1:-1;;;;;5951:18:504;;;5939:31;;6014:11;;;6008:18;6004:27;;5990:12;;;5983:49;6076:11;;;6070:18;6066:27;6052:12;;;6045:49;6117:4;6161:11;;;6155:18;6141:12;;;6134:40;6203:4;6194:14;;;;6231:15;;;;5924:1;5827:9;5798:458;;;-1:-1:-1;6273:3:504;;5282:1000;-1:-1:-1;;;;;;;5282:1000:504:o;6287:180::-;6346:6;6399:2;6387:9;6378:7;6374:23;6370:32;6367:52;;;6415:1;6412;6405:12;6367:52;-1:-1:-1;6438:23:504;;6287:180;-1:-1:-1;6287:180:504:o;6933:559::-;7022:6;7030;7038;7046;7099:2;7087:9;7078:7;7074:23;7070:32;7067:52;;;7115:1;7112;7105:12;7067:52;7138:29;7157:9;7138:29;:::i;:::-;7128:39;;7186:38;7220:2;7209:9;7205:18;7186:38;:::i;:::-;7176:48;;7275:2;7264:9;7260:18;7247:32;7302:18;7294:6;7291:30;7288:50;;;7334:1;7331;7324:12;7288:50;7373:59;7424:7;7415:6;7404:9;7400:22;7373:59;:::i;:::-;6933:559;;;;-1:-1:-1;7451:8:504;-1:-1:-1;;;;6933:559:504:o;7705:260::-;7773:6;7781;7834:2;7822:9;7813:7;7809:23;7805:32;7802:52;;;7850:1;7847;7840:12;7802:52;7873:29;7892:9;7873:29;:::i;:::-;7863:39;;7921:38;7955:2;7944:9;7940:18;7921:38;:::i;:::-;7911:48;;7705:260;;;;;:::o;7970:485::-;8050:6;8058;8066;8119:2;8107:9;8098:7;8094:23;8090:32;8087:52;;;8135:1;8132;8125:12;8087:52;8175:9;8162:23;8208:18;8200:6;8197:30;8194:50;;;8240:1;8237;8230:12;8194:50;8279:59;8330:7;8321:6;8310:9;8306:22;8279:59;:::i;:::-;8357:8;;-1:-1:-1;8253:85:504;-1:-1:-1;8411:38:504;;-1:-1:-1;8445:2:504;8430:18;;8411:38;:::i;:::-;8401:48;;7970:485;;;;;:::o;8460:396::-;8518:3;8563:1;8559;8554:3;8550:11;8546:19;8604:2;8596:5;8590:12;8586:21;8581:3;8574:34;8654:4;8647:5;8643:16;8637:23;8692:4;8685;8680:3;8676:14;8669:28;8718:47;8759:4;8754:3;8750:14;8736:12;8718:47;:::i;:::-;8706:59;;8826:2;8818:4;8811:5;8807:16;8801:23;8797:32;8790:4;8785:3;8781:14;8774:56;8846:4;8839:11;;;;8460:396;;;;:::o;8861:284::-;9058:2;9047:9;9040:21;9021:4;9078:61;9135:2;9124:9;9120:18;9112:6;9078:61;:::i;9150:334::-;9227:6;9235;9243;9296:2;9284:9;9275:7;9271:23;9267:32;9264:52;;;9312:1;9309;9302:12;9264:52;9335:29;9354:9;9335:29;:::i;:::-;9325:39;;9383:38;9417:2;9406:9;9402:18;9383:38;:::i;:::-;9373:48;;9440:38;9474:2;9463:9;9459:18;9440:38;:::i;9489:411::-;9560:6;9568;9621:2;9609:9;9600:7;9596:23;9592:32;9589:52;;;9637:1;9634;9627:12;9589:52;9677:9;9664:23;9710:18;9702:6;9699:30;9696:50;;;9742:1;9739;9732:12;9696:50;9781:59;9832:7;9823:6;9812:9;9808:22;9781:59;:::i;:::-;9859:8;;9755:85;;-1:-1:-1;9489:411:504;-1:-1:-1;;;;9489:411:504:o;10200:380::-;10279:1;10275:12;;;;10322;;;10343:61;;10397:4;10389:6;10385:17;10375:27;;10343:61;10450:2;10442:6;10439:14;10419:18;10416:38;10413:161;;;10496:10;10491:3;10487:20;10484:1;10477:31;10531:4;10528:1;10521:15;10559:4;10556:1;10549:15;10413:161;;10200:380;;;:::o;11239:273::-;11424:6;11416;11411:3;11398:33;11380:3;11450:16;;11475:13;;;11450:16;11239:273;-1:-1:-1;11239:273:504:o;12842:407::-;13044:2;13026:21;;;13083:2;13063:18;;;13056:30;13122:34;13117:2;13102:18;;13095:62;-1:-1:-1;;;13188:2:504;13173:18;;13166:41;13239:3;13224:19;;12842:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "balancerPoolForTokens(address,address)": "984d8655", + "curveSwapPoolsConfig(uint256)": "ceb4e943", + "flywheelRewards(address)": "4172e7f9", + "fundingStrategiesConfig(address)": "316eb395", + "getAddress(string)": "bf40fac1", + "getBalancerPoolForTokens(address,address)": "959fc097", + "getCurveSwapPools()": "2cf3219c", + "getFundingStrategy(address)": "a13449d6", + "getJarvisPools()": "77d79219", + "getRedemptionStrategy(address)": "cf78b30a", + "initialize(address)": "c4d66de8", + "jarvisPoolsConfig(uint256)": "7930b9b0", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "plugins(address)": "4b12e643", + "redemptionStrategiesConfig(address)": "b40dc803", + "renounceOwnership()": "715018a6", + "setAddress(string,address)": "9b2ea4bd", + "setBalancerPoolForTokens(address,address,address)": "b9197554", + "setCurveSwapPool(address,address[])": "62772c73", + "setFlywheelRewards(address,address,string)": "a11b73a6", + "setFundingStrategy(address,address,string,address)": "073d0b6c", + "setJarvisPool(address,address,address,uint256)": "44fca697", + "setPlugin(address,address,string)": "81bc3632", + "setRedemptionStrategy(address,address,string,address)": "1783a521", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/AddressesProvider_Proxy.json b/packages/sdk/deployments/bob/AddressesProvider_Proxy.json new file mode 100644 index 000000000..52ff61ada --- /dev/null +++ b/packages/sdk/deployments/bob/AddressesProvider_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "transactionIndex": 1, + "gasUsed": "772720", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000001002000001000000000000100000000000000000000100020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000200000000004000000000000000000000080000000000000", + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec", + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000bbdca7858ac2417b06636f7ba35e7d9ea39402ea" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + }, + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + }, + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + }, + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + }, + { + "transactionIndex": 1, + "blockNumber": 3777885, + "transactionHash": "0x02a97d4f4b194985285607ff8a45fbd0a93678a2bf89657a2ab7a0cbc89aff55", + "address": "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0xb326bdd4de33946058fa693cf5d5bdd4aa6c8971022731d58e240adec35ee6ec" + } + ], + "blockNumber": 3777885, + "cumulativeGasUsed": "816559", + "status": 1, + "byzantium": true + }, + "args": [ + "0xBbDcA7858ac2417b06636F7BA35e7d9EA39402ea", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xc4d66de80000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/AuthoritiesRegistry.json b/packages/sdk/deployments/bob/AuthoritiesRegistry.json new file mode 100644 index 000000000..770237549 --- /dev/null +++ b/packages/sdk/deployments/bob/AuthoritiesRegistry.json @@ -0,0 +1,636 @@ +{ + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "canCall", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + }, + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "functionSig", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createPoolAuthority", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "auth", + "type": "address", + "internalType": "contract PoolRolesAuthority" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_leveredPositionsFactory", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "leveredPositionsFactory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "noAuthRequired", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolAuthLogic", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract PoolRolesAuthority" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolsAuthorities", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract PoolRolesAuthority" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "reconfigureAuthority", + "inputs": [ + { + "name": "poolAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reinitialize", + "inputs": [ + { + "name": "_leveredPositionsFactory", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setUserRole", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + }, + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "role", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "enabled", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "transactionIndex": 1, + "gasUsed": "2297185", + "logsBloom": "0x00020000000000000000000000000000400000000000000001800000000200000000000000040000000010000100000000100000100000000008000000000004000000000000040000080000000002000001000000000000000000000000000000200000020000000000000000000800000000800000000000000000000000400000000000000000000080000000000000000000000080000000000000c02001000000000000000000000000000400000000000000000000000000000000000000000020040000000000000000040000000008000400000040000000000020000000000000000000020000000000000000000000000000000000000000000000", + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1", + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000ca0ae3039b8825cd7a968ceda6d99a49458722af" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x21824D2F3fE7B2ea8696E175dC34cf949E00c433", + "topics": [ + "0x8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76", + "0x000000000000000000000000522e808b99a89f0587906eb0a913675d35a936f6", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x21824D2F3fE7B2ea8696E175dC34cf949E00c433", + "topics": [ + "0xa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198", + "0x000000000000000000000000522e808b99a89f0587906eb0a913675d35a936f6", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x21824D2F3fE7B2ea8696E175dC34cf949E00c433", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "logIndex": 5, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 6, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 7, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + } + ], + "blockNumber": 3778042, + "cumulativeGasUsed": "2341024", + "status": 1, + "byzantium": true + }, + "args": [ + "0xcA0aE3039B8825Cd7A968ceda6D99a49458722aF", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xc4d66de80000000000000000000000001dd45c9fb4c8ccb678781982774f006f24b8eac1" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1" + ] + }, + "implementation": "0xcA0aE3039B8825Cd7A968ceda6D99a49458722aF", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/AuthoritiesRegistry_Implementation.json b/packages/sdk/deployments/bob/AuthoritiesRegistry_Implementation.json new file mode 100644 index 000000000..98b413fc0 --- /dev/null +++ b/packages/sdk/deployments/bob/AuthoritiesRegistry_Implementation.json @@ -0,0 +1,946 @@ +{ + "address": "0xcA0aE3039B8825Cd7A968ceda6D99a49458722aF", + "abi": [ + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "canCall", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + }, + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "functionSig", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createPoolAuthority", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "auth", + "type": "address", + "internalType": "contract PoolRolesAuthority" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_leveredPositionsFactory", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "leveredPositionsFactory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "noAuthRequired", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolAuthLogic", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract PoolRolesAuthority" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolsAuthorities", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract PoolRolesAuthority" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "reconfigureAuthority", + "inputs": [ + { + "name": "poolAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reinitialize", + "inputs": [ + { + "name": "_leveredPositionsFactory", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setUserRole", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + }, + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "role", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "enabled", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x6e9d089a79dbb6501082eaa3cfc5017ceb708ce3863eb547f32d097910238493", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xcA0aE3039B8825Cd7A968ceda6D99a49458722aF", + "transactionIndex": 1, + "gasUsed": "3582477", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x2f10da4d58e5cbe160bbb806dcb89cb2c0e748b0f48d6e585fb86c327bc270a1", + "transactionHash": "0x6e9d089a79dbb6501082eaa3cfc5017ceb708ce3863eb547f32d097910238493", + "logs": [], + "blockNumber": 3778038, + "cumulativeGasUsed": "3626316", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "functionSig", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "canCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "createPoolAuthority", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "auth", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_leveredPositionsFactory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "leveredPositionsFactory", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "noAuthRequired", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "poolAuthLogic", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "poolsAuthorities", + "outputs": [ + { + "internalType": "contract PoolRolesAuthority", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "poolAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reconfigureAuthority" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_leveredPositionsFactory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reinitialize" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "uint8", + "name": "role", + "type": "uint8" + }, + { + "internalType": "bool", + "name": "enabled", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setUserRole" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/AuthoritiesRegistry.sol": "AuthoritiesRegistry" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50613fe5806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001155760003560e01c8063c4d66de811620000a3578063ec2ffdd1116200006e578063ec2ffdd11462000241578063f2fde38b146200026d578063f7e7d1fd1462000284578063fc4d33f9146200029b57600080fd5b8063c4d66de814620001e8578063ca224d9814620001ff578063df595cb81462000216578063e30c3978146200022d57600080fd5b80637a084dac11620000e45780637a084dac14620001855780638da5cb5b14620001ab57806395f14b1614620001bd578063a1a82b5614620001d157600080fd5b806354927fb8146200011a5780635a89ef51146200014b5780636e96dfd71462000164578063715018a6146200017b575b600080fd5b6067546200012e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001626200015c36600462001297565b620002a5565b005b620001626200017536600462001297565b62000670565b62000162620006dc565b6068546200019a90600160a01b900460ff1681565b604051901515815260200162000142565b6033546001600160a01b03166200012e565b6068546200012e906001600160a01b031681565b6200012e620001e236600462001297565b62000722565b62000162620001f936600462001297565b620009ed565b6200016262000210366004620012dd565b62000b6d565b6200019a6200022736600462001342565b62000d71565b6065546200012e906001600160a01b031681565b6200012e6200025236600462001297565b6066602052600090815260409020546001600160a01b031681565b620001626200027e36600462001297565b62000e3a565b620001626200029536600462001297565b62000ead565b6200016262000ff6565b6001600160a01b038082166000818152606660205260409020548392169033141580620002da57506001600160a01b03811615155b156200066b576001600160a01b038116620003305760405162461bcd60e51b81526020600482015260116024820152706e6f207375636820617574686f7269747960781b60448201526064015b60405180910390fd5b6033546001600160a01b0316331480620003525750336001600160a01b038416145b620003945760405162461bcd60e51b81526020600482015260116024820152701b9bdd081bdddb995c881bdc881c1bdbdb607a1b604482015260640162000327565b806001600160a01b031663e347416d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620003d057600080fd5b505af1158015620003e5573d6000803e3d6000fd5b5050604051630c22644560e01b81526001600160a01b03858116600483015284169250630c2264459150602401600060405180830381600087803b1580156200042d57600080fd5b505af115801562000442573d6000803e3d6000fd5b5050604051630a4c60c560e41b81526001600160a01b0385811660048301528416925063a4c60c509150602401600060405180830381600087803b1580156200048a57600080fd5b505af11580156200049f573d6000803e3d6000fd5b5050604051637875b94560e01b81526001600160a01b03858116600483015284169250637875b9459150602401600060405180830381600087803b158015620004e757600080fd5b505af1158015620004fc573d6000803e3d6000fd5b505060405163387beb5760e11b81526001600160a01b038581166004830152841692506370f7d6ae9150602401600060405180830381600087803b1580156200054457600080fd5b505af115801562000559573d6000803e3d6000fd5b50505050620005706033546001600160a01b031690565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005de9190620013a8565b6001600160a01b0316146200066b57806001600160a01b03166313af40356200060f6033546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200065157600080fd5b505af115801562000666573d6000803e3d6000fd5b505050505b505050565b6200067a62001110565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b620006e662001110565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b604482015260640162000327565b60006200072e62001110565b6001600160a01b0382811660009081526066602052604090205416156200078a5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818dc99585d1959608a1b604482015260640162000327565b6067546000906001600160a01b0316620007cb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b604051620007d99062001265565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200081c573d6000803e3d6000fd5b5060405163189acdbd60e31b81523060048201529092508291506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156200086557600080fd5b505af11580156200087a573d6000803e3d6000fd5b505050506001600160a01b038381166000818152606660205260409081902080546001600160a01b0319169386169384179055516319883fc160e01b815260048101919091526319883fc190602401600060405180830381600087803b158015620008e457600080fd5b505af1158015620008f9573d6000803e3d6000fd5b50505050816001600160a01b03166367aff48430846001600160a01b03166342f1e8796040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200094c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009729190620013c8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260ff16602482015260016044820152606401600060405180830381600087803b158015620009c357600080fd5b505af1158015620009d8573d6000803e3d6000fd5b50505050620009e783620002a5565b50919050565b600054610100900460ff161580801562000a0e5750600054600160ff909116105b8062000a2a5750303b15801562000a2a575060005460ff166001145b62000a8f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000327565b6000805460ff19166001179055801562000ab3576000805461ff0019166101001790555b62000abe336200116e565b606880546001600160a01b0319166001600160a01b03841617905560405162000ae79062001273565b604051809103906000f08015801562000b04573d6000803e3d6000fd5b50606780546001600160a01b0319166001600160a01b0392909216919091179055801562000b69576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001620006d0565b5050565b6001600160a01b03808516600090815260666020526040902054168062000bcd5760405162461bcd60e51b8152602060048201526013602482015272185d5d1a08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640162000327565b6033546001600160a01b031633148062000bf157506068546001600160a01b031633145b62000c365760405162461bcd60e51b81526020600482015260146024820152736e6f74206f776e6572206f7220666163746f727960601b604482015260640162000327565b6068546001600160a01b03163314158062000cba5750806001600160a01b0316633300183c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb19190620013c8565b60ff168360ff16145b62000cfc5760405162461bcd60e51b81526020600482015260116024820152706f6e6c79206c657620706f7320726f6c6560781b604482015260640162000327565b6040516319ebfd2160e21b81526001600160a01b03858116600483015260ff8516602483015283151560448301528216906367aff48490606401600060405180830381600087803b15801562000d5157600080fd5b505af115801562000d66573d6000803e3d6000fd5b505050505050505050565b6001600160a01b038085166000908152606660205260408120549091168062000da9575050606854600160a01b900460ff1662000e32565b60405163b700961360e01b81526001600160a01b03868116600483015285811660248301526001600160e01b03198516604483015282169063b700961390606401602060405180830381865afa15801562000e08573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e2e9190620013e8565b9150505b949350505050565b62000e4462001110565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633148062000f7057600062000ef57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b03811633148062000f6d5760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b606482015260840162000327565b50505b606880546001600160a01b0319166001600160a01b03841617905560405162000f999062001273565b604051809103906000f08015801562000fb6573d6000803e3d6000fd5b50606780546001600160a01b0319166001600160a01b039290921691909117905550506068805460ff60a01b191646630e9ac0d614600160a01b02179055565b6065546001600160a01b031633146200104a5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b604482015260640162000327565b60006200105f6033546001600160a01b031690565b6065549091506001600160a01b03166200107981620011b0565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101620006d0565b6033546001600160a01b031633146200116c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000327565b565b600054610100900460ff16620011985760405162461bcd60e51b8152600401620003279062001408565b620011a262001202565b620011ad81620011b0565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166200122c5760405162461bcd60e51b8152600401620003279062001408565b6200116c600054610100900460ff166200125a5760405162461bcd60e51b8152600401620003279062001408565b6200116c33620011b0565b610e6f806200145483390190565b611d1680620022c383390190565b6001600160a01b0381168114620011ad57600080fd5b600060208284031215620012aa57600080fd5b8135620012b78162001281565b9392505050565b60ff81168114620011ad57600080fd5b8015158114620011ad57600080fd5b60008060008060808587031215620012f457600080fd5b8435620013018162001281565b93506020850135620013138162001281565b925060408501356200132581620012be565b915060608501356200133781620012ce565b939692955090935050565b600080600080608085870312156200135957600080fd5b8435620013668162001281565b93506020850135620013788162001281565b925060408501356200138a8162001281565b915060608501356001600160e01b0319811681146200133757600080fd5b600060208284031215620013bb57600080fd5b8151620012b78162001281565b600060208284031215620013db57600080fd5b8151620012b781620012be565b600060208284031215620013fb57600080fd5b8151620012b781620012ce565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe608060405260405162000e6f38038062000e6f83398101604081905262000026916200049d565b828162000036828260006200004d565b50620000449050826200008a565b505050620005d0565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620002601760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e4860279139620002f8565b9392505050565b60006200018060008051602062000e2883398151915260001b6200037760201b620002081760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e2883398151915260001b6200037760201b620002081760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b6200028c1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620002081760201c565b6060600080856001600160a01b0316856040516200031791906200057d565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fa578251620003f2576001600160a01b0385163b620003f25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000406565b6200040683836200040e565b949350505050565b8151156200041f5781518083602001fd5b8060405162461bcd60e51b8152600401620001f191906200059b565b80516001600160a01b03811681146200045357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048b57818101518382015260200162000471565b83811115620000835750506000910152565b600080600060608486031215620004b357600080fd5b620004be846200043b565b9250620004ce602085016200043b565b60408501519092506001600160401b0380821115620004ec57600080fd5b818601915086601f8301126200050157600080fd5b81518181111562000516576200051662000458565b604051601f8201601f19908116603f0116810190838211818310171562000541576200054162000458565b816040528281528960208487010111156200055b57600080fd5b6200056e8360208301602088016200046e565b80955050505050509250925092565b60008251620005918184602087016200046e565b9190910192915050565b6020815260008251806020840152620005bc8160408501602087016200046e565b601f01601f19169190910160400192915050565b61084880620005e06000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106fb565b610118565b61005b610093366004610716565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106fb565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108156027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610492565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a4836104ba565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816104fa565b6060600080856001600160a01b03168560405161043791906107c5565b600060405180830381855af49150503d8060008114610472576040519150601f19603f3d011682016040523d82523d6000602084013e610477565b606091505b5091509150610488868383876105a3565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6104c381610621565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661055f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561060f578251610608576001600160a01b0385163b6106085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610331565b5081610619565b61061983836106b5565b949350505050565b6001600160a01b0381163b61068e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610582565b8151156106c55781518083602001fd5b8060405162461bcd60e51b815260040161033191906107e1565b80356001600160a01b03811681146106f657600080fd5b919050565b60006020828403121561070d57600080fd5b610285826106df565b60008060006040848603121561072b57600080fd5b610734846106df565b9250602084013567ffffffffffffffff8082111561075157600080fd5b818601915086601f83011261076557600080fd5b81358181111561077457600080fd5b87602082850101111561078657600080fd5b6020830194508093505050509250925092565b60005b838110156107b457818101518382015260200161079c565b838111156103c05750506000910152565b600082516107d7818460208701610799565b9190910192915050565b6020815260008251806020840152610800816040850160208701610799565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b50600080546001600160a01b03199081168255600180549091169055604051819081908190819033907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908390a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505050506100a66100ab60201b60201c565b61016b565b600554610100900460ff16156101175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60055460ff9081161015610169576005805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611b9c8061017a6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637875b94511610104578063b4bad06a116100a2578063c6b0263e11610071578063c6b0263e14610441578063d8e708cd14610454578063e347416d14610467578063ea7ca2761461046f57600080fd5b8063b4bad06a146103bb578063b700961314610408578063bf7e214f1461041b578063c4d66de81461042e57600080fd5b80637d40583d116100de5780637d40583d146103625780638da5cb5b14610375578063a29508fc146103a0578063a4c60c50146103a857600080fd5b80637875b945146103115780637917b794146103245780637a9e5e4b1461034f57600080fd5b80632f47571f116101715780633c0689751161014b5780633c068975146102d057806342f1e879146102e357806367aff484146102eb57806370f7d6ae146102fe57600080fd5b80632f47571f1461027757806332c9c4d8146102b55780633300183c146102c857600080fd5b806313af4035116101ad57806313af40351461023657806313e27f8b1461024957806316d8887a1461025c57806319883fc11461026457600080fd5b806306a36aee146101d45780630c226445146102075780630e7b949e1461021c575b600080fd5b6101f46101e23660046117e0565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61021a6102153660046117e0565b6104a6565b005b610224600281565b60405160ff90911681526020016101fe565b61021a6102443660046117e0565b6104ef565b61021a6102573660046117e0565b61056c565b610224600381565b61021a6102723660046117e0565b6105a9565b6102a5610285366004611821565b600360209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101fe565b61021a6102c33660046117e0565b6105e6565b610224600481565b61021a6102de3660046117e0565b61072d565b610224600081565b61021a6102f9366004611875565b61076a565b61021a61030c3660046117e0565b61083f565b61021a61031f3660046117e0565b610a20565b6101f4610332366004611821565b600460209081526000928352604080842090915290825290205481565b61021a61035d3660046117e0565b610b32565b61021a6103703660046118be565b610c1c565b600054610388906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b610224600181565b61021a6103b63660046117e0565b610d27565b6102a56103c9366004611916565b6001600160a01b039190911660009081526004602090815260408083206001600160e01b031990941683529290522054600160ff929092161c16151590565b6102a561041636600461195b565b610e5f565b600154610388906001600160a01b031681565b61021a61043c3660046117e0565b610ede565b61021a61044f36600461197b565b611011565b61021a6104623660046117e0565b6110b2565b61021a6110ef565b6102a561047d3660046119a9565b6001600160a01b0391909116600090815260026020526040902054600160ff9092161c16151590565b6104bc336000356001600160e01b0319166111b6565b6104e15760405162461bcd60e51b81526004016104d8906119d5565b60405180910390fd5b6104ec81600161125f565b50565b610505336000356001600160e01b0319166111b6565b6105215760405162461bcd60e51b81526004016104d8906119d5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b610582336000356001600160e01b0319166111b6565b61059e5760405162461bcd60e51b81526004016104d8906119d5565b6104ec816001611381565b6105bf336000356001600160e01b0319166111b6565b6105db5760405162461bcd60e51b81526004016104d8906119d5565b6104ec8160016114b5565b6105fc336000356001600160e01b0319166111b6565b6106185760405162461bcd60e51b81526004016104d8906119d5565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106809190810190611a1c565b905060005b8151811015610728576106ba8282815181106106a3576106a3611ae1565b602002602001015163f5e3c46260e01b6000611011565b6106e860038383815181106106d1576106d1611ae1565b602002602001015163f5e3c46260e01b6001610c1c565b61071660038383815181106106ff576106ff611ae1565b602002602001015163db006a7560e01b6001610c1c565b8061072081611b0d565b915050610685565b505050565b610743336000356001600160e01b0319166111b6565b61075f5760405162461bcd60e51b81526004016104d8906119d5565b6104ec816000611381565b610780336000356001600160e01b0319166111b6565b61079c5760405162461bcd60e51b81526004016104d8906119d5565b80156107cb576001600160a01b03831660009081526002602052604090208054600160ff85161b1790556107f1565b6001600160a01b03831660009081526002602052604090208054600160ff85161b191690555b8160ff16836001600160a01b03167f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf283604051610832911515815260200190565b60405180910390a3505050565b610855336000356001600160e01b0319166111b6565b6108715760405162461bcd60e51b81526004016104d8906119d5565b610886600482631853304760e31b6001610c1c565b61089b600482630ede4edd60e41b6001610c1c565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109039190810190611a1c565b905060005b81518110156107285761093f600483838151811061092857610928611ae1565b602002602001015163a0712d6860e01b6001610c1c565b61095660048383815181106106ff576106ff611ae1565b610984600483838151811061096d5761096d611ae1565b602002602001015163852a12e360e01b6001610c1c565b6109b2600483838151811061099b5761099b611ae1565b602002602001015163c5ebeaec60e01b6001610c1c565b6109e060048383815181106109c9576109c9611ae1565b6020026020010151630e75270260e01b6001610c1c565b610a0e60048383815181106109f7576109f7611ae1565b6020026020010151633c3b4b8960e01b6001610c1c565b80610a1881611b0d565b915050610908565b610a36336000356001600160e01b0319166111b6565b610a525760405162461bcd60e51b81526004016104d8906119d5565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aba9190810190611a1c565b905060005b815181101561072857610af4828281518110610add57610add611ae1565b602002602001015163f5e3c46260e01b6001611011565b610b20828281518110610b0957610b09611ae1565b602002602001015163db006a7560e01b6001611011565b80610b2a81611b0d565b915050610abf565b6000546001600160a01b0316331480610bc7575060015460405163b700961360e01b81526001600160a01b039091169063b700961390610b8690339030906001600160e01b03196000351690600401611b28565b602060405180830381865afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190611b55565b610bd057600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b610c32336000356001600160e01b0319166111b6565b610c4e5760405162461bcd60e51b81526004016104d8906119d5565b8015610c92576001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b179055610ccd565b6001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b191690555b816001600160e01b031916836001600160a01b03168560ff167fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e84604051610d19911515815260200190565b60405180910390a450505050565b610d3d336000356001600160e01b0319166111b6565b610d595760405162461bcd60e51b81526004016104d8906119d5565b610d6481600261125f565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dcc9190810190611a1c565b905060005b815181101561072857610df1600283838151811061099b5761099b611ae1565b610e0860028383815181106109c9576109c9611ae1565b610e366002838381518110610e1f57610e1f611ae1565b6020026020010151632608f81860e01b6001610c1c565b610e4d60028383815181106109f7576109f7611ae1565b80610e5781611b0d565b915050610dd1565b6001600160a01b03821660009081526003602090815260408083206001600160e01b03198516845290915281205460ff1680610ed657506001600160a01b0380841660009081526004602090815260408083206001600160e01b031987168452825280832054938816835260029091529020541615155b949350505050565b600554610100900460ff1615808015610efe5750600554600160ff909116105b80610f185750303b158015610f18575060055460ff166001145b610f7b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d8565b6005805460ff191660011790558015610f9e576005805461ff0019166101001790555b600080546001600160a01b0384166001600160a01b0319918216179091556001805490911630179055801561100d576005805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b611027336000356001600160e01b0319166111b6565b6110435760405162461bcd60e51b81526004016104d8906119d5565b6001600160a01b03831660008181526003602090815260408083206001600160e01b0319871680855290835292819020805460ff191686151590811790915590519081529192917f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9101610832565b6110c8336000356001600160e01b0319166111b6565b6110e45760405162461bcd60e51b81526004016104d8906119d5565b6104ec8160006114b5565b611105336000356001600160e01b0319166111b6565b6111215760405162461bcd60e51b81526004016104d8906119d5565b61113660003063e347416d60e01b6001610c1c565b61114b600030630c22644560e01b6001610c1c565b611160600030630a4c60c560e41b6001610c1c565b611175600030630659389b60e31b6001610c1c565b61118a600030637875b94560e01b6001610c1c565b61119f60003063387beb5760e11b6001610c1c565b6111b46000306319ebfd2160e21b6001610c1c565b565b6001546000906001600160a01b03168015801590611240575060405163b700961360e01b81526001600160a01b0382169063b7009613906111ff90879030908890600401611b28565b602060405180830381865afa15801561121c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112409190611b55565b80610ed657506000546001600160a01b03858116911614949350505050565b6112738183631853304760e31b6001610c1c565b6112878183630ede4edd60e41b6001610c1c565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ef9190810190611a1c565b905060005b815181101561137b5760006113076115cb565b905060005b8151811015611366576113548585858151811061132b5761132b611ae1565b602002602001015184848151811061134557611345611ae1565b60200260200101516001610c1c565b8061135e81611b0d565b91505061130c565b5050808061137390611b0d565b9150506112f4565b50505050565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e99190810190611a1c565b905060005b815181101561137b5761142282828151811061140c5761140c611ae1565b602002602001015163c5ebeaec60e01b85611011565b61144d82828151811061143757611437611ae1565b6020026020010151630e75270260e01b85611011565b61147882828151811061146257611462611ae1565b6020026020010151632608f81860e01b85611011565b6114a382828151811061148d5761148d611ae1565b6020026020010151633c3b4b8960e01b85611011565b806114ad81611b0d565b9150506113ee565b6114c782631853304760e31b83611011565b6114d982630ede4edd60e41b83611011565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115419190810190611a1c565b905060005b815181101561137b5760006115596115cb565b905060005b81518110156115b6576115a484848151811061157c5761157c611ae1565b602002602001015183838151811061159657611596611ae1565b602002602001015187611011565b806115ae81611b0d565b91505061155e565b505080806115c390611b0d565b915050611546565b60408051600680825260e0820190925260609190816020820160c08036833701905050915063140e25ad60e31b8261160283611b72565b92508260ff168151811061161857611618611ae1565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b8261164383611b72565b92508260ff168151811061165957611659611ae1565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b8261168483611b72565b92508260ff168151811061169a5761169a611ae1565b6001600160e01b03199092166020928302919091019091015263a9059cbb60e01b826116c583611b72565b92508260ff16815181106116db576116db611ae1565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8261170683611b72565b92508260ff168151811061171c5761171c611ae1565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b8261174783611b72565b92508260ff168151811061175d5761175d611ae1565b6001600160e01b03199092166020928302919091019091015260ff8116156117c75760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104d8565b5090565b6001600160a01b03811681146104ec57600080fd5b6000602082840312156117f257600080fd5b81356117fd816117cb565b9392505050565b80356001600160e01b03198116811461181c57600080fd5b919050565b6000806040838503121561183457600080fd5b823561183f816117cb565b915061184d60208401611804565b90509250929050565b803560ff8116811461181c57600080fd5b80151581146104ec57600080fd5b60008060006060848603121561188a57600080fd5b8335611895816117cb565b92506118a360208501611856565b915060408401356118b381611867565b809150509250925092565b600080600080608085870312156118d457600080fd5b6118dd85611856565b935060208501356118ed816117cb565b92506118fb60408601611804565b9150606085013561190b81611867565b939692955090935050565b60008060006060848603121561192b57600080fd5b61193484611856565b92506020840135611944816117cb565b915061195260408501611804565b90509250925092565b60008060006060848603121561197057600080fd5b8335611934816117cb565b60008060006060848603121561199057600080fd5b833561199b816117cb565b92506118a360208501611804565b600080604083850312156119bc57600080fd5b82356119c7816117cb565b915061184d60208401611856565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b805161181c816117cb565b60006020808385031215611a2f57600080fd5b825167ffffffffffffffff80821115611a4757600080fd5b818501915085601f830112611a5b57600080fd5b815181811115611a6d57611a6d6119fb565b8060051b604051601f19603f83011681018181108582111715611a9257611a926119fb565b604052918252848201925083810185019188831115611ab057600080fd5b938501935b82851015611ad557611ac685611a11565b84529385019392850192611ab5565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611b2157611b21611af7565b5060010190565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215611b6757600080fd5b81516117fd81611867565b600060ff821680611b8557611b85611af7565b600019019291505056fea164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "409:3105:134:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040523480156200001157600080fd5b5060043610620001155760003560e01c8063c4d66de811620000a3578063ec2ffdd1116200006e578063ec2ffdd11462000241578063f2fde38b146200026d578063f7e7d1fd1462000284578063fc4d33f9146200029b57600080fd5b8063c4d66de814620001e8578063ca224d9814620001ff578063df595cb81462000216578063e30c3978146200022d57600080fd5b80637a084dac11620000e45780637a084dac14620001855780638da5cb5b14620001ab57806395f14b1614620001bd578063a1a82b5614620001d157600080fd5b806354927fb8146200011a5780635a89ef51146200014b5780636e96dfd71462000164578063715018a6146200017b575b600080fd5b6067546200012e906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b620001626200015c36600462001297565b620002a5565b005b620001626200017536600462001297565b62000670565b62000162620006dc565b6068546200019a90600160a01b900460ff1681565b604051901515815260200162000142565b6033546001600160a01b03166200012e565b6068546200012e906001600160a01b031681565b6200012e620001e236600462001297565b62000722565b62000162620001f936600462001297565b620009ed565b6200016262000210366004620012dd565b62000b6d565b6200019a6200022736600462001342565b62000d71565b6065546200012e906001600160a01b031681565b6200012e6200025236600462001297565b6066602052600090815260409020546001600160a01b031681565b620001626200027e36600462001297565b62000e3a565b620001626200029536600462001297565b62000ead565b6200016262000ff6565b6001600160a01b038082166000818152606660205260409020548392169033141580620002da57506001600160a01b03811615155b156200066b576001600160a01b038116620003305760405162461bcd60e51b81526020600482015260116024820152706e6f207375636820617574686f7269747960781b60448201526064015b60405180910390fd5b6033546001600160a01b0316331480620003525750336001600160a01b038416145b620003945760405162461bcd60e51b81526020600482015260116024820152701b9bdd081bdddb995c881bdc881c1bdbdb607a1b604482015260640162000327565b806001600160a01b031663e347416d6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620003d057600080fd5b505af1158015620003e5573d6000803e3d6000fd5b5050604051630c22644560e01b81526001600160a01b03858116600483015284169250630c2264459150602401600060405180830381600087803b1580156200042d57600080fd5b505af115801562000442573d6000803e3d6000fd5b5050604051630a4c60c560e41b81526001600160a01b0385811660048301528416925063a4c60c509150602401600060405180830381600087803b1580156200048a57600080fd5b505af11580156200049f573d6000803e3d6000fd5b5050604051637875b94560e01b81526001600160a01b03858116600483015284169250637875b9459150602401600060405180830381600087803b158015620004e757600080fd5b505af1158015620004fc573d6000803e3d6000fd5b505060405163387beb5760e11b81526001600160a01b038581166004830152841692506370f7d6ae9150602401600060405180830381600087803b1580156200054457600080fd5b505af115801562000559573d6000803e3d6000fd5b50505050620005706033546001600160a01b031690565b6001600160a01b0316816001600160a01b0316638da5cb5b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620005b8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005de9190620013a8565b6001600160a01b0316146200066b57806001600160a01b03166313af40356200060f6033546001600160a01b031690565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401600060405180830381600087803b1580156200065157600080fd5b505af115801562000666573d6000803e3d6000fd5b505050505b505050565b6200067a62001110565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b620006e662001110565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b604482015260640162000327565b60006200072e62001110565b6001600160a01b0382811660009081526066602052604090205416156200078a5760405162461bcd60e51b815260206004820152600f60248201526e185b1c9958591e4818dc99585d1959608a1b604482015260640162000327565b6067546000906001600160a01b0316620007cb7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b604051620007d99062001265565b6001600160a01b03928316815291166020820152606060408201819052600090820152608001604051809103906000f0801580156200081c573d6000803e3d6000fd5b5060405163189acdbd60e31b81523060048201529092508291506001600160a01b0382169063c4d66de890602401600060405180830381600087803b1580156200086557600080fd5b505af11580156200087a573d6000803e3d6000fd5b505050506001600160a01b038381166000818152606660205260409081902080546001600160a01b0319169386169384179055516319883fc160e01b815260048101919091526319883fc190602401600060405180830381600087803b158015620008e457600080fd5b505af1158015620008f9573d6000803e3d6000fd5b50505050816001600160a01b03166367aff48430846001600160a01b03166342f1e8796040518163ffffffff1660e01b8152600401602060405180830381865afa1580156200094c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009729190620013c8565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260ff16602482015260016044820152606401600060405180830381600087803b158015620009c357600080fd5b505af1158015620009d8573d6000803e3d6000fd5b50505050620009e783620002a5565b50919050565b600054610100900460ff161580801562000a0e5750600054600160ff909116105b8062000a2a5750303b15801562000a2a575060005460ff166001145b62000a8f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b606482015260840162000327565b6000805460ff19166001179055801562000ab3576000805461ff0019166101001790555b62000abe336200116e565b606880546001600160a01b0319166001600160a01b03841617905560405162000ae79062001273565b604051809103906000f08015801562000b04573d6000803e3d6000fd5b50606780546001600160a01b0319166001600160a01b0392909216919091179055801562000b69576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001620006d0565b5050565b6001600160a01b03808516600090815260666020526040902054168062000bcd5760405162461bcd60e51b8152602060048201526013602482015272185d5d1a08191bd95cc81b9bdd08195e1a5cdd606a1b604482015260640162000327565b6033546001600160a01b031633148062000bf157506068546001600160a01b031633145b62000c365760405162461bcd60e51b81526020600482015260146024820152736e6f74206f776e6572206f7220666163746f727960601b604482015260640162000327565b6068546001600160a01b03163314158062000cba5750806001600160a01b0316633300183c6040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000c8b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000cb19190620013c8565b60ff168360ff16145b62000cfc5760405162461bcd60e51b81526020600482015260116024820152706f6e6c79206c657620706f7320726f6c6560781b604482015260640162000327565b6040516319ebfd2160e21b81526001600160a01b03858116600483015260ff8516602483015283151560448301528216906367aff48490606401600060405180830381600087803b15801562000d5157600080fd5b505af115801562000d66573d6000803e3d6000fd5b505050505050505050565b6001600160a01b038085166000908152606660205260408120549091168062000da9575050606854600160a01b900460ff1662000e32565b60405163b700961360e01b81526001600160a01b03868116600483015285811660248301526001600160e01b03198516604483015282169063b700961390606401602060405180830381865afa15801562000e08573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000e2e9190620013e8565b9150505b949350505050565b62000e4462001110565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633148062000f7057600062000ef57fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b03811633148062000f6d5760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b606482015260840162000327565b50505b606880546001600160a01b0319166001600160a01b03841617905560405162000f999062001273565b604051809103906000f08015801562000fb6573d6000803e3d6000fd5b50606780546001600160a01b0319166001600160a01b039290921691909117905550506068805460ff60a01b191646630e9ac0d614600160a01b02179055565b6065546001600160a01b031633146200104a5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b604482015260640162000327565b60006200105f6033546001600160a01b031690565b6065549091506001600160a01b03166200107981620011b0565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101620006d0565b6033546001600160a01b031633146200116c5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604482015260640162000327565b565b600054610100900460ff16620011985760405162461bcd60e51b8152600401620003279062001408565b620011a262001202565b620011ad81620011b0565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff166200122c5760405162461bcd60e51b8152600401620003279062001408565b6200116c600054610100900460ff166200125a5760405162461bcd60e51b8152600401620003279062001408565b6200116c33620011b0565b610e6f806200145483390190565b611d1680620022c383390190565b6001600160a01b0381168114620011ad57600080fd5b600060208284031215620012aa57600080fd5b8135620012b78162001281565b9392505050565b60ff81168114620011ad57600080fd5b8015158114620011ad57600080fd5b60008060008060808587031215620012f457600080fd5b8435620013018162001281565b93506020850135620013138162001281565b925060408501356200132581620012be565b915060608501356200133781620012ce565b939692955090935050565b600080600080608085870312156200135957600080fd5b8435620013668162001281565b93506020850135620013788162001281565b925060408501356200138a8162001281565b915060608501356001600160e01b0319811681146200133757600080fd5b600060208284031215620013bb57600080fd5b8151620012b78162001281565b600060208284031215620013db57600080fd5b8151620012b781620012be565b600060208284031215620013fb57600080fd5b8151620012b781620012ce565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe608060405260405162000e6f38038062000e6f83398101604081905262000026916200049d565b828162000036828260006200004d565b50620000449050826200008a565b505050620005d0565b6200005883620000e5565b600082511180620000665750805b1562000085576200008383836200012760201b620002601760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f620000b562000156565b604080516001600160a01b03928316815291841660208301520160405180910390a1620000e2816200018f565b50565b620000f08162000244565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b60606200014f838360405180606001604052806027815260200162000e4860279139620002f8565b9392505050565b60006200018060008051602062000e2883398151915260001b6200037760201b620002081760201c565b546001600160a01b0316919050565b6001600160a01b038116620001fa5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b806200022360008051602062000e2883398151915260001b6200037760201b620002081760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b6200025a816200037a60201b6200028c1760201c565b620002be5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401620001f1565b80620002237f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc60001b6200037760201b620002081760201c565b6060600080856001600160a01b0316856040516200031791906200057d565b600060405180830381855af49150503d806000811462000354576040519150601f19603f3d011682016040523d82523d6000602084013e62000359565b606091505b5090925090506200036d8683838762000389565b9695505050505050565b90565b6001600160a01b03163b151590565b60608315620003fa578251620003f2576001600160a01b0385163b620003f25760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620001f1565b508162000406565b6200040683836200040e565b949350505050565b8151156200041f5781518083602001fd5b8060405162461bcd60e51b8152600401620001f191906200059b565b80516001600160a01b03811681146200045357600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b838110156200048b57818101518382015260200162000471565b83811115620000835750506000910152565b600080600060608486031215620004b357600080fd5b620004be846200043b565b9250620004ce602085016200043b565b60408501519092506001600160401b0380821115620004ec57600080fd5b818601915086601f8301126200050157600080fd5b81518181111562000516576200051662000458565b604051601f8201601f19908116603f0116810190838211818310171562000541576200054162000458565b816040528281528960208487010111156200055b57600080fd5b6200056e8360208301602088016200046e565b80955050505050509250925092565b60008251620005918184602087016200046e565b9190910192915050565b6020815260008251806020840152620005bc8160408501602087016200046e565b601f01601f19169190910160400192915050565b61084880620005e06000396000f3fe60806040526004361061004e5760003560e01c80633659cfe6146100655780634f1ef286146100855780635c60da1b146100985780638f283970146100c9578063f851a440146100e95761005d565b3661005d5761005b6100fe565b005b61005b6100fe565b34801561007157600080fd5b5061005b6100803660046106fb565b610118565b61005b610093366004610716565b61015f565b3480156100a457600080fd5b506100ad6101d0565b6040516001600160a01b03909116815260200160405180910390f35b3480156100d557600080fd5b5061005b6100e43660046106fb565b61020b565b3480156100f557600080fd5b506100ad610235565b61010661029b565b61011661011161033a565b610344565b565b610120610368565b6001600160a01b0316336001600160a01b03161415610157576101548160405180602001604052806000815250600061039b565b50565b6101546100fe565b610167610368565b6001600160a01b0316336001600160a01b031614156101c8576101c38383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506001925061039b915050565b505050565b6101c36100fe565b60006101da610368565b6001600160a01b0316336001600160a01b03161415610200576101fb61033a565b905090565b6102086100fe565b90565b610213610368565b6001600160a01b0316336001600160a01b0316141561015757610154816103c6565b600061023f610368565b6001600160a01b0316336001600160a01b03161415610200576101fb610368565b606061028583836040518060600160405280602781526020016108156027913961041a565b9392505050565b6001600160a01b03163b151590565b6102a3610368565b6001600160a01b0316336001600160a01b031614156101165760405162461bcd60e51b815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f78792074617267606482015261195d60f21b608482015260a4015b60405180910390fd5b60006101fb610492565b3660008037600080366000845af43d6000803e808015610363573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b546001600160a01b0316919050565b6103a4836104ba565b6000825111806103b15750805b156101c3576103c08383610260565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6103ef610368565b604080516001600160a01b03928316815291841660208301520160405180910390a1610154816104fa565b6060600080856001600160a01b03168560405161043791906107c5565b600060405180830381855af49150503d8060008114610472576040519150601f19603f3d011682016040523d82523d6000602084013e610477565b606091505b5091509150610488868383876105a3565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc61038c565b6104c381610621565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6001600160a01b03811661055f5760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b6064820152608401610331565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80546001600160a01b0319166001600160a01b039290921691909117905550565b6060831561060f578251610608576001600160a01b0385163b6106085760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610331565b5081610619565b61061983836106b5565b949350505050565b6001600160a01b0381163b61068e5760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b6064820152608401610331565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610582565b8151156106c55781518083602001fd5b8060405162461bcd60e51b815260040161033191906107e1565b80356001600160a01b03811681146106f657600080fd5b919050565b60006020828403121561070d57600080fd5b610285826106df565b60008060006040848603121561072b57600080fd5b610734846106df565b9250602084013567ffffffffffffffff8082111561075157600080fd5b818601915086601f83011261076557600080fd5b81358181111561077457600080fd5b87602082850101111561078657600080fd5b6020830194508093505050509250925092565b60005b838110156107b457818101518382015260200161079c565b838111156103c05750506000910152565b600082516107d7818460208701610799565b9190910192915050565b6020815260008251806020840152610800816040850160208701610799565b601f01601f1916919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000ab53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564608060405234801561001057600080fd5b50600080546001600160a01b03199081168255600180549091169055604051819081908190819033907f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76908390a36040516001600160a01b0382169033907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a3505050506100a66100ab60201b60201c565b61016b565b600554610100900460ff16156101175760405162461bcd60e51b815260206004820152602760248201527f496e697469616c697a61626c653a20636f6e747261637420697320696e697469604482015266616c697a696e6760c81b606482015260840160405180910390fd5b60055460ff9081161015610169576005805460ff191660ff9081179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b565b611b9c8061017a6000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c80637875b94511610104578063b4bad06a116100a2578063c6b0263e11610071578063c6b0263e14610441578063d8e708cd14610454578063e347416d14610467578063ea7ca2761461046f57600080fd5b8063b4bad06a146103bb578063b700961314610408578063bf7e214f1461041b578063c4d66de81461042e57600080fd5b80637d40583d116100de5780637d40583d146103625780638da5cb5b14610375578063a29508fc146103a0578063a4c60c50146103a857600080fd5b80637875b945146103115780637917b794146103245780637a9e5e4b1461034f57600080fd5b80632f47571f116101715780633c0689751161014b5780633c068975146102d057806342f1e879146102e357806367aff484146102eb57806370f7d6ae146102fe57600080fd5b80632f47571f1461027757806332c9c4d8146102b55780633300183c146102c857600080fd5b806313af4035116101ad57806313af40351461023657806313e27f8b1461024957806316d8887a1461025c57806319883fc11461026457600080fd5b806306a36aee146101d45780630c226445146102075780630e7b949e1461021c575b600080fd5b6101f46101e23660046117e0565b60026020526000908152604090205481565b6040519081526020015b60405180910390f35b61021a6102153660046117e0565b6104a6565b005b610224600281565b60405160ff90911681526020016101fe565b61021a6102443660046117e0565b6104ef565b61021a6102573660046117e0565b61056c565b610224600381565b61021a6102723660046117e0565b6105a9565b6102a5610285366004611821565b600360209081526000928352604080842090915290825290205460ff1681565b60405190151581526020016101fe565b61021a6102c33660046117e0565b6105e6565b610224600481565b61021a6102de3660046117e0565b61072d565b610224600081565b61021a6102f9366004611875565b61076a565b61021a61030c3660046117e0565b61083f565b61021a61031f3660046117e0565b610a20565b6101f4610332366004611821565b600460209081526000928352604080842090915290825290205481565b61021a61035d3660046117e0565b610b32565b61021a6103703660046118be565b610c1c565b600054610388906001600160a01b031681565b6040516001600160a01b0390911681526020016101fe565b610224600181565b61021a6103b63660046117e0565b610d27565b6102a56103c9366004611916565b6001600160a01b039190911660009081526004602090815260408083206001600160e01b031990941683529290522054600160ff929092161c16151590565b6102a561041636600461195b565b610e5f565b600154610388906001600160a01b031681565b61021a61043c3660046117e0565b610ede565b61021a61044f36600461197b565b611011565b61021a6104623660046117e0565b6110b2565b61021a6110ef565b6102a561047d3660046119a9565b6001600160a01b0391909116600090815260026020526040902054600160ff9092161c16151590565b6104bc336000356001600160e01b0319166111b6565b6104e15760405162461bcd60e51b81526004016104d8906119d5565b60405180910390fd5b6104ec81600161125f565b50565b610505336000356001600160e01b0319166111b6565b6105215760405162461bcd60e51b81526004016104d8906119d5565b600080546001600160a01b0319166001600160a01b0383169081178255604051909133917f8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d769190a350565b610582336000356001600160e01b0319166111b6565b61059e5760405162461bcd60e51b81526004016104d8906119d5565b6104ec816001611381565b6105bf336000356001600160e01b0319166111b6565b6105db5760405162461bcd60e51b81526004016104d8906119d5565b6104ec8160016114b5565b6105fc336000356001600160e01b0319166111b6565b6106185760405162461bcd60e51b81526004016104d8906119d5565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610658573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106809190810190611a1c565b905060005b8151811015610728576106ba8282815181106106a3576106a3611ae1565b602002602001015163f5e3c46260e01b6000611011565b6106e860038383815181106106d1576106d1611ae1565b602002602001015163f5e3c46260e01b6001610c1c565b61071660038383815181106106ff576106ff611ae1565b602002602001015163db006a7560e01b6001610c1c565b8061072081611b0d565b915050610685565b505050565b610743336000356001600160e01b0319166111b6565b61075f5760405162461bcd60e51b81526004016104d8906119d5565b6104ec816000611381565b610780336000356001600160e01b0319166111b6565b61079c5760405162461bcd60e51b81526004016104d8906119d5565b80156107cb576001600160a01b03831660009081526002602052604090208054600160ff85161b1790556107f1565b6001600160a01b03831660009081526002602052604090208054600160ff85161b191690555b8160ff16836001600160a01b03167f4c9bdd0c8e073eb5eda2250b18d8e5121ff27b62064fbeeeed4869bb99bc5bf283604051610832911515815260200190565b60405180910390a3505050565b610855336000356001600160e01b0319166111b6565b6108715760405162461bcd60e51b81526004016104d8906119d5565b610886600482631853304760e31b6001610c1c565b61089b600482630ede4edd60e41b6001610c1c565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109039190810190611a1c565b905060005b81518110156107285761093f600483838151811061092857610928611ae1565b602002602001015163a0712d6860e01b6001610c1c565b61095660048383815181106106ff576106ff611ae1565b610984600483838151811061096d5761096d611ae1565b602002602001015163852a12e360e01b6001610c1c565b6109b2600483838151811061099b5761099b611ae1565b602002602001015163c5ebeaec60e01b6001610c1c565b6109e060048383815181106109c9576109c9611ae1565b6020026020010151630e75270260e01b6001610c1c565b610a0e60048383815181106109f7576109f7611ae1565b6020026020010151633c3b4b8960e01b6001610c1c565b80610a1881611b0d565b915050610908565b610a36336000356001600160e01b0319166111b6565b610a525760405162461bcd60e51b81526004016104d8906119d5565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a92573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aba9190810190611a1c565b905060005b815181101561072857610af4828281518110610add57610add611ae1565b602002602001015163f5e3c46260e01b6001611011565b610b20828281518110610b0957610b09611ae1565b602002602001015163db006a7560e01b6001611011565b80610b2a81611b0d565b915050610abf565b6000546001600160a01b0316331480610bc7575060015460405163b700961360e01b81526001600160a01b039091169063b700961390610b8690339030906001600160e01b03196000351690600401611b28565b602060405180830381865afa158015610ba3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc79190611b55565b610bd057600080fd5b600180546001600160a01b0319166001600160a01b03831690811790915560405133907fa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b7638998019890600090a350565b610c32336000356001600160e01b0319166111b6565b610c4e5760405162461bcd60e51b81526004016104d8906119d5565b8015610c92576001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b179055610ccd565b6001600160a01b03831660009081526004602090815260408083206001600160e01b03198616845290915290208054600160ff87161b191690555b816001600160e01b031916836001600160a01b03168560ff167fa52ea92e6e955aa8ac66420b86350f7139959adfcc7e6a14eee1bd116d09860e84604051610d19911515815260200190565b60405180910390a450505050565b610d3d336000356001600160e01b0319166111b6565b610d595760405162461bcd60e51b81526004016104d8906119d5565b610d6481600261125f565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610dcc9190810190611a1c565b905060005b815181101561072857610df1600283838151811061099b5761099b611ae1565b610e0860028383815181106109c9576109c9611ae1565b610e366002838381518110610e1f57610e1f611ae1565b6020026020010151632608f81860e01b6001610c1c565b610e4d60028383815181106109f7576109f7611ae1565b80610e5781611b0d565b915050610dd1565b6001600160a01b03821660009081526003602090815260408083206001600160e01b03198516845290915281205460ff1680610ed657506001600160a01b0380841660009081526004602090815260408083206001600160e01b031987168452825280832054938816835260029091529020541615155b949350505050565b600554610100900460ff1615808015610efe5750600554600160ff909116105b80610f185750303b158015610f18575060055460ff166001145b610f7b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016104d8565b6005805460ff191660011790558015610f9e576005805461ff0019166101001790555b600080546001600160a01b0384166001600160a01b0319918216179091556001805490911630179055801561100d576005805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b611027336000356001600160e01b0319166111b6565b6110435760405162461bcd60e51b81526004016104d8906119d5565b6001600160a01b03831660008181526003602090815260408083206001600160e01b0319871680855290835292819020805460ff191686151590811790915590519081529192917f950a343f5d10445e82a71036d3f4fb3016180a25805141932543b83e2078a93e9101610832565b6110c8336000356001600160e01b0319166111b6565b6110e45760405162461bcd60e51b81526004016104d8906119d5565b6104ec8160006114b5565b611105336000356001600160e01b0319166111b6565b6111215760405162461bcd60e51b81526004016104d8906119d5565b61113660003063e347416d60e01b6001610c1c565b61114b600030630c22644560e01b6001610c1c565b611160600030630a4c60c560e41b6001610c1c565b611175600030630659389b60e31b6001610c1c565b61118a600030637875b94560e01b6001610c1c565b61119f60003063387beb5760e11b6001610c1c565b6111b46000306319ebfd2160e21b6001610c1c565b565b6001546000906001600160a01b03168015801590611240575060405163b700961360e01b81526001600160a01b0382169063b7009613906111ff90879030908890600401611b28565b602060405180830381865afa15801561121c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112409190611b55565b80610ed657506000546001600160a01b03858116911614949350505050565b6112738183631853304760e31b6001610c1c565b6112878183630ede4edd60e41b6001610c1c565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112c7573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112ef9190810190611a1c565b905060005b815181101561137b5760006113076115cb565b905060005b8151811015611366576113548585858151811061132b5761132b611ae1565b602002602001015184848151811061134557611345611ae1565b60200260200101516001610c1c565b8061135e81611b0d565b91505061130c565b5050808061137390611b0d565b9150506112f4565b50505050565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156113c1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113e99190810190611a1c565b905060005b815181101561137b5761142282828151811061140c5761140c611ae1565b602002602001015163c5ebeaec60e01b85611011565b61144d82828151811061143757611437611ae1565b6020026020010151630e75270260e01b85611011565b61147882828151811061146257611462611ae1565b6020026020010151632608f81860e01b85611011565b6114a382828151811061148d5761148d611ae1565b6020026020010151633c3b4b8960e01b85611011565b806114ad81611b0d565b9150506113ee565b6114c782631853304760e31b83611011565b6114d982630ede4edd60e41b83611011565b6000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611519573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526115419190810190611a1c565b905060005b815181101561137b5760006115596115cb565b905060005b81518110156115b6576115a484848151811061157c5761157c611ae1565b602002602001015183838151811061159657611596611ae1565b602002602001015187611011565b806115ae81611b0d565b91505061155e565b505080806115c390611b0d565b915050611546565b60408051600680825260e0820190925260609190816020820160c08036833701905050915063140e25ad60e31b8261160283611b72565b92508260ff168151811061161857611618611ae1565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b8261164383611b72565b92508260ff168151811061165957611659611ae1565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b8261168483611b72565b92508260ff168151811061169a5761169a611ae1565b6001600160e01b03199092166020928302919091019091015263a9059cbb60e01b826116c583611b72565b92508260ff16815181106116db576116db611ae1565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8261170683611b72565b92508260ff168151811061171c5761171c611ae1565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b8261174783611b72565b92508260ff168151811061175d5761175d611ae1565b6001600160e01b03199092166020928302919091019091015260ff8116156117c75760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104d8565b5090565b6001600160a01b03811681146104ec57600080fd5b6000602082840312156117f257600080fd5b81356117fd816117cb565b9392505050565b80356001600160e01b03198116811461181c57600080fd5b919050565b6000806040838503121561183457600080fd5b823561183f816117cb565b915061184d60208401611804565b90509250929050565b803560ff8116811461181c57600080fd5b80151581146104ec57600080fd5b60008060006060848603121561188a57600080fd5b8335611895816117cb565b92506118a360208501611856565b915060408401356118b381611867565b809150509250925092565b600080600080608085870312156118d457600080fd5b6118dd85611856565b935060208501356118ed816117cb565b92506118fb60408601611804565b9150606085013561190b81611867565b939692955090935050565b60008060006060848603121561192b57600080fd5b61193484611856565b92506020840135611944816117cb565b915061195260408501611804565b90509250925092565b60008060006060848603121561197057600080fd5b8335611934816117cb565b60008060006060848603121561199057600080fd5b833561199b816117cb565b92506118a360208501611804565b600080604083850312156119bc57600080fd5b82356119c7816117cb565b915061184d60208401611856565b6020808252600c908201526b15539055551213d49256915160a21b604082015260600190565b634e487b7160e01b600052604160045260246000fd5b805161181c816117cb565b60006020808385031215611a2f57600080fd5b825167ffffffffffffffff80821115611a4757600080fd5b818501915085601f830112611a5b57600080fd5b815181811115611a6d57611a6d6119fb565b8060051b604051601f19603f83011681018181108582111715611a9257611a926119fb565b604052918252848201925083810185019188831115611ab057600080fd5b938501935b82851015611ad557611ac685611a11565b84529385019392850192611ab5565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415611b2157611b21611af7565b5060010190565b6001600160a01b0393841681529190921660208201526001600160e01b0319909116604082015260600190565b600060208284031215611b6757600080fd5b81516117fd81611867565b600060ff821680611b8557611b85611af7565b600019019291505056fea164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "409:3105:134:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;534:39;;;;;-1:-1:-1;;;;;534:39:134;;;;;;-1:-1:-1;;;;;206:32:504;;;188:51;;176:2;161:18;534:39:134;;;;;;;;1781:791;;;;;;:::i;:::-;;:::i;:::-;;1602:386:140;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;619:26:134:-;;;;;-1:-1:-1;;;619:26:134;;;;;;;;;803:14:504;;796:22;778:41;;766:2;751:18;619:26:134;638:187:504;1441:85:454;1513:6;;-1:-1:-1;;;;;1513:6:454;1441:85;;577:38:134;;;;;-1:-1:-1;;;;;577:38:134;;;1151:626;;;;;;:::i;:::-;;:::i;650:216::-;;;;;;:::i;:::-;;:::i;3009:503::-;;;;;;:::i;:::-;;:::i;2576:429::-;;;;;;:::i;:::-;;:::i;530:27:140:-;;;;;-1:-1:-1;;;;;530:27:140;;;468:62:134;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;468:62:134;;;2839:155:140;;;;;;:::i;:::-;;:::i;870:277:134:-;;;;;;:::i;:::-;;:::i;2158:541:140:-;;;:::i;1781:791:134:-;-1:-1:-1;;;;;1930:31:134;;;1845:21;1930:31;;;:16;:31;;;;;;1886:11;;1930:31;;1972:10;:25;;;:56;;-1:-1:-1;;;;;;2001:27:134;;;;1972:56;1968:600;;;-1:-1:-1;;;;;2046:27:134;;2038:57;;;;-1:-1:-1;;;2038:57:134;;2865:2:504;2038:57:134;;;2847:21:504;2904:2;2884:18;;;2877:30;-1:-1:-1;;;2923:18:504;;;2916:47;2980:18;;2038:57:134;;;;;;;;;1513:6:454;;-1:-1:-1;;;;;1513:6:454;2111:10:134;:21;;:50;;-1:-1:-1;2136:10:134;-1:-1:-1;;;;;2136:25:134;;;2111:50;2103:80;;;;-1:-1:-1;;;2103:80:134;;3211:2:504;2103:80:134;;;3193:21:504;3250:2;3230:18;;;3223:30;-1:-1:-1;;;3269:18:504;;;3262:47;3326:18;;2103:80:134;3009:341:504;2103:80:134;2192:4;-1:-1:-1;;;;;2192:34:134;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2236:44:134;;-1:-1:-1;;;2236:44:134;;-1:-1:-1;;;;;206:32:504;;;2236:44:134;;;188:51:504;2236:38:134;;;-1:-1:-1;2236:38:134;;-1:-1:-1;161:18:504;;2236:44:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2288:44:134;;-1:-1:-1;;;2288:44:134;;-1:-1:-1;;;;;206:32:504;;;2288:44:134;;;188:51:504;2288:38:134;;;-1:-1:-1;2288:38:134;;-1:-1:-1;161:18:504;;2288:44:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2378:50:134;;-1:-1:-1;;;2378:50:134;;-1:-1:-1;;;;;206:32:504;;;2378:50:134;;;188:51:504;2378:44:134;;;-1:-1:-1;2378:44:134;;-1:-1:-1;161:18:504;;2378:50:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2436:47:134;;-1:-1:-1;;;2436:47:134;;-1:-1:-1;;;;;206:32:504;;;2436:47:134;;;188:51:504;2436:41:134;;;-1:-1:-1;2436:41:134;;-1:-1:-1;161:18:504;;2436:47:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2512:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2512:7:134;-1:-1:-1;;;;;2496:23:134;:4;-1:-1:-1;;;;;2496:10:134;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2496:23:134;;2492:70;;2531:4;-1:-1:-1;;;;;2531:13:134;;2545:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2545:7:134;2531:22;;-1:-1:-1;;;;;;2531:22:134;;;;;;;-1:-1:-1;;;;;206:32:504;;;2531:22:134;;;188:51:504;161:18;;2531:22:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2492:70;1839:733;;1781:791;:::o;1602:386:140:-;1334:13:454;:11;:13::i;:::-;1758:12:140::1;::::0;;-1:-1:-1;;;;;1830:30:140;;::::1;-1:-1:-1::0;;;;;;1830:30:140;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;4057:34:504::0;;;4122:2;4107:18;;4100:43;;;;1934:49:140::1;::::0;3992:18:504;1934:49:140::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:454;:11;:13::i;:::-;2804:26:140::1;::::0;-1:-1:-1;;;2804:26:140;;4356:2:504;2804:26:140::1;::::0;::::1;4338:21:504::0;4395:2;4375:18;;;4368:30;-1:-1:-1;;;4414:18:504;;;4407:46;4470:18;;2804:26:140::1;4154:340:504::0;1151:626:134;1220:23;1334:13:454;:11;:13::i;:::-;-1:-1:-1;;;;;1267:22:134;;::::1;1302:1;1267:22:::0;;;:16:::1;:22;::::0;;;;;::::1;1259:45:::0;1251:73:::1;;;::::0;-1:-1:-1;;;1251:73:134;;4701:2:504;1251:73:134::1;::::0;::::1;4683:21:504::0;4740:2;4720:18;;;4713:30;-1:-1:-1;;;4759:18:504;;;4752:45;4814:18;;1251:73:134::1;4499:339:504::0;1251:73:134::1;1407:13;::::0;1331:33:::1;::::0;-1:-1:-1;;;;;1407:13:134::1;1423:16;3090:66:140::0;3262:15;-1:-1:-1;;;;;3262:15:140;;2998:284;1423:16:134::1;1367:77;;;;;:::i;:::-;-1:-1:-1::0;;;;;5138:15:504;;;5120:34;;5190:15;;5185:2;5170:18;;5163:43;5242:2;5237;5222:18;;5215:30;;;-1:-1:-1;5261:18:504;;;5254:29;5315:3;5300:19;1367:77:134::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;1497:30:134::1;::::0;-1:-1:-1;;;1497:30:134;;1521:4:::1;1497:30;::::0;::::1;188:51:504::0;1331:113:134;;-1:-1:-1;1331:113:134;;-1:-1:-1;;;;;;1497:15:134;::::1;::::0;::::1;::::0;161:18:504;;1497:30:134::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;;;;;;;;1533:22:134;;::::1;;::::0;;;:16:::1;:22;::::0;;;;;;:29;;-1:-1:-1;;;;;;1533:29:134::1;::::0;;::::1;::::0;;::::1;::::0;;1569:57;-1:-1:-1;;;1569:57:134;;::::1;::::0;::::1;188:51:504::0;;;;1569:33:134::1;::::0;161:18:504;;1569:57:134::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1632:4;-1:-1:-1::0;;;;;1632:16:134::1;;1657:4;1664;-1:-1:-1::0;;;;;1664:18:134::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1632:59;::::0;-1:-1:-1;;;;;;1632:59:134::1;::::0;;;;;;-1:-1:-1;;;;;5792:32:504;;;1632:59:134::1;::::0;::::1;5774:51:504::0;5873:4;5861:17;5841:18;;;5834:45;1686:4:134::1;5895:18:504::0;;;5888:50;5747:18;;1632:59:134::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1746:26;1767:4;1746:20;:26::i;:::-;1245:532;1151:626:::0;;;:::o;650:216::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;6151:2:504;3314:201:457;;;6133:21:504;6190:2;6170:18;;;6163:30;6229:34;6209:18;;;6202:62;-1:-1:-1;;;6280:18:504;;;6273:44;6334:19;;3314:201:457;5949:410:504;3314:201:457;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;729:30:134::1;748:10;729:18;:30::i;:::-;765:23;:50:::0;;-1:-1:-1;;;;;;765:50:134::1;-1:-1:-1::0;;;;;765:50:134;::::1;;::::0;;837:24:::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;821:13:134::1;:40:::0;;-1:-1:-1;;;;;;821:40:134::1;-1:-1:-1::0;;;;;821:40:134;;;::::1;::::0;;;::::1;::::0;;3636:99:457;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;6516:36:504;;3710:14:457;;6504:2:504;6489:18;3710:14:457;6364:194:504;3636:99:457;3258:483;650:216:134;:::o;3009:503::-;-1:-1:-1;;;;;3149:22:134;;;3119:27;3149:22;;;:16;:22;;;;;;;3186:31;3178:63;;;;-1:-1:-1;;;3178:63:134;;6765:2:504;3178:63:134;;;6747:21:504;6804:2;6784:18;;;6777:30;-1:-1:-1;;;6823:18:504;;;6816:49;6882:18;;3178:63:134;6563:343:504;3178:63:134;1513:6:454;;-1:-1:-1;;;;;1513:6:454;3255:10:134;:21;;:62;;-1:-1:-1;3294:23:134;;-1:-1:-1;;;;;3294:23:134;3280:10;:37;3255:62;3247:95;;;;-1:-1:-1;;;3247:95:134;;7113:2:504;3247:95:134;;;7095:21:504;7152:2;7132:18;;;7125:30;-1:-1:-1;;;7171:18:504;;;7164:50;7231:18;;3247:95:134;6911:344:504;3247:95:134;3370:23;;-1:-1:-1;;;;;3370:23:134;3356:10;:37;;;:81;;;3405:8;-1:-1:-1;;;;;3405:30:134;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3397:40;;:4;:40;;;3356:81;3348:111;;;;-1:-1:-1;;;3348:111:134;;7462:2:504;3348:111:134;;;7444:21:504;7501:2;7481:18;;;7474:30;-1:-1:-1;;;7520:18:504;;;7513:47;7577:18;;3348:111:134;7260:341:504;3348:111:134;3466:41;;-1:-1:-1;;;3466:41:134;;-1:-1:-1;;;;;5792:32:504;;;3466:41:134;;;5774:51:504;5873:4;5861:17;;5841:18;;;5834:45;5922:14;;5915:22;5895:18;;;5888:50;3466:20:134;;;;;5747:18:504;;3466:41:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3113:399;3009:503;;;;:::o;2576:429::-;-1:-1:-1;;;;;2750:22:134;;;2700:4;2750:22;;;:16;:22;;;;;;2700:4;;2750:22;2782:39;2778:223;;-1:-1:-1;;2838:14:134;;-1:-1:-1;;;2838:14:134;;;;2831:21;;2778:223;2943:51;;-1:-1:-1;;;2943:51:134;;-1:-1:-1;;;;;7862:15:504;;;2943:51:134;;;7844:34:504;7914:15;;;7894:18;;;7887:43;-1:-1:-1;;;;;;7966:33:504;;7946:18;;;7939:61;2943:24:134;;;;;7779:18:504;;2943:51:134;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2936:58;;;2576:429;;;;;;;:::o;2839:155:140:-;1334:13:454;:11;:13::i;:::-;2937:12:140::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:140;;::::1;4057:34:504::0;;4127:15;;;4122:2;4107:18;;4100:43;2921:39:140::1;::::0;3992:18:504;2921:39:140::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:140::1;-1:-1:-1::0;;;;;2966:23:140;;;::::1;::::0;;;::::1;::::0;;2839:155::o;870:277:134:-;1513:6:454;;-1:-1:-1;;;;;1513:6:454;929:10:467;791:23:140;;820:183;;842:13;858:16;3090:66;3262:15;-1:-1:-1;;;;;3262:15:140;;2998:284;858:16;842:32;-1:-1:-1;;;;;;897:21:140;;929:10:467;897:21:140;;926:70;;;;-1:-1:-1;;;926:70:140;;8463:2:504;926:70:140;;;8445:21:504;8502:2;8482:18;;;8475:30;8541:34;8521:18;;;8514:62;-1:-1:-1;;;8592:18:504;;;8585:48;8650:19;;926:70:140;8261:414:504;926:70:140;834:169;;820:183;956:23:134::1;:50:::0;;-1:-1:-1;;;;;;956:50:134::1;-1:-1:-1::0;;;;;956:50:134;::::1;;::::0;;1028:24:::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;1012:13:134::1;:40:::0;;-1:-1:-1;;;;;;1012:40:134::1;-1:-1:-1::0;;;;;1012:40:134;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;1099:14:134::1;:43:::0;;-1:-1:-1;;;;1099:43:134::1;1116:13;1133:9;1116:26;-1:-1:-1::0;;;1099:43:134::1;;::::0;;870:277::o;2158:541:140:-;2285:12;;-1:-1:-1;;;;;2285:12:140;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:140;;8882:2:504;2263:60:140;;;8864:21:504;8921:2;8901:18;;;8894:30;-1:-1:-1;;;8940:18:504;;;8933:51;9001:18;;2263:60:140;8680:345:504;2263:60:140;2378:16;2397:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2397:7:140;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:140;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:140;;;2605:32;;;-1:-1:-1;;;;;4075:15:504;;4057:34;;-1:-1:-1;4122:2:504;4107:18;;4100:43;2605:32:140;;3992:18:504;2605:32:140;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;4075:15:504;;;4057:34;;2681:12:140;;;4122:2:504;4107:18;;4100:43;2648:46:140;;3992:18:504;2648:46:140;3845:304:504;1599:130:454;1513:6;;-1:-1:-1;;;;;1513:6:454;929:10:467;1662:23:454;1654:68;;;;-1:-1:-1;;;1654:68:454;;9232:2:504;1654:68:454;;;9214:21:504;;;9251:18;;;9244:30;9310:34;9290:18;;;9283:62;9362:18;;1654:68:454;9030:356:504;1654:68:454;1599:130::o;562:129:140:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;638:16:140::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;2673:187:454:-;2765:6;;;-1:-1:-1;;;;;2781:17:454;;;-1:-1:-1;;;;;;2781:17:454;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1065:26:454::1;5363:13:457::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1176:32:454::1;929:10:467::0;1176:18:454::1;:32::i;-1:-1:-1:-:0;;;;;;;;:::o;:::-;;;;;;;;:::o;250:131:504:-;-1:-1:-1;;;;;325:31:504;;315:42;;305:70;;371:1;368;361:12;386:247;445:6;498:2;486:9;477:7;473:23;469:32;466:52;;;514:1;511;504:12;466:52;553:9;540:23;572:31;597:5;572:31;:::i;:::-;622:5;386:247;-1:-1:-1;;;386:247:504:o;1038:114::-;1122:4;1115:5;1111:16;1104:5;1101:27;1091:55;;1142:1;1139;1132:12;1157:118;1243:5;1236:13;1229:21;1222:5;1219:32;1209:60;;1265:1;1262;1255:12;1280:661;1361:6;1369;1377;1385;1438:3;1426:9;1417:7;1413:23;1409:33;1406:53;;;1455:1;1452;1445:12;1406:53;1494:9;1481:23;1513:31;1538:5;1513:31;:::i;:::-;1563:5;-1:-1:-1;1620:2:504;1605:18;;1592:32;1633:33;1592:32;1633:33;:::i;:::-;1685:7;-1:-1:-1;1744:2:504;1729:18;;1716:32;1757:31;1716:32;1757:31;:::i;:::-;1807:7;-1:-1:-1;1866:2:504;1851:18;;1838:32;1879:30;1838:32;1879:30;:::i;:::-;1280:661;;;;-1:-1:-1;1280:661:504;;-1:-1:-1;;1280:661:504:o;1946:712::-;2031:6;2039;2047;2055;2108:3;2096:9;2087:7;2083:23;2079:33;2076:53;;;2125:1;2122;2115:12;2076:53;2164:9;2151:23;2183:31;2208:5;2183:31;:::i;:::-;2233:5;-1:-1:-1;2290:2:504;2275:18;;2262:32;2303:33;2262:32;2303:33;:::i;:::-;2355:7;-1:-1:-1;2414:2:504;2399:18;;2386:32;2427:33;2386:32;2427:33;:::i;:::-;2479:7;-1:-1:-1;2538:2:504;2523:18;;2510:32;-1:-1:-1;;;;;;2573:34:504;;2561:47;;2551:75;;2622:1;2619;2612:12;3589:251;3659:6;3712:2;3700:9;3691:7;3687:23;3683:32;3680:52;;;3728:1;3725;3718:12;3680:52;3760:9;3754:16;3779:31;3804:5;3779:31;:::i;5330:247::-;5398:6;5451:2;5439:9;5430:7;5426:23;5422:32;5419:52;;;5467:1;5464;5457:12;5419:52;5499:9;5493:16;5518:29;5541:5;5518:29;:::i;8011:245::-;8078:6;8131:2;8119:9;8110:7;8106:23;8102:32;8099:52;;;8147:1;8144;8137:12;8099:52;8179:9;8173:16;8198:28;8220:5;8198:28;:::i;9391:407::-;9593:2;9575:21;;;9632:2;9612:18;;;9605:30;9671:34;9666:2;9651:18;;9644:62;-1:-1:-1;;;9737:2:504;9722:18;;9715:41;9788:3;9773:19;;9391:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "canCall(address,address,address,bytes4)": "df595cb8", + "createPoolAuthority(address)": "a1a82b56", + "initialize(address)": "c4d66de8", + "leveredPositionsFactory()": "95f14b16", + "noAuthRequired()": "7a084dac", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "poolAuthLogic()": "54927fb8", + "poolsAuthorities(address)": "ec2ffdd1", + "reconfigureAuthority(address)": "5a89ef51", + "reinitialize(address)": "f7e7d1fd", + "renounceOwnership()": "715018a6", + "setUserRole(address,address,uint8,bool)": "ca224d98", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/AuthoritiesRegistry_Proxy.json b/packages/sdk/deployments/bob/AuthoritiesRegistry_Proxy.json new file mode 100644 index 000000000..7a3b8f03f --- /dev/null +++ b/packages/sdk/deployments/bob/AuthoritiesRegistry_Proxy.json @@ -0,0 +1,315 @@ +{ + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "transactionIndex": 1, + "gasUsed": "2297185", + "logsBloom": "0x00020000000000000000000000000000400000000000000001800000000200000000000000040000000010000100000000100000100000000008000000000004000000000000040000080000000002000001000000000000000000000000000000200000020000000000000000000800000000800000000000000000000000400000000000000000000080000000000000000000000080000000000000c02001000000000000000000000000000400000000000000000000000000000000000000000020040000000000000000040000000008000400000040000000000020000000000000000000020000000000000000000000000000000000000000000000", + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1", + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000ca0ae3039b8825cd7a968ceda6d99a49458722af" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x21824D2F3fE7B2ea8696E175dC34cf949E00c433", + "topics": [ + "0x8292fce18fa69edf4db7b94ea2e58241df0ae57f97e0a6c9b29067028bf92d76", + "0x000000000000000000000000522e808b99a89f0587906eb0a913675d35a936f6", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x21824D2F3fE7B2ea8696E175dC34cf949E00c433", + "topics": [ + "0xa3396fd7f6e0a21b50e5089d2da70d5ac0a3bbbd1f617a93f134b76389980198", + "0x000000000000000000000000522e808b99a89f0587906eb0a913675d35a936f6", + "0x0000000000000000000000000000000000000000000000000000000000000000" + ], + "data": "0x", + "logIndex": 4, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x21824D2F3fE7B2ea8696E175dC34cf949E00c433", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000ff", + "logIndex": 5, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 6, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + }, + { + "transactionIndex": 1, + "blockNumber": 3778042, + "transactionHash": "0xaa723154ebd6f088c656398031beb151cc6b6a11f516dc5dbea6d27e6564b654", + "address": "0x522E808b99a89F0587906eB0A913675D35a936f6", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 7, + "blockHash": "0xf85910825401bc07012ce7249ac9f32fb2c457242eb52435de8d5cd322521ae1" + } + ], + "blockNumber": 3778042, + "cumulativeGasUsed": "2341024", + "status": 1, + "byzantium": true + }, + "args": [ + "0xcA0aE3039B8825Cd7A968ceda6D99a49458722aF", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xc4d66de80000000000000000000000001dd45c9fb4c8ccb678781982774f006f24b8eac1" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/CErc20Delegate.json b/packages/sdk/deployments/bob/CErc20Delegate.json new file mode 100644 index 000000000..b8dcebd91 --- /dev/null +++ b/packages/sdk/deployments/bob/CErc20Delegate.json @@ -0,0 +1,2476 @@ +{ + "address": "0xb1d020336794CEdE46F644A6e2bC8Df5195aD1bB", + "abi": [ + { + "type": "function", + "name": "_becomeImplementation", + "inputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "functionSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "_withdrawAdminFees", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_withdrawIonicFees", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "accrualBlockNumber", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "adminFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrow", + "inputs": [ + { + "name": "borrowAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "borrowIndex", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "comptroller", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "contractType", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "delegateType", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "feeSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCash", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "interestRateModel", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract InterestRateModel" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address payable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidateBorrow", + "inputs": [ + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mint", + "inputs": [ + { + "name": "mintAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "protocolSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redeem", + "inputs": [ + { + "name": "redeemTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redeemUnderlying", + "inputs": [ + { + "name": "redeemAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrow", + "inputs": [ + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrowBehalf", + "inputs": [ + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reserveFactorMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "seize", + "inputs": [ + { + "name": "liquidator", + "type": "address", + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "selfTransferIn", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "selfTransferOut", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalAdminFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBorrows", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalIonicFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalReserves", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "underlying", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "AccrueInterest", + "inputs": [ + { + "name": "cashPrior", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "interestAccumulated", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "borrowIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Borrow", + "inputs": [ + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrowAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "accountBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Failure", + "inputs": [ + { + "name": "error", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "info", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "detail", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LiquidateBorrow", + "inputs": [ + { + "name": "liquidator", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cTokenCollateral", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Mint", + "inputs": [ + { + "name": "minter", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "mintAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "mintTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAdminFee", + "inputs": [ + { + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewIonicFee", + "inputs": [ + { + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewMarketInterestRateModel", + "inputs": [ + { + "name": "oldInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + }, + { + "name": "newInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewReserveFactor", + "inputs": [ + { + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Redeem", + "inputs": [ + { + "name": "redeemer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "redeemAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "redeemTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RepayBorrow", + "inputs": [ + { + "name": "payer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "accountBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservesAdded", + "inputs": [ + { + "name": "benefactor", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "addAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newTotalReserves", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservesReduced", + "inputs": [ + { + "name": "admin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "reduceAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newTotalReserves", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x08735f3832c5b554d35e4339be593ab920c88a01743192549df9e6d5f67a96dc", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xb1d020336794CEdE46F644A6e2bC8Df5195aD1bB", + "transactionIndex": 2, + "gasUsed": "3797746", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x574d048b82bc8c2d97ac17bc1d74da9b2ab29c1921acc2abc5976737342d3020", + "transactionHash": "0x08735f3832c5b554d35e4339be593ab920c88a01743192549df9e6d5f67a96dc", + "logs": [], + "blockNumber": 3777794, + "cumulativeGasUsed": "4004270", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Borrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "LiquidateBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "redeemer", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Redeem", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "RepayBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "benefactor", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesReduced", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferOut" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_withdrawAdminFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_withdrawIonicFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrow(uint256)": { + "params": { + "borrowAmount": "The amount of the underlying asset to borrow" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "getCash()": { + "returns": { + "_0": "The quantity of underlying asset owned by this contract" + } + }, + "liquidateBorrow(address,uint256,address)": { + "params": { + "borrower": "The borrower of this cToken to be liquidated", + "cTokenCollateral": "The market in which to seize collateral from the borrower", + "repayAmount": "The amount of the underlying borrowed asset to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "mint(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "mintAmount": "The amount of the underlying asset to supply" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeem(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemTokens": "The number of cTokens to redeem into underlying" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeemUnderlying(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemAmount": "The amount of underlying to redeem" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrow(uint256)": { + "params": { + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrowBehalf(address,uint256)": { + "params": { + "borrower": "the account with the debt being payed off", + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "seize(address,address,uint256)": { + "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.", + "params": { + "borrower": "The account having collateral seized", + "liquidator": "The account receiving seized collateral", + "seizeTokens": "The number of cTokens to seize" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_becomeImplementation(bytes)": { + "notice": "Called by the delegator on a delegate to initialize it for duty" + }, + "_withdrawAdminFees(uint256)": { + "notice": "Accrues interest and reduces admin fees by transferring to admin" + }, + "_withdrawIonicFees(uint256)": { + "notice": "Accrues interest and reduces Ionic fees by transferring to Ionic" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "borrow(uint256)": { + "notice": "Sender borrows assets from the protocol to their own address" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "getCash()": { + "notice": "Get cash balance of this cToken in the underlying asset" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "liquidateBorrow(address,uint256,address)": { + "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator." + }, + "mint(uint256)": { + "notice": "Sender supplies assets into the market and receives cTokens in exchange" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "redeem(uint256)": { + "notice": "Sender redeems cTokens in exchange for the underlying asset" + }, + "redeemUnderlying(uint256)": { + "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset" + }, + "repayBorrow(uint256)": { + "notice": "Sender repays their own borrow" + }, + "repayBorrowBehalf(address,uint256)": { + "notice": "Sender repays a borrow belonging to borrower" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "seize(address,address,uint256)": { + "notice": "Transfers collateral tokens (this market) to the liquidator." + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CErc20Delegate.sol": "CErc20Delegate" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506143bc806100206000396000f3fe608060405234801561001057600080fd5b506004361061021c5760003560e01c806389f8132e11610125578063b2a02ff1116100ad578063c91a424f1161007c578063c91a424f14610421578063cb2ef6f714610434578063db006a751461045e578063f3fdb15a14610471578063f5e3c4621461048457600080fd5b8063b2a02ff1146103e3578063be99f119146103f6578063c3bf11cd14610405578063c5ebeaec1461040e57600080fd5b80639826394b116100f45780639826394b14610398578063a0712d68146103a1578063a7b820df146103b4578063aa5af0fd146103c7578063b0d58e49146103d057600080fd5b806389f8132e146103695780638d02d9a11461037e5780638f840ddd1461038757806395d89b411461039057600080fd5b80633b1d21a2116101a857806361feacff1161017757806361feacff146103235780636752e7021461032c5780636c540baf1461033a5780636f307dc314610343578063852a12e31461035657600080fd5b80633b1d21a2146102cf57806347bd3718146102d757806356e67728146102e05780635fe3b567146102f357600080fd5b8063173b9904116101ef578063173b99041461028857806318160ddd146102915780632608f8181461029a5780632c436e5b146102ad578063313ce567146102c257600080fd5b8063067db1b31461022157806306fdde03146102365780630e75270214610254578063135f133414610275575b600080fd5b61023461022f366004613f01565b610497565b005b61023e6104e1565b60405161024b9190613f59565b60405180910390f35b610267610262366004613f8c565b61056f565b60405190815260200161024b565b610267610283366004613f01565b61062c565b61026760085481565b610267600f5481565b6102676102a8366004613f01565b610678565b60015b60405160ff909116815260200161024b565b6003546102b09060ff1681565b610267610737565b610267600b5481565b6102346102ee366004613fbb565b610746565b60035461030b9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b610267600d5481565b610267666379da05b6000081565b61026760095481565b60135461030b906001600160a01b031681565b610267610364366004613f8c565b610798565b61037161084b565b60405161024b919061406c565b61026760065481565b610267600c5481565b61023e610a53565b610267600e5481565b6102676103af366004613f8c565b610a60565b6102676103c2366004613f8c565b610b15565b610267600a5481565b6102676103de366004613f8c565b610c73565b6102676103f13660046140ba565b610d66565b61026767016345785d8a000081565b61026760075481565b61026761041c366004613f8c565b610d8a565b60005461030b906001600160a01b031681565b60408051808201909152600e81526d43457263323044656c656761746560901b602082015261023e565b61026761046c366004613f8c565b610e3d565b60045461030b906001600160a01b031681565b6102676104923660046140fb565b610ef0565b3330146104d35760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b6104dd8282610fb3565b5050565b600180546104ee9061413d565b80601f016020809104026020016040519081016040528092919081815260200182805461051a9061413d565b80156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105bc9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa1580156105d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd91906141a5565b6106195760405162461bcd60e51b81526004016104ca906141c7565b600061062483611034565b509392505050565b60003330146106655760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104ca565b61066f83836110c5565b90505b92915050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106c59261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa1580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070691906141a5565b6107225760405162461bcd60e51b81526004016104ca906141c7565b600061072e8484611298565b50949350505050565b600061074161132b565b905090565b333014806107575750610757611398565b6107955760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b60448201526064016104ca565b50565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926107e59261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610802573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082691906141a5565b6108425760405162461bcd60e51b81526004016104ca906141c7565b61067282611515565b606060036000610859611592565b90508160ff16815161086b9190614205565b67ffffffffffffffff81111561088357610883613fa5565b6040519080825280602002602001820160405280156108ac578160200160208202803683370190505b50925060005b8151811015610912578181815181106108cd576108cd61421d565b60200260200101518482815181106108e7576108e761421d565b6001600160e01b0319909216602092830291909101909101528061090a81614233565b9150506108b2565b50805163cb2ef6f760e01b9084906109298561424e565b94506109389060ff8616614205565b815181106109485761094861421d565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b9084906109778561424e565b94506109869060ff8616614205565b815181106109965761099661421d565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b9084906109c58561424e565b94506109d49060ff8616614205565b815181106109e4576109e461421d565b6001600160e01b03199092166020928302919091019091015260ff821615610a4e5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104ca565b505090565b600280546104ee9061413d565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610aad9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee91906141a5565b610b0a5760405162461bcd60e51b81526004016104ca906141c7565b60006106248361195a565b600080610b21816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b85919061426b565b504360095414610ba257610b9b600a6039611a9b565b9150610c64565b82610bab61132b565b1015610bbd57610b9b600e6038611a9b565b600d54831115610bd357610b9b6002603a611a9b565b82600d54610be19190614284565b600d55600354604080516303e1469160e61b81529051610c5e9261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c58919061429b565b84610fb3565b60005b91505b610c6d81611b14565b50919050565b600080610c7f816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce3919061426b565b504360095414610cf957610b9b600a6035611a9b565b82610d0261132b565b1015610d1457610b9b600e6034611a9b565b600e54831115610d2a57610b9b60026036611a9b565b600083600e54610d3a9190614284565b600e819055600054909150610d58906001600160a01b031685610fb3565b6000925050610c6d81611b14565b60006001610d73816119d7565b610d7f33868686611b97565b915061062481611b14565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610dd79261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1891906141a5565b610e345760405162461bcd60e51b81526004016104ca906141c7565b61067282612082565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610e8a9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906141a5565b610ee75760405162461bcd60e51b81526004016104ca906141c7565b610672826120fd565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f3d9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e91906141a5565b610f9a5760405162461bcd60e51b81526004016104ca906141c7565b6000610fa785858561217a565b509150505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091018252602080820180516001600160e01b031663a9059cbb60e01b1790528251808401909352601983527f544f4b454e5f5452414e534645525f4f55545f4641494c454400000000000000908301526104dd91612274565b6000806000611042816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a6919061426b565b506110b23333866122d2565b925092506110bf81611b14565b50915091565b6013546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611136919061426b565b90506111c66323b872dd60e01b853086604051602401611158939291906142ce565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280601881526020017f544f4b454e5f5452414e534645525f494e5f4641494c45440000000000000000815250612274565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611233919061426b565b9050818110156112855760405162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f5700000000000060448201526064016104ca565b61128f8282614284565b95945050505050565b60008060006112a6816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a919061426b565b506113163386866122d2565b9250925061132381611b14565b509250929050565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610741919061426b565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611415919061429b565b6001600160a01b0316336001600160a01b03161480156114925750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149291906141a5565b8061150f57506000546001600160a01b03163314801561150f5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f91906141a5565b91505090565b600080611521816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061426b565b50610c61336000856126e1565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b816115ce8461424e565b93508360ff16815181106115e4576115e461421d565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b8161160f8461424e565b93508360ff16815181106116255761162561421d565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b816116508461424e565b93508360ff16815181106116665761166661421d565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b816116918461424e565b93508360ff16815181106116a7576116a761421d565b6001600160e01b03199092166020928302919091019091015263073a938160e11b816116d28461424e565b93508360ff16815181106116e8576116e861421d565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b816117138461424e565b93508360ff16815181106117295761172961421d565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b816117548461424e565b93508360ff168151811061176a5761176a61421d565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b816117958461424e565b93508360ff16815181106117ab576117ab61421d565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b816117d68461424e565b93508360ff16815181106117ec576117ec61421d565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816118178461424e565b93508360ff168151811061182d5761182d61421d565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816118588461424e565b93508360ff168151811061186e5761186e61421d565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816118998461424e565b93508360ff16815181106118af576118af61421d565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b816118da8461424e565b93508360ff16815181106118f0576118f061421d565b6001600160e01b03199092166020928302919091019091015260ff8216156106725760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104ca565b6000806000611968816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc919061426b565b506110b23385612d29565b600054600160a01b900460ff16611a1d5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016104ca565b80611a8b57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611ad057611ad06142b8565b836061811115611ae257611ae26142b8565b60408051928352602083019190915260009082015260600160405180910390a182601181111561066f5761066f6142b8565b6000805460ff60a01b1916600160a01b1790558061079557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7c57600080fd5b505af1158015611b90573d6000803e3d6000fd5b5050505050565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f919061426b565b90508015611c4c57611c446003601d83613134565b91505061207a565b846001600160a01b0316846001600160a01b03161415611c7257611c446006601e611a9b565b611cd7604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611cfa90856131d6565b6020830181905282826003811115611d1457611d146142b8565b6003811115611d2557611d256142b8565b9052506000905081516003811115611d3f57611d3f6142b8565b14611d6f57611d666009601c83600001516003811115611d6157611d616142b8565b613134565b9250505061207a565b611d8e846040518060200160405280666379da05b60000815250613201565b6080820152604080516020810190915267016345785d8a00008152611db4908590613201565b61014082018190526080820151611dcb9086614284565b611dd59190614284565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c919061426b565b60c082019081526040805160208101909152905181526080820151611e619190613224565b60a0820152604080516020810190915260c08201518152610140820151611e889190613224565b61016082015260a0810151600c54611ea09190614205565b60e08201526101408101516080820151600f54611ebd9190614284565b611ec79190614284565b610120820152610160810151600e54611ee09190614205565b6101008201526001600160a01b0386166000908152601060205260409020546060820151611f0e919061323c565b6040830181905282826003811115611f2857611f286142b8565b6003811115611f3957611f396142b8565b9052506000905081516003811115611f5357611f536142b8565b14611f7557611d666009601b83600001516003811115611d6157611d616142b8565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b1680825290849020929092556060850151925192835290929091600080516020614390833981519152910160405180910390a3306001600160a01b0316856001600160a01b0316600080516020614390833981519152836080015160405161202291815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061208e816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f2919061426b565b50610c613384613262565b600080612109816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216d919061426b565b50610c61338460006126e1565b6000806000612188816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec919061426b565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561222d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612251919061426b565b5061225e338787876135fd565b9250925061226b81611b14565b50935093915050565b60135460009061228e906001600160a01b03168484613aba565b8051909150156122cd57808060200190518101906122ac91906141a5565b82906122cb5760405162461bcd60e51b81526004016104ca9190613f59565b505b505050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af1158015612340573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612364919061426b565b90508015612385576123796003604383613134565b600092509250506126d9565b436009541461239a57612379600a6044611a9b565b6123e36040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa15801561244d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612471919061426b565b608082015260001985141561248f5760808101516040820152612497565b604081018590525b6124a58782604001516110c5565b60e0820181905260808201516124ba916131d6565b60a08301819052602083018260038111156124d7576124d76142b8565b60038111156124e8576124e86142b8565b9052506000905081602001516003811115612505576125056142b8565b146125785760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c454400000000000060648201526084016104ca565b612588600b548260e001516131d6565b60c08301819052602083018260038111156125a5576125a56142b8565b60038111156125b6576125b66142b8565b90525060009050816020015160038111156125d3576125d36142b8565b1461263a5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b60648201526084016104ca565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b60008215806126ee575081155b61273a5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e74000000000000000060448201526064016104ca565b61277b6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd919061426b565b604082015283156128a05761138884600f546127f99190614284565b101561280557600f5493505b60608101849052604080516020810182529082015181526128269085613b4d565b6080830181905260208301826003811115612843576128436142b8565b6003811115612854576128546142b8565b9052506000905081602001516003811115612871576128716142b8565b1461289b576128936009602c83602001516003811115611d6157611d616142b8565b915050610fac565b6129e8565b60001983141561292e57600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292b919061426b565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612992919061426b565b90506103e86129a18583614284565b10156129ab578093505b6129b9848360400151613b9f565b60608301819052600f546103e8916129d091614284565b10156129df57600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612a269130918b91906004016142ce565b6020604051808303816000875af1158015612a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a69919061426b565b90508015612a8757612a7e6003602b83613134565b92505050610fac565b4360095414612a9c57612a7e600a602f611a9b565b612aac600f5483606001516131d6565b60a0840181905260208401826003811115612ac957612ac96142b8565b6003811115612ada57612ada6142b8565b9052506000905082602001516003811115612af757612af76142b8565b14612b1957612a7e6009603184602001516003811115611d6157611d616142b8565b6001600160a01b0386166000908152601060205260409020546060830151612b4191906131d6565b60c0840181905260208401826003811115612b5e57612b5e6142b8565b6003811115612b6f57612b6f6142b8565b9052506000905082602001516003811115612b8c57612b8c6142b8565b14612bae57612a7e6009603084602001516003811115611d6157611d616142b8565b8160800151612bbb61132b565b1015612bcd57612a7e600e6032611a9b565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612c03908790610fb3565b306001600160a01b0316866001600160a01b03166000805160206143908339815191528460600151604051612c3a91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612cfe57600080fd5b505af1158015612d12573d6000803e3d6000fd5b5060009250612d1f915050565b9695505050505050565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e190612d67903090899089906004016142ce565b6020604051808303816000875af1158015612d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612daa919061426b565b90508015612dcb57612dbf6003602183613134565b6000925092505061312d565b4360095414612de057612dbf600a6024611a9b565b612e216040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e83919061426b565b6040820152612e9286866110c5565b60c0820181905260408051602081018252908301518152612eb39190613bda565b6060830181905260208301826003811115612ed057612ed06142b8565b6003811115612ee157612ee16142b8565b9052506000905081602001516003811115612efe57612efe6142b8565b14612f4b5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c454460448201526064016104ca565b6000816060015111612f9f5760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a454354454400000000000060448201526064016104ca565b8060600151600f54612fb19190614205565b608082015260608101516001600160a01b038716600090815260106020526040902054612fde9190614205565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b0316600080516020614390833981519152836060015160405161308d91815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561310057600080fd5b505af1158015613114573d6000803e3d6000fd5b5060009250613121915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846011811115613169576131696142b8565b84606181111561317b5761317b6142b8565b604080519283526020830191909152810184905260600160405180910390a160038460118111156131ae576131ae6142b8565b146131ca578360118111156131c5576131c56142b8565b61207a565b61207a826103e8614205565b6000808383116131f55760006131ec8486614284565b9150915061312d565b5060039050600061312d565b6000670de0b6b3a764000061321a848460000151613bea565b61066f9190614308565b6000806132318484613c2c565b905061207a81613c5d565b6000808383018481106132545760009250905061312d565b60026000925092505061312d565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c9061329f903090889088906004016142ce565b6020604051808303816000875af11580156132be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e2919061426b565b905080156132ff576132f76003601083613134565b915050610672565b4360095414613314576132f7600a600c611a9b565b600061331e61132b565b90508381101561333d57613334600e600b611a9b565b92505050610672565b613369604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d6919061426b565b602082018190526133e7908661323c565b6040830181905282826003811115613401576134016142b8565b6003811115613412576134126142b8565b905250600090508151600381111561342c5761342c6142b8565b146134585761344e6009600e83600001516003811115611d6157611d616142b8565b9350505050610672565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156134b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d5919061426b565b925082156134ea5761344e6003601085613134565b6134f6600b548661323c565b6060830181905282826003811115613510576135106142b8565b6003811115613521576135216142b8565b905250600090508151600381111561353b5761353b6142b8565b1461355d5761344e6009600d83600001516003811115611d6157611d616142b8565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b556135998686610fb3565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613673573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613697919061426b565b905080156136b8576136ac6003601483613134565b60009250925050613ab1565b43600954146136cd576136ac600a6018611a9b565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561370c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613730919061426b565b14613741576136ac600a6013611a9b565b866001600160a01b0316866001600160a01b03161415613767576136ac60066019611a9b565b84613778576136ac60076017611a9b565b60001985141561378e576136ac60076016611a9b565b60008061379c8989896122d2565b909250905081156137d1576137c38260118111156137bc576137bc6142b8565b601a611a9b565b600094509450505050613ab1565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b9061380e9030908c9088906004016142ce565b6040805180830381865afa15801561382a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384e919061431c565b909250905081156138bd5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016104ca565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392a919061426b565b10156139785760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016104ca565b60006001600160a01b03891630141561399e57613997308d8d85611b97565b9050613a14565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff1906139ce908f908f9087906004016142ce565b6020604051808303816000875af11580156139ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a11919061426b565b90505b8015613a4b5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b60448201526064016104ca565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b6060600080856001600160a01b031685604051613ad79190614340565b6000604051808303816000865af19150503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b50915091508161128f57805115613b335780518082602001fd5b8360405162461bcd60e51b81526004016104ca9190613f59565b600080600080613b5d8686613c75565b90925090506000826003811115613b7657613b766142b8565b14613b87575091506000905061312d565b6000613b9282613c5d565b9350935050509250929050565b600081613bb484670de0b6b3a764000061435c565b613bbe9190614308565b9050613bca828461437b565b156106725761066f600182614205565b600080600080613b5d8686613cf1565b600061066f83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613d64565b6040805160208101909152600081526040518060200160405280613c54856000015185613bea565b90529392505050565b805160009061067290670de0b6b3a764000090614308565b6000613c8d6040518060200160405280600081525090565b600080613c9e866000015186613db7565b90925090506000826003811115613cb757613cb76142b8565b14613cd65750604080516020810190915260008152909250905061312d565b60408051602081019091529081526000969095509350505050565b6000613d096040518060200160405280600081525090565b600080613d1e670de0b6b3a764000087613db7565b90925090506000826003811115613d3757613d376142b8565b14613d565750604080516020810190915260008152909250905061312d565b613b92818660000151613df6565b6000831580613d71575082155b15613d7e57506000610fac565b6000613d8a848661435c565b905083613d978683614308565b14839061072e5760405162461bcd60e51b81526004016104ca9190613f59565b60008083613dca5750600090508061312d565b83830283613dd88683614308565b14613deb5760026000925092505061312d565b60009250905061312d565b6000613e0e6040518060200160405280600081525090565b600080613e2386670de0b6b3a7640000613db7565b90925090506000826003811115613e3c57613e3c6142b8565b14613e5b5750604080516020810190915260008152909250905061312d565b600080613e688388613ec1565b90925090506000826003811115613e8157613e816142b8565b14613ea4578160405180602001604052806000815250955095505050505061312d565b604080516020810190915290815260009890975095505050505050565b60008082613ed5575060019050600061312d565b6000613ee18486614308565b915091509250929050565b6001600160a01b038116811461079557600080fd5b60008060408385031215613f1457600080fd5b8235613f1f81613eec565b946020939093013593505050565b60005b83811015613f48578181015183820152602001613f30565b838111156122cb5750506000910152565b6020815260008251806020840152613f78816040850160208701613f2d565b601f01601f19169190910160400192915050565b600060208284031215613f9e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613fcd57600080fd5b813567ffffffffffffffff80821115613fe557600080fd5b818401915084601f830112613ff957600080fd5b81358181111561400b5761400b613fa5565b604051601f8201601f19908116603f0116810190838211818310171561403357614033613fa5565b8160405282815287602084870101111561404c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b818110156140ae5783516001600160e01b03191683529284019291840191600101614088565b50909695505050505050565b6000806000606084860312156140cf57600080fd5b83356140da81613eec565b925060208401356140ea81613eec565b929592945050506040919091013590565b60008060006060848603121561411057600080fd5b833561411b81613eec565b925060208401359150604084013561413281613eec565b809150509250925092565b600181811c9082168061415157607f821691505b60208210811415610c6d57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000602082840312156141b757600080fd5b81518015158114610fac57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614218576142186141ef565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614247576142476141ef565b5060010190565b600060ff821680614261576142616141ef565b6000190192915050565b60006020828403121561427d57600080fd5b5051919050565b600082821015614296576142966141ef565b500390565b6000602082840312156142ad57600080fd5b8151610fac81613eec565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082614317576143176142f2565b500490565b6000806040838503121561432f57600080fd5b505080516020909101519092909150565b60008251614352818460208701613f2d565b9190910192915050565b6000816000190483118215151615614376576143766141ef565b500290565b60008261438a5761438a6142f2565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "234:1279:8:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061021c5760003560e01c806389f8132e11610125578063b2a02ff1116100ad578063c91a424f1161007c578063c91a424f14610421578063cb2ef6f714610434578063db006a751461045e578063f3fdb15a14610471578063f5e3c4621461048457600080fd5b8063b2a02ff1146103e3578063be99f119146103f6578063c3bf11cd14610405578063c5ebeaec1461040e57600080fd5b80639826394b116100f45780639826394b14610398578063a0712d68146103a1578063a7b820df146103b4578063aa5af0fd146103c7578063b0d58e49146103d057600080fd5b806389f8132e146103695780638d02d9a11461037e5780638f840ddd1461038757806395d89b411461039057600080fd5b80633b1d21a2116101a857806361feacff1161017757806361feacff146103235780636752e7021461032c5780636c540baf1461033a5780636f307dc314610343578063852a12e31461035657600080fd5b80633b1d21a2146102cf57806347bd3718146102d757806356e67728146102e05780635fe3b567146102f357600080fd5b8063173b9904116101ef578063173b99041461028857806318160ddd146102915780632608f8181461029a5780632c436e5b146102ad578063313ce567146102c257600080fd5b8063067db1b31461022157806306fdde03146102365780630e75270214610254578063135f133414610275575b600080fd5b61023461022f366004613f01565b610497565b005b61023e6104e1565b60405161024b9190613f59565b60405180910390f35b610267610262366004613f8c565b61056f565b60405190815260200161024b565b610267610283366004613f01565b61062c565b61026760085481565b610267600f5481565b6102676102a8366004613f01565b610678565b60015b60405160ff909116815260200161024b565b6003546102b09060ff1681565b610267610737565b610267600b5481565b6102346102ee366004613fbb565b610746565b60035461030b9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161024b565b610267600d5481565b610267666379da05b6000081565b61026760095481565b60135461030b906001600160a01b031681565b610267610364366004613f8c565b610798565b61037161084b565b60405161024b919061406c565b61026760065481565b610267600c5481565b61023e610a53565b610267600e5481565b6102676103af366004613f8c565b610a60565b6102676103c2366004613f8c565b610b15565b610267600a5481565b6102676103de366004613f8c565b610c73565b6102676103f13660046140ba565b610d66565b61026767016345785d8a000081565b61026760075481565b61026761041c366004613f8c565b610d8a565b60005461030b906001600160a01b031681565b60408051808201909152600e81526d43457263323044656c656761746560901b602082015261023e565b61026761046c366004613f8c565b610e3d565b60045461030b906001600160a01b031681565b6102676104923660046140fb565b610ef0565b3330146104d35760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b6104dd8282610fb3565b5050565b600180546104ee9061413d565b80601f016020809104026020016040519081016040528092919081815260200182805461051a9061413d565b80156105675780601f1061053c57610100808354040283529160200191610567565b820191906000526020600020905b81548152906001019060200180831161054a57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105bc9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa1580156105d9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105fd91906141a5565b6106195760405162461bcd60e51b81526004016104ca906141c7565b600061062483611034565b509392505050565b60003330146106655760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104ca565b61066f83836110c5565b90505b92915050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106c59261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa1580156106e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061070691906141a5565b6107225760405162461bcd60e51b81526004016104ca906141c7565b600061072e8484611298565b50949350505050565b600061074161132b565b905090565b333014806107575750610757611398565b6107955760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b60448201526064016104ca565b50565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926107e59261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610802573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061082691906141a5565b6108425760405162461bcd60e51b81526004016104ca906141c7565b61067282611515565b606060036000610859611592565b90508160ff16815161086b9190614205565b67ffffffffffffffff81111561088357610883613fa5565b6040519080825280602002602001820160405280156108ac578160200160208202803683370190505b50925060005b8151811015610912578181815181106108cd576108cd61421d565b60200260200101518482815181106108e7576108e761421d565b6001600160e01b0319909216602092830291909101909101528061090a81614233565b9150506108b2565b50805163cb2ef6f760e01b9084906109298561424e565b94506109389060ff8616614205565b815181106109485761094861421d565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b9084906109778561424e565b94506109869060ff8616614205565b815181106109965761099661421d565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b9084906109c58561424e565b94506109d49060ff8616614205565b815181106109e4576109e461421d565b6001600160e01b03199092166020928302919091019091015260ff821615610a4e5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104ca565b505090565b600280546104ee9061413d565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610aad9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610aca573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aee91906141a5565b610b0a5760405162461bcd60e51b81526004016104ca906141c7565b60006106248361195a565b600080610b21816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610b61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b85919061426b565b504360095414610ba257610b9b600a6039611a9b565b9150610c64565b82610bab61132b565b1015610bbd57610b9b600e6038611a9b565b600d54831115610bd357610b9b6002603a611a9b565b82600d54610be19190614284565b600d55600354604080516303e1469160e61b81529051610c5e9261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015610c34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c58919061429b565b84610fb3565b60005b91505b610c6d81611b14565b50919050565b600080610c7f816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610cbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce3919061426b565b504360095414610cf957610b9b600a6035611a9b565b82610d0261132b565b1015610d1457610b9b600e6034611a9b565b600e54831115610d2a57610b9b60026036611a9b565b600083600e54610d3a9190614284565b600e819055600054909150610d58906001600160a01b031685610fb3565b6000925050610c6d81611b14565b60006001610d73816119d7565b610d7f33868686611b97565b915061062481611b14565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610dd79261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610df4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1891906141a5565b610e345760405162461bcd60e51b81526004016104ca906141c7565b61067282612082565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610e8a9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610ea7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecb91906141a5565b610ee75760405162461bcd60e51b81526004016104ca906141c7565b610672826120fd565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f3d9261010090910490911690339030906001600160e01b031988351690600401614172565b602060405180830381865afa158015610f5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f7e91906141a5565b610f9a5760405162461bcd60e51b81526004016104ca906141c7565b6000610fa785858561217a565b509150505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091018252602080820180516001600160e01b031663a9059cbb60e01b1790528251808401909352601983527f544f4b454e5f5452414e534645525f4f55545f4641494c454400000000000000908301526104dd91612274565b6000806000611042816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611082573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110a6919061426b565b506110b23333866122d2565b925092506110bf81611b14565b50915091565b6013546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611112573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611136919061426b565b90506111c66323b872dd60e01b853086604051602401611158939291906142ce565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280601881526020017f544f4b454e5f5452414e534645525f494e5f4641494c45440000000000000000815250612274565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561120f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611233919061426b565b9050818110156112855760405162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f5700000000000060448201526064016104ca565b61128f8282614284565b95945050505050565b60008060006112a6816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156112e6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061130a919061426b565b506113163386866122d2565b9250925061132381611b14565b509250929050565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611374573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610741919061426b565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156113f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611415919061429b565b6001600160a01b0316336001600160a01b03161480156114925750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561146e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061149291906141a5565b8061150f57506000546001600160a01b03163314801561150f5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150f91906141a5565b91505090565b600080611521816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611561573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611585919061426b565b50610c61336000856126e1565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b816115ce8461424e565b93508360ff16815181106115e4576115e461421d565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b8161160f8461424e565b93508360ff16815181106116255761162561421d565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b816116508461424e565b93508360ff16815181106116665761166661421d565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b816116918461424e565b93508360ff16815181106116a7576116a761421d565b6001600160e01b03199092166020928302919091019091015263073a938160e11b816116d28461424e565b93508360ff16815181106116e8576116e861421d565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b816117138461424e565b93508360ff16815181106117295761172961421d565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b816117548461424e565b93508360ff168151811061176a5761176a61421d565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b816117958461424e565b93508360ff16815181106117ab576117ab61421d565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b816117d68461424e565b93508360ff16815181106117ec576117ec61421d565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816118178461424e565b93508360ff168151811061182d5761182d61421d565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816118588461424e565b93508360ff168151811061186e5761186e61421d565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816118998461424e565b93508360ff16815181106118af576118af61421d565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b816118da8461424e565b93508360ff16815181106118f0576118f061421d565b6001600160e01b03199092166020928302919091019091015260ff8216156106725760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104ca565b6000806000611968816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156119a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119cc919061426b565b506110b23385612d29565b600054600160a01b900460ff16611a1d5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016104ca565b80611a8b57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a7257600080fd5b505af1158015611a86573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611ad057611ad06142b8565b836061811115611ae257611ae26142b8565b60408051928352602083019190915260009082015260600160405180910390a182601181111561066f5761066f6142b8565b6000805460ff60a01b1916600160a01b1790558061079557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611b7c57600080fd5b505af1158015611b90573d6000803e3d6000fd5b5050505050565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c2f919061426b565b90508015611c4c57611c446003601d83613134565b91505061207a565b846001600160a01b0316846001600160a01b03161415611c7257611c446006601e611a9b565b611cd7604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611cfa90856131d6565b6020830181905282826003811115611d1457611d146142b8565b6003811115611d2557611d256142b8565b9052506000905081516003811115611d3f57611d3f6142b8565b14611d6f57611d666009601c83600001516003811115611d6157611d616142b8565b613134565b9250505061207a565b611d8e846040518060200160405280666379da05b60000815250613201565b6080820152604080516020810190915267016345785d8a00008152611db4908590613201565b61014082018190526080820151611dcb9086614284565b611dd59190614284565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e18573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e3c919061426b565b60c082019081526040805160208101909152905181526080820151611e619190613224565b60a0820152604080516020810190915260c08201518152610140820151611e889190613224565b61016082015260a0810151600c54611ea09190614205565b60e08201526101408101516080820151600f54611ebd9190614284565b611ec79190614284565b610120820152610160810151600e54611ee09190614205565b6101008201526001600160a01b0386166000908152601060205260409020546060820151611f0e919061323c565b6040830181905282826003811115611f2857611f286142b8565b6003811115611f3957611f396142b8565b9052506000905081516003811115611f5357611f536142b8565b14611f7557611d666009601b83600001516003811115611d6157611d616142b8565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b1680825290849020929092556060850151925192835290929091600080516020614390833981519152910160405180910390a3306001600160a01b0316856001600160a01b0316600080516020614390833981519152836080015160405161202291815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061208e816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156120ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120f2919061426b565b50610c613384613262565b600080612109816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061216d919061426b565b50610c61338460006126e1565b6000806000612188816119d7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156121c8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ec919061426b565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561222d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612251919061426b565b5061225e338787876135fd565b9250925061226b81611b14565b50935093915050565b60135460009061228e906001600160a01b03168484613aba565b8051909150156122cd57808060200190518101906122ac91906141a5565b82906122cb5760405162461bcd60e51b81526004016104ca9190613f59565b505b505050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af1158015612340573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612364919061426b565b90508015612385576123796003604383613134565b600092509250506126d9565b436009541461239a57612379600a6044611a9b565b6123e36040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa15801561244d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612471919061426b565b608082015260001985141561248f5760808101516040820152612497565b604081018590525b6124a58782604001516110c5565b60e0820181905260808201516124ba916131d6565b60a08301819052602083018260038111156124d7576124d76142b8565b60038111156124e8576124e86142b8565b9052506000905081602001516003811115612505576125056142b8565b146125785760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c454400000000000060648201526084016104ca565b612588600b548260e001516131d6565b60c08301819052602083018260038111156125a5576125a56142b8565b60038111156125b6576125b66142b8565b90525060009050816020015160038111156125d3576125d36142b8565b1461263a5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b60648201526084016104ca565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b60008215806126ee575081155b61273a5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e74000000000000000060448201526064016104ca565b61277b6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127dd919061426b565b604082015283156128a05761138884600f546127f99190614284565b101561280557600f5493505b60608101849052604080516020810182529082015181526128269085613b4d565b6080830181905260208301826003811115612843576128436142b8565b6003811115612854576128546142b8565b9052506000905081602001516003811115612871576128716142b8565b1461289b576128936009602c83602001516003811115611d6157611d616142b8565b915050610fac565b6129e8565b60001983141561292e57600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612907573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061292b919061426b565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561296e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612992919061426b565b90506103e86129a18583614284565b10156129ab578093505b6129b9848360400151613b9f565b60608301819052600f546103e8916129d091614284565b10156129df57600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612a269130918b91906004016142ce565b6020604051808303816000875af1158015612a45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a69919061426b565b90508015612a8757612a7e6003602b83613134565b92505050610fac565b4360095414612a9c57612a7e600a602f611a9b565b612aac600f5483606001516131d6565b60a0840181905260208401826003811115612ac957612ac96142b8565b6003811115612ada57612ada6142b8565b9052506000905082602001516003811115612af757612af76142b8565b14612b1957612a7e6009603184602001516003811115611d6157611d616142b8565b6001600160a01b0386166000908152601060205260409020546060830151612b4191906131d6565b60c0840181905260208401826003811115612b5e57612b5e6142b8565b6003811115612b6f57612b6f6142b8565b9052506000905082602001516003811115612b8c57612b8c6142b8565b14612bae57612a7e6009603084602001516003811115611d6157611d616142b8565b8160800151612bbb61132b565b1015612bcd57612a7e600e6032611a9b565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612c03908790610fb3565b306001600160a01b0316866001600160a01b03166000805160206143908339815191528460600151604051612c3a91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612cfe57600080fd5b505af1158015612d12573d6000803e3d6000fd5b5060009250612d1f915050565b9695505050505050565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e190612d67903090899089906004016142ce565b6020604051808303816000875af1158015612d86573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612daa919061426b565b90508015612dcb57612dbf6003602183613134565b6000925092505061312d565b4360095414612de057612dbf600a6024611a9b565b612e216040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e83919061426b565b6040820152612e9286866110c5565b60c0820181905260408051602081018252908301518152612eb39190613bda565b6060830181905260208301826003811115612ed057612ed06142b8565b6003811115612ee157612ee16142b8565b9052506000905081602001516003811115612efe57612efe6142b8565b14612f4b5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c454460448201526064016104ca565b6000816060015111612f9f5760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a454354454400000000000060448201526064016104ca565b8060600151600f54612fb19190614205565b608082015260608101516001600160a01b038716600090815260106020526040902054612fde9190614205565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b0316600080516020614390833981519152836060015160405161308d91815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561310057600080fd5b505af1158015613114573d6000803e3d6000fd5b5060009250613121915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846011811115613169576131696142b8565b84606181111561317b5761317b6142b8565b604080519283526020830191909152810184905260600160405180910390a160038460118111156131ae576131ae6142b8565b146131ca578360118111156131c5576131c56142b8565b61207a565b61207a826103e8614205565b6000808383116131f55760006131ec8486614284565b9150915061312d565b5060039050600061312d565b6000670de0b6b3a764000061321a848460000151613bea565b61066f9190614308565b6000806132318484613c2c565b905061207a81613c5d565b6000808383018481106132545760009250905061312d565b60026000925092505061312d565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c9061329f903090889088906004016142ce565b6020604051808303816000875af11580156132be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e2919061426b565b905080156132ff576132f76003601083613134565b915050610672565b4360095414613314576132f7600a600c611a9b565b600061331e61132b565b90508381101561333d57613334600e600b611a9b565b92505050610672565b613369604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156133b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133d6919061426b565b602082018190526133e7908661323c565b6040830181905282826003811115613401576134016142b8565b6003811115613412576134126142b8565b905250600090508151600381111561342c5761342c6142b8565b146134585761344e6009600e83600001516003811115611d6157611d616142b8565b9350505050610672565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156134b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134d5919061426b565b925082156134ea5761344e6003601085613134565b6134f6600b548661323c565b6060830181905282826003811115613510576135106142b8565b6003811115613521576135216142b8565b905250600090508151600381111561353b5761353b6142b8565b1461355d5761344e6009600d83600001516003811115611d6157611d616142b8565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b556135998686610fb3565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613673573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613697919061426b565b905080156136b8576136ac6003601483613134565b60009250925050613ab1565b43600954146136cd576136ac600a6018611a9b565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561370c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613730919061426b565b14613741576136ac600a6013611a9b565b866001600160a01b0316866001600160a01b03161415613767576136ac60066019611a9b565b84613778576136ac60076017611a9b565b60001985141561378e576136ac60076016611a9b565b60008061379c8989896122d2565b909250905081156137d1576137c38260118111156137bc576137bc6142b8565b601a611a9b565b600094509450505050613ab1565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b9061380e9030908c9088906004016142ce565b6040805180830381865afa15801561382a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061384e919061431c565b909250905081156138bd5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016104ca565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613906573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392a919061426b565b10156139785760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016104ca565b60006001600160a01b03891630141561399e57613997308d8d85611b97565b9050613a14565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff1906139ce908f908f9087906004016142ce565b6020604051808303816000875af11580156139ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a11919061426b565b90505b8015613a4b5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b60448201526064016104ca565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b6060600080856001600160a01b031685604051613ad79190614340565b6000604051808303816000865af19150503d8060008114613b14576040519150601f19603f3d011682016040523d82523d6000602084013e613b19565b606091505b50915091508161128f57805115613b335780518082602001fd5b8360405162461bcd60e51b81526004016104ca9190613f59565b600080600080613b5d8686613c75565b90925090506000826003811115613b7657613b766142b8565b14613b87575091506000905061312d565b6000613b9282613c5d565b9350935050509250929050565b600081613bb484670de0b6b3a764000061435c565b613bbe9190614308565b9050613bca828461437b565b156106725761066f600182614205565b600080600080613b5d8686613cf1565b600061066f83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613d64565b6040805160208101909152600081526040518060200160405280613c54856000015185613bea565b90529392505050565b805160009061067290670de0b6b3a764000090614308565b6000613c8d6040518060200160405280600081525090565b600080613c9e866000015186613db7565b90925090506000826003811115613cb757613cb76142b8565b14613cd65750604080516020810190915260008152909250905061312d565b60408051602081019091529081526000969095509350505050565b6000613d096040518060200160405280600081525090565b600080613d1e670de0b6b3a764000087613db7565b90925090506000826003811115613d3757613d376142b8565b14613d565750604080516020810190915260008152909250905061312d565b613b92818660000151613df6565b6000831580613d71575082155b15613d7e57506000610fac565b6000613d8a848661435c565b905083613d978683614308565b14839061072e5760405162461bcd60e51b81526004016104ca9190613f59565b60008083613dca5750600090508061312d565b83830283613dd88683614308565b14613deb5760026000925092505061312d565b60009250905061312d565b6000613e0e6040518060200160405280600081525090565b600080613e2386670de0b6b3a7640000613db7565b90925090506000826003811115613e3c57613e3c6142b8565b14613e5b5750604080516020810190915260008152909250905061312d565b600080613e688388613ec1565b90925090506000826003811115613e8157613e816142b8565b14613ea4578160405180602001604052806000815250955095505050505061312d565b604080516020810190915290815260009890975095505050505050565b60008082613ed5575060019050600061312d565b6000613ee18486614308565b915091509250929050565b6001600160a01b038116811461079557600080fd5b60008060408385031215613f1457600080fd5b8235613f1f81613eec565b946020939093013593505050565b60005b83811015613f48578181015183820152602001613f30565b838111156122cb5750506000910152565b6020815260008251806020840152613f78816040850160208701613f2d565b601f01601f19169190910160400192915050565b600060208284031215613f9e57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b600060208284031215613fcd57600080fd5b813567ffffffffffffffff80821115613fe557600080fd5b818401915084601f830112613ff957600080fd5b81358181111561400b5761400b613fa5565b604051601f8201601f19908116603f0116810190838211818310171561403357614033613fa5565b8160405282815287602084870101111561404c57600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b818110156140ae5783516001600160e01b03191683529284019291840191600101614088565b50909695505050505050565b6000806000606084860312156140cf57600080fd5b83356140da81613eec565b925060208401356140ea81613eec565b929592945050506040919091013590565b60008060006060848603121561411057600080fd5b833561411b81613eec565b925060208401359150604084013561413281613eec565b809150509250925092565b600181811c9082168061415157607f821691505b60208210811415610c6d57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b6000602082840312156141b757600080fd5b81518015158114610fac57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b60008219821115614218576142186141ef565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614247576142476141ef565b5060010190565b600060ff821680614261576142616141ef565b6000190192915050565b60006020828403121561427d57600080fd5b5051919050565b600082821015614296576142966141ef565b500390565b6000602082840312156142ad57600080fd5b8151610fac81613eec565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082614317576143176142f2565b500490565b6000806040838503121561432f57600080fd5b505080516020909101519092909150565b60008251614352818460208701613f2d565b9190910192915050565b6000816000190483118215151615614376576143766141ef565b500290565b60008261438a5761438a6142f2565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "234:1279:8:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6703:158:13;;;;;;:::i;:::-;;:::i;:::-;;580:18:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4337:168:13;;;;;;:::i;:::-;;:::i;:::-;;;1452:25:504;;;1440:2;1425:18;4337:168:13;1306:177:504;6865:185:13;;;;;;:::i;:::-;;:::i;1783:36:15:-;;;;;;2626:26;;;;;;4771:208:13;;;;;;:::i;:::-;;:::i;1306:88:8:-;1388:1;1306:88;;;1660:4:504;1648:17;;;1630:36;;1618:2;1603:18;1306:88:8;1488:184:504;750:21:15;;;;;;;;;5851:95:13;;;:::i;2162:27:15:-;;;;;;1147:155:8;;;;;;:::i;:::-;;:::i;1148:35:15:-;;;;;;;;-1:-1:-1;;;;;1148:35:15;;;;;;-1:-1:-1;;;;;2925:32:504;;;2907:51;;2895:2;2880:18;1148:35:15;2735:229:504;2405:29:15;;;;;;3491:59;;3544:6;3491:59;;1896:33;;;;;;3740:25;;;;;-1:-1:-1;;;;;3740:25:15;;;3617:153:13;;;;;;:::i;:::-;;:::i;272:782:8:-;;;:::i;:::-;;;;;;;:::i;1551:31:15:-;;;;;;2282:28;;;;;;663:20;;;:::i;2529:29::-;;;;;;2669:152:13;;;;;;:::i;:::-;;:::i;8504:1035::-;;;;;;:::i;:::-;;:::i;2037:26:15:-;;;;;;7283:988:13;;;;;;:::i;:::-;;:::i;6476:223::-;;;;;;:::i;:::-;;:::i;3619:52:15:-;;3667:4;3619:52;;1668:31;;;;;;4015:133:13;;;;;;:::i;:::-;;:::i;336:33:15:-;;;;;-1:-1:-1;;;;;336:33:15;;;1398:113:8;1483:23;;;;;;;;;;;;-1:-1:-1;;;1483:23:8;;;;1398:113;;3150:133:13;;;;;;:::i;:::-;;:::i;1272:42:15:-;;;;;-1:-1:-1;;;;;1272:42:15;;;5433:264:13;;;;;;:::i;:::-;;:::i;6703:158::-;6788:10;6810:4;6788:27;6780:45;;;;-1:-1:-1;;;6780:45:13;;5422:2:504;6780:45:13;;;5404:21:504;5461:1;5441:18;;;5434:29;-1:-1:-1;;;5479:18:504;;;5472:35;5524:18;;6780:45:13;;;;;;;;;6831:25;6845:2;6849:6;6831:13;:25::i;:::-;6703:158;;:::o;580:18:15:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4337:168:13:-;4419:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4435:11:::1;4452:32;4472:11;4452:19;:32::i;:::-;-1:-1:-1::0;4434:50:13;4337:168;-1:-1:-1;;;4337:168:13:o;6865:185::-;6946:7;6969:10;6991:4;6969:27;6961:45;;;;-1:-1:-1;;;6961:45:13;;5422:2:504;6961:45:13;;;5404:21:504;5461:1;5441:18;;;5434:29;-1:-1:-1;;;5479:18:504;;;5472:35;5524:18;;6961:45:13;5220:328:504;6961:45:13;7019:26;7032:4;7038:6;7019:12;:26::i;:::-;7012:33;;6865:185;;;;;:::o;4771:208::-;4877:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4893:11:::1;4910:48;4936:8;4946:11;4910:25;:48::i;:::-;-1:-1:-1::0;4892:66:13;4771:208;-1:-1:-1;;;;4771:208:13:o;5851:95::-;5902:7;5924:17;:15;:17::i;:::-;5917:24;;5851:95;:::o;1147:155:8:-;1230:10;1252:4;1230:27;;:47;;;1261:16;:14;:16::i;:::-;1222:75;;;;-1:-1:-1;;;1222:75:8;;7251:2:504;1222:75:8;;;7233:21:504;7290:2;7270:18;;;7263:30;-1:-1:-1;;;7309:18:504;;;7302:45;7364:18;;1222:75:8;7049:339:504;1222:75:8;1147:155;:::o;3617:153:13:-;3705:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;3727:38:::1;3752:12;3727:24;:38::i;272:782:8:-:0;344:33;402:1;385:14;451:30;:28;:30::i;:::-;410:71;;552:8;520:40;;:22;:29;:40;;;;:::i;:::-;507:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:54:8;;487:74;;573:9;568:123;592:22;:29;588:1;:33;568:123;;;659:22;682:1;659:25;;;;;;;;:::i;:::-;;;;;;;636:17;654:1;636:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;636:48:8;;;:20;;;;;;;;;;;:48;623:3;;;;:::i;:::-;;;;568:123;;;-1:-1:-1;728:29:8;;-1:-1:-1;;;761:26:8;697:17;;715:10;;;:::i;:::-;;-1:-1:-1;715:42:8;;;;;;:::i;:::-;697:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;697:90:8;;;:61;;;;;;;;;;;:90;824:29;;-1:-1:-1;;;857:26:8;793:17;;811:10;;;:::i;:::-;;-1:-1:-1;811:42:8;;;;;;:::i;:::-;793:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;793:90:8;;;:61;;;;;;;;;;;:90;920:29;;-1:-1:-1;;;953:35:8;889:17;;907:10;;;:::i;:::-;;-1:-1:-1;907:42:8;;;;;;:::i;:::-;889:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;889:99:8;;;:61;;;;;;;;;;;:99;1003:13;;;;995:54;;;;-1:-1:-1;;;995:54:8;;8315:2:504;995:54:8;;;8297:21:504;8354:2;8334:18;;;8327:30;8393;8373:18;;;8366:58;8441:18;;995:54:8;8113:352:504;995:54:8;379:675;;272:782;:::o;663:20:15:-;;;;;;;:::i;2669:152:13:-;2743:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;2759:11:::1;2776:24;2789:10;2776:12;:24::i;8504:1035::-:0;8603:7;8587:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;8618:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8687:12;8665:18;;:34;8661:135;;8716:73;8721:22;8745:43;8716:4;:73::i;:::-;8709:80;;;;8661:135;8894:14;8874:17;:15;:17::i;:::-;:34;8870:149;;;8925:87;8930:29;8961:50;8925:4;:87::i;8870:149::-;9046:14;;9029;:31;9025:124;;;9077:65;9082:15;9099:42;9077:4;:65::i;9025:124::-;9293:14;9276;;:31;;;;:::i;:::-;9259:14;:48:::0;9459:11:::1;::::0;9430:50:::1;::::0;;-1:-1:-1;;;9430:50:13;;;;9416:81:::1;::::0;9459:11:::1;::::0;::::1;-1:-1:-1::0;;;;;9459:11:13::1;::::0;9430:48:::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;9459:11;9430:50:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9482:14;9416:13;:81::i;:::-;9519:14;9511:23;9504:30;;41731:1;41738:29:::0;41757:9;41738:18;:29::i;:::-;8504:1035;;;;:::o;7283:988::-;7382:7;7366:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;7397:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7466:12;7444:18;;:34;7440:135;;7495:73;7500:22;7524:43;7495:4;:73::i;7440:135::-;7605:14;7585:17;:15;:17::i;:::-;:34;7581:149;;;7636:87;7641:29;7672:50;7636:4;:87::i;7581:149::-;7757:14;;7740;:31;7736:124;;;7788:65;7793:15;7810:42;7788:4;:65::i;7736:124::-;7971:25;8016:14;7999;;:31;;;;:::i;:::-;8036:14;:34:::0;;;8201:10:::1;::::0;7971:59;;-1:-1:-1;8179:50:13::1;::::0;-1:-1:-1;;;;;8201:10:13::1;8214:14:::0;8179:13:::1;:50::i;:::-;8251:14;8236:30;;;41738:29:::0;41757:9;41738:18;:29::i;6476:223::-;6612:7;6597:4;41695:30;41715:9;41695:19;:30::i;:::-;6634:60:::1;6648:10;6660;6672:8;6682:11;6634:13;:60::i;:::-;6627:67;;41738:29:::0;41757:9;41738:18;:29::i;4015:133::-;4093:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4115:28:::1;4130:12;4115:14;:28::i;3150:133::-:0;3228:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;3250:28:::1;3265:12;3250:14;:28::i;5433:264::-:0;5579:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;5595:11:::1;5612:64;5636:8;5646:11;5659:16;5612:23;:64::i;:::-;-1:-1:-1::0;5594:82:13;-1:-1:-1;;1193:1:13::1;5433:264:::0;;;;;:::o;11820:215::-;11921:68;;;-1:-1:-1;;;;;9369:32:504;;11921:68:13;;;9351:51:504;9418:18;;;;9411:34;;;11921:68:13;;;;;;;;;;9324:18:504;;;;11921:68:13;;;;;;;;-1:-1:-1;;;;;11921:68:13;-1:-1:-1;;;11921:68:13;;;11894:136;;;;;;;;;;;;;;;;;;:19;:136::i;27701:307::-;27789:7;27798;27773:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;27813:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27950:53;27967:10;27979;27991:11;27950:16;:53::i;:::-;27943:60;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;27701:307;;;;:::o;10506:641::-;10638:10;;10623:51;;-1:-1:-1;;;10623:51:13;;10668:4;10623:51;;;2907::504;10584:7:13;;;;-1:-1:-1;;;;;10638:10:13;;;;10623:36;;2880:18:504;;10623:51:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10599:75;;10680:156;10730:36;;;10768:4;10782;10789:6;10707:89;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;10707:89:13;;;;;;;-1:-1:-1;;;;;10707:89:13;;;;;;;;;;;10680:156;;;;;;;;;;;;;;;;;:19;:156::i;:::-;10941:10;;10926:51;;-1:-1:-1;;;10926:51:13;;10971:4;10926:51;;;2907::504;10903:20:13;;-1:-1:-1;;;;;10941:10:13;;10926:36;;2880:18:504;;10926:51:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10903:74;;11007:13;10991:12;:29;;10983:68;;;;-1:-1:-1;;;10983:68:13;;10038:2:504;10983:68:13;;;10020:21:504;10077:2;10057:18;;;10050:30;10116:28;10096:18;;;10089:56;10162:18;;10983:68:13;9836:350:504;10983:68:13;11064:28;11079:13;11064:12;:28;:::i;:::-;11057:35;10506:641;-1:-1:-1;;;;;10506:641:13:o;28319:343::-;28443:7;28452;28423:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;28469:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28606:51;28623:10;28635:8;28645:11;28606:16;:51::i;:::-;28599:58;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;28319:343;;;;;;:::o;9784:136::-;9879:10;;9864:51;;-1:-1:-1;;;9864:51:13;;9909:4;9864:51;;;2907::504;9842:7:13;;-1:-1:-1;;;;;9879:10:13;;9864:36;;2880:18:504;;9864:51:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10661:339:15:-;10710:4;10722:39;10793:11;;;;;;;;;-1:-1:-1;;;;;10793:11:15;10722:84;;10840:18;-1:-1:-1;;;;;10840:24:15;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10826:40:15;:10;-1:-1:-1;;;;;10826:40:15;;:79;;;;;10870:18;-1:-1:-1;;;;;10870:33:15;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10825:170;;;-1:-1:-1;10939:10:15;;-1:-1:-1;;;;;10939:10:15;10917;:33;:77;;;;;10954:18;-1:-1:-1;;;;;10954:38:15;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10812:183;;;10661:339;:::o;17924:280:13:-;18018:7;18002:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;18033:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:40;18171:10;18183:1;18186:12;18159:11;:40::i;1203:1102::-:0;1359:22;;;1315:2;1359:22;;;;;;;;;1275:15;;1315:2;1298:14;;1315:2;1359:22;;;;;;;;;;-1:-1:-1;;1323:58:13;-1:-1:-1;;;;1323:58:13;1405:10;;;:::i;:::-;;;;1387:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1387:50:13;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;1443:17:13;1461:10;;;:::i;:::-;;;;1443:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1443:52:13;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1501:17:13;1519:10;;;:::i;:::-;;;;1501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1501:62:13;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;1569:17:13;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:52:13;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1627:17:13;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:57:13;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;1690:17:13;1708:10;;;:::i;:::-;;;;1690:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1690:63:13;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1759:17:13;1777:10;;;:::i;:::-;;;;1759:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1759:61:13;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;1826:17:13;1844:10;;;:::i;:::-;;;;1826:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1826:53:13;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1885:17:13;1903:10;;;:::i;:::-;;;;1885:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1885:51:13;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;1942:17:13;1960:10;;;:::i;:::-;;;;1942:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1942:61:13;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2009:17:13;2027:10;;;:::i;:::-;;;;2009:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2009:60:13;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2075:17:13;2093:10;;;:::i;:::-;;;;2075:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2075:64:13;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2145:17:13;2163:10;;;:::i;:::-;;;;2145:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2145:64:13;;;:29;;;;;;;;;;;:64;2224:13;;;;2216:54;;;;-1:-1:-1;;;2216:54:13;;8315:2:504;2216:54:13;;;8297:21:504;8354:2;8334:18;;;8327:30;8393;8373:18;;;8366:58;8441:18;;2216:54:13;8113:352:504;13048:290:13;13128:7;13137;13112:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;13152:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13300:33;13310:10;13322;13300:9;:33::i;42073:178::-:0;42140:11;;-1:-1:-1;;;42140:11:13;;;;42132:34;;;;-1:-1:-1;;;42132:34:13;;10393:2:504;42132:34:13;;;10375:21:504;10432:2;10412:18;;;10405:30;-1:-1:-1;;;10451:18:504;;;10444:40;10501:18;;42132:34:13;10191:334:504;42132:34:13;42177:9;42172:49;;42188:11;;;;;;;;;-1:-1:-1;;;;;42188:11:13;-1:-1:-1;;;;;42188:31:13;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:49;-1:-1:-1;42241:5:13;42227:19;;-1:-1:-1;;;;42227:19:13;;;42073:178::o;7757:151:23:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;10740:25:504;;;10796:2;10781:18;;10774:34;;;;7875:1:23;10824:18:504;;;10817:34;10728:2;10713:18;7838:39:23;;;;;;;7899:3;7891:12;;;;;;;;:::i;42551:169:13:-;42609:11;:18;;-1:-1:-1;;;;42609:18:13;-1:-1:-1;;;42609:18:13;;;42672:9;42667:48;;42683:11;;;;;;;;;-1:-1:-1;;;;;42683:11:13;-1:-1:-1;;;;;42683:30:13;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42551:169;:::o;38262:3163::-;38472:11;;:87;;-1:-1:-1;;;38472:87:13;;38505:4;38472:87;;;11159:34:504;-1:-1:-1;;;;;11229:15:504;;;11209:18;;;11202:43;11281:15;;;11261:18;;;11254:43;11333:15;;;11313:18;;;11306:43;11365:19;;;11358:35;;;38403:7:13;;;;38472:11;;;;;;;;:24;;11093:19:504;;38472:87:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38454:105;-1:-1:-1;38569:12:13;;38565:139;;38598:99;38609:27;38638:49;38689:7;38598:10;:99::i;:::-;38591:106;;;;;38565:139;38766:10;-1:-1:-1;;;;;38754:22:13;:8;-1:-1:-1;;;;;38754:22:13;;38750:134;;;38793:84;38798:26;38826:50;38793:4;:84::i;38750:134::-;38890:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38890:34:13;-1:-1:-1;;;;;39230:23:13;;;;;;:13;:23;;;;;;39222:45;;39255:11;39222:7;:45::i;:::-;39196:22;;;39181:86;;;39182:4;39181:86;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;39293:18:13;;-1:-1:-1;39277:12:13;;:34;;;;;;;;:::i;:::-;;39273:167;;39328:105;39339:16;39357:52;39419:4;:12;;;39411:21;;;;;;;;:::i;:::-;39328:10;:105::i;:::-;39321:112;;;;;;39273:167;39473:64;39478:11;39491:45;;;;;;;;3544:6:15;39491:45:13;;;39473:4;:64::i;:::-;39446:24;;;:91;39583:40;;;;;;;;;3667:4:15;39583:40:13;;39565:59;;39570:11;;39565:4;:59::i;:::-;39543:19;;;:81;;;39673:24;;;;39659:38;;:11;:38;:::i;:::-;:60;;;;:::i;:::-;39630:26;;;:89;41519:4;-1:-1:-1;;;;;39754:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39726:25;;;:69;;;39855:44;;;;;;;;;39871:25;;39855:44;;-1:-1:-1;;;39907:24:13;39829:108;;39855:44;39829:18;:108::i;:::-;39802:24;;;:135;39984:44;;;;;;;;;40000:25;;;;39984:44;;40030:19;;;;39965:85;;39984:44;39965:18;:85::i;:::-;39943:19;;;:107;40097:24;;;;40081:13;;:40;;40097:24;40081:40;:::i;:::-;40057:21;;;:64;40190:19;;;;40163:24;;;;40149:11;;:38;;40163:24;40149:38;:::i;:::-;:60;;;;:::i;:::-;40127:19;;;:82;40256:19;;;;40239:14;;:36;;40256:19;40239:36;:::i;:::-;40215:21;;;:60;-1:-1:-1;;;;;40333:25:13;;;;;;:13;:25;;;;;;40360:26;;;;40325:62;;40333:25;40325:7;:62::i;:::-;40297:24;;;40282:105;;;40283:4;40282:105;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;40413:18:13;;-1:-1:-1;40397:12:13;;:34;;;;;;;;:::i;:::-;;40393:167;;40448:105;40459:16;40477:52;40539:4;:12;;;40531:21;;;;;;;;:::i;40393:167::-;40752:21;;;;40736:13;:37;40793:19;;;;40779:11;:33;40835:21;;;;40818:14;:38;40889:22;;;;;-1:-1:-1;;;;;40863:23:13;;;-1:-1:-1;40863:23:13;;;:13;:23;;;;;;:48;;;;40945:24;;;;40917:25;;;;;;;;;;:52;;;;41044:26;;;;41013:58;;1452:25:504;;;40917::13;;40863:23;;-1:-1:-1;;;;;;;;;;;41013:58:13;1425:18:504;41013:58:13;;;;;;;41109:4;-1:-1:-1;;;;;41082:59:13;41091:8;-1:-1:-1;;;;;41082:59:13;-1:-1:-1;;;;;;;;;;;41116:4:13;:24;;;41082:59;;;;1452:25:504;;1440:2;1425:18;;1306:177;41082:59:13;;;;;;;;41181:24;;;;41207:21;;;;41152:77;;;41174:4;11606:51:504;;11688:2;11673:18;;11666:34;;;;11716:18;;11709:34;41152:77:13;;11594:2:504;11579:18;41152:77:13;;;;;;;41405:14;41390:30;;;;38262:3163;;;;;;;:::o;23833:267::-;23917:7;23901:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;23932:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24058:37;24070:10;24082:12;24058:11;:37::i;17296:270::-:0;17380:7;17364:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;17395:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17521:40;17533:10;17545:12;17559:1;17521:11;:40::i;32809:437::-:0;32961:7;32970;32945:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;32985:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33035:16;-1:-1:-1::0;;;;;33027:40:13::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33168:73;33189:10;33201:8;33211:11;33224:16;33168:20;:73::i;:::-;33161:80;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;32809:437;;;;;;;:::o;12419:253::-;12550:10;;12510:23;;12536:45;;-1:-1:-1;;;;;12550:10:13;12562:4;12568:12;12536:13;:45::i;:::-;12591:17;;12510:71;;-1:-1:-1;12591:21:13;12587:80;;12633:10;12622:30;;;;;;;;;;;;:::i;:::-;12654:12;12614:53;;;;;-1:-1:-1;;;12614:53:13;;;;;;;;:::i;:::-;;12587:80;12504:168;12419:253;;:::o;29313:2997::-;29511:11;;:75;;-1:-1:-1;;;29511:75:13;;29550:4;29511:75;;;12023:34:504;-1:-1:-1;;;;;12093:15:504;;;12073:18;;;12066:43;12145:15;;;12125:18;;;12118:43;12177:18;;;12170:34;;;29427:7:13;;;;;;29511:11;;;;;;;;:30;;11957:19:504;;29511:75:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29493:93;-1:-1:-1;29596:12:13;;29592:141;;29626:96;29637:27;29666:46;29714:7;29626:10;:96::i;:::-;29724:1;29618:108;;;;;;;29592:141;29832:12;29810:18;;:34;29806:137;;29862:70;29867:22;29891:40;29862:4;:70::i;29806:137::-;29949:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:32:13;-1:-1:-1;;;;;30084:24:13;;;;;;:14;:24;;;;;:38;;;30063:18;;;:59;41519:4;30226:50;;-1:-1:-1;;;30226:50:13;;-1:-1:-1;;;;;2925:32:504;;;30226:50:13;;;2907:51:504;30226:40:13;;;;;;;2880:18:504;;30226:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30204:19;;;:72;-1:-1:-1;;30348:32:13;;30344:142;;;30409:19;;;;30390:16;;;:38;30344:142;;;30449:16;;;:30;;;30344:142;31027:37;31040:5;31047:4;:16;;;31027:12;:37::i;:::-;31002:22;;;:62;;;31343:19;;;;31335:52;;:7;:52::i;:::-;31309:22;;;31294:93;;;31295:12;;;31294:93;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31417:18:13;;-1:-1:-1;31401:4:13;:12;;;:34;;;;;;;;:::i;:::-;;31393:105;;;;-1:-1:-1;;;31393:105:13;;12417:2:504;31393:105:13;;;12399:21:504;12456:2;12436:18;;;12429:30;12495:34;12475:18;;;12468:62;12566:28;12546:18;;;12539:56;12612:19;;31393:105:13;12215:422:504;31393:105:13;31544:45;31552:12;;31566:4;:22;;;31544:7;:45::i;:::-;31520:20;;;31505:84;;;31506:12;;;31505:84;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31619:18:13;;-1:-1:-1;31603:4:13;:12;;;:34;;;;;;;;:::i;:::-;;31595:96;;;;-1:-1:-1;;;31595:96:13;;12844:2:504;31595:96:13;;;12826:21:504;12883:2;12863:18;;;12856:30;12922:34;12902:18;;;12895:62;-1:-1:-1;;;12973:18:504;;;12966:47;13030:19;;31595:96:13;12642:413:504;31595:96:13;31800:22;;;;;;-1:-1:-1;;;;;31763:24:13;;;;;;;:14;:24;;;;;;;;;:59;;;31869:11;;31828:38;;;;:52;;;;31901:20;;;;31886:12;:35;;;32000:22;;;;32024;;31971:98;;13375:15:504;;;13357:34;;13407:18;;;13400:43;;;;13459:18;;13452:34;;;;13517:2;13502:18;;13495:34;;;;13560:3;13545:19;;13538:35;;;;31971:98:13;;13291:19:504;31971:98:13;;;;;;;32282:22;;;32265:14;;-1:-1:-1;32282:22:13;-1:-1:-1;;29313:2997:13;;;;;;;:::o;19181:4407::-;19302:7;19325:19;;;:42;;-1:-1:-1;19348:19:13;;19325:42;19317:79;;;;-1:-1:-1;;;19317:79:13;;13786:2:504;19317:79:13;;;13768:21:504;13825:2;13805:18;;;13798:30;13864:26;13844:18;;;13837:54;13908:18;;19317:79:13;13584:348:504;19317:79:13;19403:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:27:13;41519:4;-1:-1:-1;;;;;19465:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19437:25;;;:69;19517:18;;19513:1634;;19637:4;19620:14;19606:11;;:28;;;;:::i;:::-;:35;19602:69;;;19660:11;;19643:28;;19602:69;19886:17;;;:34;;;19992:44;;;;;;;;20008:25;;;;19992:44;;19965:103;;19906:14;19965:17;:103::i;:::-;19944:17;;;19929:139;;;19930:12;;;19929:139;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;20096:18:13;;-1:-1:-1;20080:4:13;:12;;;:34;;;;;;;;:::i;:::-;;20076:182;;20143:106;20154:16;20172:53;20235:4;:12;;;20227:21;;;;;;;;:::i;20143:106::-;20126:123;;;;;20076:182;19513:1634;;;-1:-1:-1;;20282:14:13;:35;20278:150;;;20346:11;;:73;;-1:-1:-1;;;20346:73:13;;-1:-1:-1;;;;;14206:15:504;;;20346:73:13;;;14188:34:504;20405:4:13;14238:18:504;;;14231:43;20413:5:13;14290:18:504;;;14283:50;20346:11:13;;;;;;;;:32;;14123:18:504;;20346:73:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:90;;20278:150;20493:31;41519:4;-1:-1:-1;;;;;20527:46:13;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20493:82;-1:-1:-1;20630:4:13;20587:40;20613:14;20493:82;20587:40;:::i;:::-;:47;20583:93;;;20653:23;20636:40;;20583:93;20903:53;20914:14;20930:4;:25;;;20903:10;:53::i;:::-;20883:17;;;:73;;;21026:11;;21060:4;;21026:31;;;:::i;:::-;:38;21022:75;;;21086:11;;21066:17;;;:31;21022:75;-1:-1:-1;21106:17:13;;;:34;;;19513:1634;21208:11;;21259:17;;;;21208:69;;-1:-1:-1;;;21208:69:13;;21190:15;;21208:11;;;-1:-1:-1;;;;;21208:11:13;;:25;;:69;;21242:4;;21249:8;;21259:17;21208:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:87;-1:-1:-1;21287:12:13;;21283:130;;21316:90;21327:27;21356:40;21398:7;21316:10;:90::i;:::-;21309:97;;;;;;21283:130;21512:12;21490:18;;:34;21486:126;;21541:64;21546:22;21570:34;21541:4;:64::i;21486:126::-;21876:39;21884:11;;21897:4;:17;;;21876:7;:39::i;:::-;21853:19;;;21838:77;;;21839:12;;;21838:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;21941:18:13;;-1:-1:-1;21925:4:13;:12;;;:34;;;;;;;;:::i;:::-;;21921:177;;21984:107;21995:16;22013:54;22077:4;:12;;;22069:21;;;;;;;;:::i;21921:177::-;-1:-1:-1;;;;;22152:23:13;;;;;;:13;:23;;;;;;22177:17;;;;22144:51;;22152:23;22144:7;:51::i;:::-;22119:21;;;22104:91;;;22105:12;;;22104:91;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;22221:18:13;;-1:-1:-1;22205:4:13;:12;;;:34;;;;;;;;:::i;:::-;;22201:180;;22264:110;22275:16;22293:57;22360:4;:12;;;22352:21;;;;;;;;:::i;22201:180::-;22471:4;:17;;;22451;:15;:17::i;:::-;:37;22447:146;;;22505:81;22510:29;22541:44;22505:4;:81::i;22447:146::-;22779:19;;;;22765:11;:33;22830:21;;;;-1:-1:-1;;;;;22804:23:13;;;;;;:13;:23;;;;;:47;23215:17;;;;23191:42;;22818:8;;23191:13;:42::i;:::-;23327:4;-1:-1:-1;;;;;23300:52:13;23309:8;-1:-1:-1;;;;;23300:52:13;-1:-1:-1;;;;;;;;;;;23334:4:13;:17;;;23300:52;;;;1452:25:504;;1440:2;1425:18;;1306:177;23300:52:13;;;;;;;;23380:17;;;;23399;;;;;23363:54;;;-1:-1:-1;;;;;11624:32:504;;11606:51;;11688:2;11673:18;;11666:34;;;;11716:18;;11709:34;23363:54:13;;11579:18:504;23363:54:13;;;;;;;23459:11;;23509:17;;;;23528;;;;23459:87;;-1:-1:-1;;;23459:87:13;;23492:4;23459:87;;;14613:34:504;-1:-1:-1;;;;;14683:15:504;;;14663:18;;;14656:43;14715:18;;;14708:34;;;;14758:18;;;14751:34;;;;23459:11:13;;;;;;:24;;14547:19:504;;23459:87:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23568:14:13;;-1:-1:-1;23560:23:13;;-1:-1:-1;;23560:23:13;;23553:30;19181:4407;-1:-1:-1;;;;;;19181:4407:13:o;13996:2971::-;14146:11;;:58;;-1:-1:-1;;;14146:58:13;;14069:7;;;;;;14146:11;;;-1:-1:-1;;;;;14146:11:13;;:23;;:58;;14178:4;;14185:6;;14193:10;;14146:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14128:76;-1:-1:-1;14214:12:13;;14210:133;;14244:88;14255:27;14284:38;14324:7;14244:10;:88::i;:::-;14334:1;14236:100;;;;;;;14210:133;14442:12;14420:18;;:34;14416:129;;14472:62;14477:22;14501:32;14472:4;:62::i;14416:129::-;14551:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14551:25:13;41519:4;-1:-1:-1;;;;;14611:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14583:25;;;:69;15550:32;15563:6;15571:10;15550:12;:32::i;:::-;15526:21;;;:56;;;15890:44;;;;;;;;15906:25;;;;15890:44;;15831:109;;15526:56;15831:22;:109::i;:::-;15812:15;;;15797:143;;;15798:12;;;15797:143;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;15970:18:13;;-1:-1:-1;15954:4:13;:12;;;:34;;;;;;;;:::i;:::-;;15946:79;;;;-1:-1:-1;;;15946:79:13;;14998:2:504;15946:79:13;;;14980:21:504;;;15017:18;;;15010:30;15076:34;15056:18;;;15049:62;15128:18;;15946:79:13;14796:356:504;15946:79:13;16057:1;16039:4;:15;;;:19;16031:58;;;;-1:-1:-1;;;16031:58:13;;15359:2:504;16031:58:13;;;15341:21:504;15398:2;15378:18;;;15371:30;15437:28;15417:18;;;15410:56;15483:18;;16031:58:13;15157:350:504;16031:58:13;16360:4;:15;;;16346:11;;:29;;;;:::i;:::-;16324:19;;;:51;16430:15;;;;-1:-1:-1;;;;;16406:21:13;;;;;;:13;:21;;;;;;:39;;16430:15;16406:39;:::i;:::-;16382:21;;;:63;;;16527:19;;;;16513:11;:33;-1:-1:-1;;;;;16552:21:13;;;;;;:13;:21;;;;;;;;;:45;;;;16675:21;;;;16698:15;;;;;16662:52;;11606:51:504;;;11673:18;;;11666:34;;;;11716:18;;;11709:34;;;;16662:52:13;;11579:18:504;16662:52:13;;;;;;;16749:6;-1:-1:-1;;;;;16725:48:13;16742:4;-1:-1:-1;;;;;16725:48:13;-1:-1:-1;;;;;;;;;;;16757:4:13;:15;;;16725:48;;;;1452:25:504;;1440:2;1425:18;;1306:177;16725:48:13;;;;;;;;16815:11;;16861:21;;;;16884:15;;;;16815:85;;-1:-1:-1;;;16815:85:13;;16846:4;16815:85;;;14613:34:504;-1:-1:-1;;;;;14683:15:504;;;14663:18;;;14656:43;14715:18;;;14708:34;;;;14758:18;;;14751:34;;;;16815:11:13;;;;;;:22;;14547:19:504;;16815:85:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:14:13;;-1:-1:-1;16915:23:13;;-1:-1:-1;;16915:23:13;;16940:4;:21;;;16907:55;;;;;;13996:2971;;;;;;:::o;8016:262:23:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;10740:25:504;;;10796:2;10781:18;;10774:34;;;;10824:18;;10817:34;;;10728:2;10713:18;8140:49:23;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1280:213:16:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:16;;-1:-1:-1;1480:1:16;1443:39;;4229:119:25;4291:7;450:4;4313:19;4318:1;4321;:10;;;4313:4;:19::i;:::-;:30;;;;:::i;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1567:263:16:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:16;-1:-1:-1;1730:30:16;;1710:116;1789:26;1817:1;1781:38;;;;;;;24486:2981:13;24635:11;;:64;;-1:-1:-1;;;24635:64:13;;24565:7;;;;24635:11;;;;-1:-1:-1;;;;;24635:11:13;;:25;;:64;;24669:4;;24676:8;;24686:12;;24635:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:82;-1:-1:-1;24709:12:13;;24705:130;;24738:90;24749:27;24778:40;24820:7;24738:10;:90::i;:::-;24731:97;;;;;24705:130;24934:12;24912:18;;:34;24908:126;;24963:64;24968:22;24992:34;24963:4;:64::i;24908:126::-;25111:17;25131;:15;:17::i;:::-;25111:37;;25171:12;25159:9;:24;25155:126;;;25200:74;25205:29;25236:37;25200:4;:74::i;:::-;25193:81;;;;;;25155:126;25287:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:27:13;41519:4;25555:50;;-1:-1:-1;;;25555:50:13;;-1:-1:-1;;;;;2925:32:504;;;25555:50:13;;;2907:51:504;25555:40:13;;;;;;;2880:18:504;;25555:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25533:19;;;:72;;;25653:42;;25682:12;25653:7;:42::i;:::-;25627:22;;;25612:83;;;25613:4;25612:83;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;25721:18:13;;-1:-1:-1;25705:12:13;;:34;;;;;;;;:::i;:::-;;25701:227;;25764:157;25786:16;25814:64;25898:4;:12;;;25890:21;;;;;;;;:::i;25764:157::-;25749:172;;;;;;;25701:227;25997:11;;26043:22;;;;;25997:69;;-1:-1:-1;;;25997:69:13;;26036:4;25997:69;;;9351:51:504;9418:18;;;9411:34;;;;25997:11:13;;;;-1:-1:-1;;;;;25997:11:13;;:30;;9324:18:504;;25997:69:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25987:79;-1:-1:-1;26076:12:13;;26072:130;;26105:90;26116:27;26145:40;26187:7;26105:10;:90::i;26072:130::-;26247:35;26255:12;;26269;26247:7;:35::i;:::-;26223:20;;;26208:74;;;26209:4;26208:74;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;26308:18:13;;-1:-1:-1;26292:12:13;;:34;;;;;;;;:::i;:::-;;26288:178;;26351:108;26362:16;26380:55;26445:4;:12;;;26437:21;;;;;;;;:::i;26288:178::-;26679:22;;;;;-1:-1:-1;;;;;26642:24:13;;;;;;:14;:24;;;;;;:59;;;26748:11;;26707:38;;;;:52;26780:20;;;;26765:12;:35;27136:37;26657:8;27160:12;27136:13;:37::i;:::-;27249:22;;;;;27273:20;;;;;27218:76;;-1:-1:-1;;;;;16342:32:504;;16324:51;;16406:2;16391:18;;16384:34;;;16434:18;;;16427:34;;;;16477:18;;16470:34;27218:76:13;;16311:3:504;16296:19;27218:76:13;;;;;;;27447:14;27432:30;24486:2981;-1:-1:-1;;;;;;24486:2981:13:o;33827:3389::-;34062:11;;:138;;-1:-1:-1;;;34062:138:13;;34112:4;34062:138;;;11159:34:504;-1:-1:-1;;;;;11229:15:504;;;11209:18;;;11202:43;11281:15;;;11261:18;;;11254:43;11333:15;;;11313:18;;;11306:43;11365:19;;;11358:35;;;33980:7:13;;;;;;34062:11;;;;;;;;:34;;11093:19:504;;34062:138:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:156;-1:-1:-1;34210:12:13;;34206:138;;34240:93;34251:27;34280:43;34325:7;34240:10;:93::i;:::-;34335:1;34232:105;;;;;;;34206:138;34443:12;34421:18;;:34;34417:134;;34473:67;34478:22;34502:37;34473:4;:67::i;34417:134::-;34694:12;34652:16;-1:-1:-1;;;;;34645:43:13;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;34641:172;;34724:78;34729:22;34753:48;34724:4;:78::i;34641:172::-;34875:10;-1:-1:-1;;;;;34863:22:13;:8;-1:-1:-1;;;;;34863:22:13;;34859:133;;;34903:78;34908:26;34936:44;34903:4;:78::i;34859:133::-;35036:16;35032:135;;35070:86;35075:36;35113:42;35070:4;:86::i;35032:135::-;-1:-1:-1;;35212:11:13;:32;35208:155;;;35262:90;35267:36;35305:46;35262:4;:90::i;35208:155::-;35406:24;35432:25;35461:51;35478:10;35490:8;35500:11;35461:16;:51::i;:::-;35405:107;;-1:-1:-1;35405:107:13;-1:-1:-1;35522:43:13;;35518:154;;35583:78;35594:16;35588:23;;;;;;;;:::i;:::-;35613:47;35583:4;:78::i;:::-;35663:1;35575:90;;;;;;;;;35518:154;35908:11;;:117;;-1:-1:-1;;;35908:117:13;;35859:24;;;;35908:11;;;;-1:-1:-1;;;;;35908:11:13;;:41;;:117;;35965:4;;35978:16;;36002:17;;35908:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35858:167;;-1:-1:-1;35858:167:13;-1:-1:-1;36039:43:13;;36031:107;;;;-1:-1:-1;;;36031:107:13;;16967:2:504;36031:107:13;;;16949:21:504;17006:2;16986:18;;;16979:30;17045:34;17025:18;;;17018:62;-1:-1:-1;;;17096:18:504;;;17089:49;17155:19;;36031:107:13;16765:415:504;36031:107:13;36221:45;;-1:-1:-1;;;36221:45:13;;-1:-1:-1;;;;;2925:32:504;;;36221:45:13;;;2907:51:504;36270:11:13;;36221:35;;;;;;2880:18:504;;36221:45:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;36213:97;;;;-1:-1:-1;;;36213:97:13;;17387:2:504;36213:97:13;;;17369:21:504;17426:2;17406:18;;;17399:30;17465:26;17445:18;;;17438:54;17509:18;;36213:97:13;17185:348:504;36213:97:13;36428:18;-1:-1:-1;;;;;36456:33:13;;36484:4;36456:33;36452:229;;;36512:63;36534:4;36541:10;36553:8;36563:11;36512:13;:63::i;:::-;36499:76;;36452:229;;;36609:65;;-1:-1:-1;;;36609:65:13;;-1:-1:-1;;;;;36609:30:13;;;;;:65;;36640:10;;36652:8;;36662:11;;36609:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36596:78;;36452:229;36776:37;;36768:56;;;;-1:-1:-1;;;36768:56:13;;17740:2:504;36768:56:13;;;17722:21:504;17779:1;17759:18;;;17752:29;-1:-1:-1;;;17797:18:504;;;17790:36;17843:18;;36768:56:13;17538:329:504;36768:56:13;36878:87;;;-1:-1:-1;;;;;18187:15:504;;;18169:34;;18239:15;;;18234:2;18219:18;;18212:43;18271:18;;;18264:34;;;18334:15;;18329:2;18314:18;;18307:43;18381:3;18366:19;;18359:35;;;36878:87:13;;;;;;;18118:3:504;36878:87:13;;;37176:14;37160:51;-1:-1:-1;37193:17:13;;-1:-1:-1;;;;;;33827:3389:13;;;;;;;;:::o;43409:679::-;43529:12;43550;43564:23;43591:6;-1:-1:-1;;;;;43591:11:13;43603:4;43591:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43549:59;;;;43620:7;43615:445;;43701:17;;:21;43697:357;;43925:10;43919:17;43975:15;43962:10;43958:2;43954:19;43947:44;43697:357;44032:12;44025:20;;-1:-1:-1;;;44025:20:13;;;;;;;;:::i;2379:288:24:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:24;-1:-1:-1;2560:18:24;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:24;-1:-1:-1;2601:1:24;;-1:-1:-1;2588:15:24;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;18422:139:13:-;18487:11;18525:1;18513:8;:1;18517:4;18513:8;:::i;:::-;18512:14;;;;:::i;:::-;18506:20;-1:-1:-1;18536:5:13;18540:1;18536;:5;:::i;:::-;:10;18532:24;;18548:8;18555:1;18548:8;;:::i;3834:312:24:-;3925:9;3936:7;3952:13;3967:19;3990:31;4005:6;4013:7;3990:14;:31::i;4796:123:25:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:25;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:25:o;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:24:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:24;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:24;-1:-1:-1;2136:18:24;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:24;;;;;;;;;-1:-1:-1;2178:20:24;;2172:4;;-1:-1:-1;2178:20:24;-1:-1:-1;2164:35:24;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:24;;-1:-1:-1;1947:332:24;-1:-1:-1;;;;1947:332:24:o;3151:585::-;3234:9;3245:10;-1:-1:-1;;;;;;;;;;;;;;3245:10:24;3534:14;3550:17;3571:25;450:4:25;3589:6:24;3571:7;:25::i;:::-;3533:63;;-1:-1:-1;3533:63:24;-1:-1:-1;3614:18:24;3606:4;:26;;;;;;;;:::i;:::-;;3602:82;;-1:-1:-1;3656:20:24;;;;;;;;;-1:-1:-1;3656:20:24;;3650:4;;-1:-1:-1;3656:20:24;-1:-1:-1;3642:35:24;;3602:82;3696:35;3703:9;3714:7;:16;;;3696:6;:35::i;4923:243:25:-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:25;;5045:16;5041:45;;;-1:-1:-1;5078:1:25;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:25;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:25;;;;;;;;:::i;544:330:16:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:16;;-1:-1:-1;660:18:16;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:16;-1:-1:-1;833:30:16;;799:479:24;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:24;896:14;912:23;939:22;947:3;450:4:25;939:7:24;:22::i;:::-;895:66;;-1:-1:-1;895:66:24;-1:-1:-1;979:18:24;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:24;;;;;;;;;-1:-1:-1;1021:20:24;;1015:4;;-1:-1:-1;1021:20:24;-1:-1:-1;1007:35:24;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:24;-1:-1:-1;1141:18:24;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:24;;-1:-1:-1;799:479:24;-1:-1:-1;;;;;;799:479:24:o;958:198:16:-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:16;;-1:-1:-1;1102:1:16;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;14:131:504:-;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:504:o;470:258::-;542:1;552:113;566:6;563:1;560:13;552:113;;;642:11;;;636:18;623:11;;;616:39;588:2;581:10;552:113;;;683:6;680:1;677:13;674:48;;;-1:-1:-1;;718:1:504;700:16;;693:27;470:258::o;733:383::-;882:2;871:9;864:21;845:4;914:6;908:13;957:6;952:2;941:9;937:18;930:34;973:66;1032:6;1027:2;1016:9;1012:18;1007:2;999:6;995:15;973:66;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:504;1060:45;;;;1107:2;1056:54;;733:383;-1:-1:-1;;733:383:504:o;1121:180::-;1180:6;1233:2;1221:9;1212:7;1208:23;1204:32;1201:52;;;1249:1;1246;1239:12;1201:52;-1:-1:-1;1272:23:504;;1121:180;-1:-1:-1;1121:180:504:o;1677:127::-;1738:10;1733:3;1729:20;1726:1;1719:31;1769:4;1766:1;1759:15;1793:4;1790:1;1783:15;1809:921;1877:6;1930:2;1918:9;1909:7;1905:23;1901:32;1898:52;;;1946:1;1943;1936:12;1898:52;1986:9;1973:23;2015:18;2056:2;2048:6;2045:14;2042:34;;;2072:1;2069;2062:12;2042:34;2110:6;2099:9;2095:22;2085:32;;2155:7;2148:4;2144:2;2140:13;2136:27;2126:55;;2177:1;2174;2167:12;2126:55;2213:2;2200:16;2235:2;2231;2228:10;2225:36;;;2241:18;;:::i;:::-;2316:2;2310:9;2284:2;2370:13;;-1:-1:-1;;2366:22:504;;;2390:2;2362:31;2358:40;2346:53;;;2414:18;;;2434:22;;;2411:46;2408:72;;;2460:18;;:::i;:::-;2500:10;2496:2;2489:22;2535:2;2527:6;2520:18;2575:7;2570:2;2565;2561;2557:11;2553:20;2550:33;2547:53;;;2596:1;2593;2586:12;2547:53;2652:2;2647;2643;2639:11;2634:2;2626:6;2622:15;2609:46;2697:1;2675:15;;;2692:2;2671:24;2664:35;;;;-1:-1:-1;2679:6:504;1809:921;-1:-1:-1;;;;;1809:921:504:o;3177:657::-;3346:2;3398:21;;;3468:13;;3371:18;;;3490:22;;;3317:4;;3346:2;3569:15;;;;3543:2;3528:18;;;3317:4;3612:196;3626:6;3623:1;3620:13;3612:196;;;3691:13;;-1:-1:-1;;;;;;3687:40:504;3675:53;;3783:15;;;;3748:12;;;;3648:1;3641:9;3612:196;;;-1:-1:-1;3825:3:504;;3177:657;-1:-1:-1;;;;;;3177:657:504:o;3839:456::-;3916:6;3924;3932;3985:2;3973:9;3964:7;3960:23;3956:32;3953:52;;;4001:1;3998;3991:12;3953:52;4040:9;4027:23;4059:31;4084:5;4059:31;:::i;:::-;4109:5;-1:-1:-1;4166:2:504;4151:18;;4138:32;4179:33;4138:32;4179:33;:::i;:::-;3839:456;;4231:7;;-1:-1:-1;;;4285:2:504;4270:18;;;;4257:32;;3839:456::o;4759:::-;4836:6;4844;4852;4905:2;4893:9;4884:7;4880:23;4876:32;4873:52;;;4921:1;4918;4911:12;4873:52;4960:9;4947:23;4979:31;5004:5;4979:31;:::i;:::-;5029:5;-1:-1:-1;5081:2:504;5066:18;;5053:32;;-1:-1:-1;5137:2:504;5122:18;;5109:32;5150:33;5109:32;5150:33;:::i;:::-;5202:7;5192:17;;;4759:456;;;;;:::o;5553:380::-;5632:1;5628:12;;;;5675;;;5696:61;;5750:4;5742:6;5738:17;5728:27;;5696:61;5803:2;5795:6;5792:14;5772:18;5769:38;5766:161;;;5849:10;5844:3;5840:20;5837:1;5830:31;5884:4;5881:1;5874:15;5912:4;5909:1;5902:15;5938:481;-1:-1:-1;;;;;6223:15:504;;;6205:34;;6275:15;;;6270:2;6255:18;;6248:43;6327:15;;6322:2;6307:18;;6300:43;-1:-1:-1;;;;;;6379:33:504;;;6374:2;6359:18;;6352:61;6154:3;6139:19;;5938:481::o;6424:277::-;6491:6;6544:2;6532:9;6523:7;6519:23;6515:32;6512:52;;;6560:1;6557;6550:12;6512:52;6592:9;6586:16;6645:5;6638:13;6631:21;6624:5;6621:32;6611:60;;6667:1;6664;6657:12;6706:338;6908:2;6890:21;;;6947:2;6927:18;;;6920:30;-1:-1:-1;;;6981:2:504;6966:18;;6959:44;7035:2;7020:18;;6706:338::o;7393:127::-;7454:10;7449:3;7445:20;7442:1;7435:31;7485:4;7482:1;7475:15;7509:4;7506:1;7499:15;7525:128;7565:3;7596:1;7592:6;7589:1;7586:13;7583:39;;;7602:18;;:::i;:::-;-1:-1:-1;7638:9:504;;7525:128::o;7658:127::-;7719:10;7714:3;7710:20;7707:1;7700:31;7750:4;7747:1;7740:15;7774:4;7771:1;7764:15;7790:135;7829:3;-1:-1:-1;;7850:17:504;;7847:43;;;7870:18;;:::i;:::-;-1:-1:-1;7917:1:504;7906:13;;7790:135::o;7930:178::-;7967:3;8011:4;8004:5;8000:16;8035:7;8025:41;;8046:18;;:::i;:::-;-1:-1:-1;;8082:20:504;;7930:178;-1:-1:-1;;7930:178:504:o;8470:184::-;8540:6;8593:2;8581:9;8572:7;8568:23;8564:32;8561:52;;;8609:1;8606;8599:12;8561:52;-1:-1:-1;8632:16:504;;8470:184;-1:-1:-1;8470:184:504:o;8659:125::-;8699:4;8727:1;8724;8721:8;8718:34;;;8732:18;;:::i;:::-;-1:-1:-1;8769:9:504;;8659:125::o;8789:251::-;8859:6;8912:2;8900:9;8891:7;8887:23;8883:32;8880:52;;;8928:1;8925;8918:12;8880:52;8960:9;8954:16;8979:31;9004:5;8979:31;:::i;9045:127::-;9106:10;9101:3;9097:20;9094:1;9087:31;9137:4;9134:1;9127:15;9161:4;9158:1;9151:15;9456:375;-1:-1:-1;;;;;9714:15:504;;;9696:34;;9766:15;;;;9761:2;9746:18;;9739:43;9813:2;9798:18;;9791:34;;;;9646:2;9631:18;;9456:375::o;15836:127::-;15897:10;15892:3;15888:20;15885:1;15878:31;15928:4;15925:1;15918:15;15952:4;15949:1;15942:15;15968:120;16008:1;16034;16024:35;;16039:18;;:::i;:::-;-1:-1:-1;16073:9:504;;15968:120::o;16515:245::-;16594:6;16602;16655:2;16643:9;16634:7;16630:23;16626:32;16623:52;;;16671:1;16668;16661:12;16623:52;-1:-1:-1;;16694:16:504;;16750:2;16735:18;;;16729:25;16694:16;;16729:25;;-1:-1:-1;16515:245:504:o;18405:274::-;18534:3;18572:6;18566:13;18588:53;18634:6;18629:3;18622:4;18614:6;18610:17;18588:53;:::i;:::-;18657:16;;;;;18405:274;-1:-1:-1;;18405:274:504:o;18684:168::-;18724:7;18790:1;18786;18782:6;18778:14;18775:1;18772:21;18767:1;18760:9;18753:17;18749:45;18746:71;;;18797:18;;:::i;:::-;-1:-1:-1;18837:9:504;;18684:168::o;18857:112::-;18889:1;18915;18905:35;;18920:18;;:::i;:::-;-1:-1:-1;18954:9:504;;18857:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_becomeImplementation(bytes)": "56e67728", + "_getExtensionFunctions()": "89f8132e", + "_withdrawAdminFees(uint256)": "a7b820df", + "_withdrawIonicFees(uint256)": "b0d58e49", + "accrualBlockNumber()": "6c540baf", + "adminFeeMantissa()": "8d02d9a1", + "borrow(uint256)": "c5ebeaec", + "borrowIndex()": "aa5af0fd", + "comptroller()": "5fe3b567", + "contractType()": "cb2ef6f7", + "decimals()": "313ce567", + "delegateType()": "2c436e5b", + "feeSeizeShareMantissa()": "be99f119", + "getCash()": "3b1d21a2", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "liquidateBorrow(address,uint256,address)": "f5e3c462", + "mint(uint256)": "a0712d68", + "name()": "06fdde03", + "protocolSeizeShareMantissa()": "6752e702", + "redeem(uint256)": "db006a75", + "redeemUnderlying(uint256)": "852a12e3", + "repayBorrow(uint256)": "0e752702", + "repayBorrowBehalf(address,uint256)": "2608f818", + "reserveFactorMantissa()": "173b9904", + "seize(address,address,uint256)": "b2a02ff1", + "selfTransferIn(address,uint256)": "135f1334", + "selfTransferOut(address,uint256)": "067db1b3", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/CErc20PluginDelegate.json b/packages/sdk/deployments/bob/CErc20PluginDelegate.json new file mode 100644 index 000000000..ea58ef121 --- /dev/null +++ b/packages/sdk/deployments/bob/CErc20PluginDelegate.json @@ -0,0 +1,2607 @@ +{ + "address": "0x8b2B6a9dC8Cd73309Cef8d64920831d4C73F43a7", + "abi": [ + { + "type": "function", + "name": "_becomeImplementation", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "functionSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "_updatePlugin", + "inputs": [ + { + "name": "_plugin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_withdrawAdminFees", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_withdrawIonicFees", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "accrualBlockNumber", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "adminFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrow", + "inputs": [ + { + "name": "borrowAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "borrowIndex", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "comptroller", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "contractType", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "delegateType", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "feeSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCash", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "interestRateModel", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract InterestRateModel" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address payable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidateBorrow", + "inputs": [ + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mint", + "inputs": [ + { + "name": "mintAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "plugin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC4626" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "protocolSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redeem", + "inputs": [ + { + "name": "redeemTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redeemUnderlying", + "inputs": [ + { + "name": "redeemAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrow", + "inputs": [ + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrowBehalf", + "inputs": [ + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reserveFactorMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "seize", + "inputs": [ + { + "name": "liquidator", + "type": "address", + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "selfTransferIn", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "selfTransferOut", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalAdminFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBorrows", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalIonicFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalReserves", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "underlying", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "AccrueInterest", + "inputs": [ + { + "name": "cashPrior", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "interestAccumulated", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "borrowIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Borrow", + "inputs": [ + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrowAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "accountBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Failure", + "inputs": [ + { + "name": "error", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "info", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "detail", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LiquidateBorrow", + "inputs": [ + { + "name": "liquidator", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cTokenCollateral", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Mint", + "inputs": [ + { + "name": "minter", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "mintAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "mintTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAdminFee", + "inputs": [ + { + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewIonicFee", + "inputs": [ + { + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewMarketInterestRateModel", + "inputs": [ + { + "name": "oldInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + }, + { + "name": "newInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPluginImplementation", + "inputs": [ + { + "name": "oldImpl", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newImpl", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewReserveFactor", + "inputs": [ + { + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Redeem", + "inputs": [ + { + "name": "redeemer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "redeemAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "redeemTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RepayBorrow", + "inputs": [ + { + "name": "payer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "accountBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservesAdded", + "inputs": [ + { + "name": "benefactor", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "addAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newTotalReserves", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservesReduced", + "inputs": [ + { + "name": "admin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "reduceAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newTotalReserves", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x708698b627ff96d49d389bcadc64bf83f8818e39dfd4afb6b87747045b370e96", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8b2B6a9dC8Cd73309Cef8d64920831d4C73F43a7", + "transactionIndex": 1, + "gasUsed": "4053591", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x84ec2d3e1de3d41c19df8fbca1b7a91510375269e4809edecd35ce8851108cef", + "transactionHash": "0x708698b627ff96d49d389bcadc64bf83f8818e39dfd4afb6b87747045b370e96", + "logs": [], + "blockNumber": 3777798, + "cumulativeGasUsed": "4097430", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Borrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "LiquidateBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImpl", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newImpl", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPluginImplementation", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "redeemer", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Redeem", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "RepayBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "benefactor", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesReduced", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_plugin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_updatePlugin" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "plugin", + "outputs": [ + { + "internalType": "contract IERC4626", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferOut" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_becomeImplementation(bytes)": { + "params": { + "data": "The encoded arguments for becoming" + } + }, + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_updatePlugin(address)": { + "params": { + "_plugin": "The address of the plugin implementation to use" + } + }, + "_withdrawAdminFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_withdrawIonicFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrow(uint256)": { + "params": { + "borrowAmount": "The amount of the underlying asset to borrow" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "getCash()": { + "returns": { + "_0": "The quantity of underlying asset owned by this contract" + } + }, + "liquidateBorrow(address,uint256,address)": { + "params": { + "borrower": "The borrower of this cToken to be liquidated", + "cTokenCollateral": "The market in which to seize collateral from the borrower", + "repayAmount": "The amount of the underlying borrowed asset to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "mint(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "mintAmount": "The amount of the underlying asset to supply" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeem(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemTokens": "The number of cTokens to redeem into underlying" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeemUnderlying(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemAmount": "The amount of underlying to redeem" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrow(uint256)": { + "params": { + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrowBehalf(address,uint256)": { + "params": { + "borrower": "the account with the debt being payed off", + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "seize(address,address,uint256)": { + "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.", + "params": { + "borrower": "The account having collateral seized", + "liquidator": "The account receiving seized collateral", + "seizeTokens": "The number of cTokens to seize" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_becomeImplementation(bytes)": { + "notice": "Delegate interface to become the implementation" + }, + "_updatePlugin(address)": { + "notice": "Update the plugin implementation to a whitelisted implementation" + }, + "_withdrawAdminFees(uint256)": { + "notice": "Accrues interest and reduces admin fees by transferring to admin" + }, + "_withdrawIonicFees(uint256)": { + "notice": "Accrues interest and reduces Ionic fees by transferring to Ionic" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "borrow(uint256)": { + "notice": "Sender borrows assets from the protocol to their own address" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "getCash()": { + "notice": "Get cash balance of this cToken in the underlying asset" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "liquidateBorrow(address,uint256,address)": { + "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator." + }, + "mint(uint256)": { + "notice": "Sender supplies assets into the market and receives cTokens in exchange" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "plugin()": { + "notice": "Plugin address" + }, + "redeem(uint256)": { + "notice": "Sender redeems cTokens in exchange for the underlying asset" + }, + "redeemUnderlying(uint256)": { + "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset" + }, + "repayBorrow(uint256)": { + "notice": "Sender repays their own borrow" + }, + "repayBorrowBehalf(address,uint256)": { + "notice": "Sender repays a borrow belonging to borrower" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "seize(address,address,uint256)": { + "notice": "Transfers collateral tokens (this market) to the liquidator." + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CErc20PluginDelegate.sol": "CErc20PluginDelegate" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20PluginDelegate.sol": { + "keccak256": "0x095cc54097ac06a9b6232222c5197df72c4cc4a0f2c69261bf22ebba2dfead3f", + "urls": [ + "bzz-raw://5641c9c2222825360f0dedcd0706028c062ee42540e55f1088fb10b408d4ed9a", + "dweb:/ipfs/QmW1VLeKMfHNNvcst9uz5PD7QcJizVQ8iRApUE1NJDQ9e3" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IERC4626.sol": { + "keccak256": "0x1dc7b6dc2f1202ca16bff4eb488bb5bfcd6a48202996663a7220a888b261d7cb", + "urls": [ + "bzz-raw://35f5dfa93bcb6e10c2b83a15fd376fcd57baba83d1a09e4ba300859b8cbda1be", + "dweb:/ipfs/QmbnBkjAsEn97WyATWGF8ftifX55S4efA9RYyiuFZ4juhP" + ], + "license": null + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5061485b806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806389f8132e11610130578063b2a02ff1116100b8578063cb2ef6f71161007c578063cb2ef6f71461045d578063db006a751461048d578063ef01df4f146104a0578063f3fdb15a146104b3578063f5e3c462146104c657600080fd5b8063b2a02ff11461040c578063be99f1191461041f578063c3bf11cd1461042e578063c5ebeaec14610437578063c91a424f1461044a57600080fd5b80639826394b116100ff5780639826394b146103c1578063a0712d68146103ca578063a7b820df146103dd578063aa5af0fd146103f0578063b0d58e49146103f957600080fd5b806389f8132e146103925780638d02d9a1146103a75780638f840ddd146103b057806395d89b41146103b957600080fd5b8063313ce567116101be57806361feacff1161018257806361feacff1461034c5780636752e702146103555780636c540baf146103635780636f307dc31461036c578063852a12e31461037f57600080fd5b8063313ce567146102eb5780633b1d21a2146102f857806347bd37181461030057806356e67728146103095780635fe3b5671461031c57600080fd5b8063173b990411610205578063173b99041461029e57806318160ddd146102a757806319f496c8146102b05780632608f818146102c35780632c436e5b146102d657600080fd5b8063067db1b31461023757806306fdde031461024c5780630e7527021461026a578063135f13341461028b575b600080fd5b61024a6102453660046143a9565b6104d9565b005b610254610523565b60405161026191906143d5565b60405180910390f35b61027d61027836600461442a565b6105b1565b604051908152602001610261565b61027d6102993660046143a9565b61066e565b61027d60085481565b61027d600f5481565b61024a6102be366004614443565b6106ba565b61027d6102d13660046143a9565b610a18565b60025b60405160ff9091168152602001610261565b6003546102d99060ff1681565b61027d610ad7565b61027d600b5481565b61024a610317366004614476565b610ae6565b6003546103349061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610261565b61027d600d5481565b61027d666379da05b6000081565b61027d60095481565b601354610334906001600160a01b031681565b61027d61038d36600461442a565b610c44565b61039a610cf7565b6040516102619190614527565b61027d60065481565b61027d600c5481565b610254610eb1565b61027d600e5481565b61027d6103d836600461442a565b610ebe565b61027d6103eb36600461442a565b610f73565b61027d600a5481565b61027d61040736600461442a565b6110d1565b61027d61041a366004614575565b6111c4565b61027d67016345785d8a000081565b61027d60075481565b61027d61044536600461442a565b6111e8565b600054610334906001600160a01b031681565b604080518082019091526014815273434572633230506c7567696e44656c656761746560601b6020820152610254565b61027d61049b36600461442a565b61129b565b601454610334906001600160a01b031681565b600454610334906001600160a01b031681565b61027d6104d43660046145b6565b61134e565b3330146105155760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b61051f8282611411565b5050565b60018054610530906145f8565b80601f016020809104026020016040519081016040528092919081815260200182805461055c906145f8565b80156105a95780601f1061057e576101008083540402835291602001916105a9565b820191906000526020600020905b81548152906001019060200180831161058c57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105fe9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa15801561061b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063f9190614660565b61065b5760405162461bcd60e51b815260040161050c90614682565b600061066683611493565b509392505050565b60003330146106a75760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b604482015260640161050c565b6106b18383611524565b90505b92915050565b333014806106cb57506106cb6115da565b61072b5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f7560448201526a383230ba32a8363ab3b4b760a91b606482015260840161050c565b6014546000906001600160a01b03166107445781610751565b6014546001600160a01b03165b6014549091506001600160a01b0316158015906107d857506014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d591906146aa565b15155b156108c2576014546040516370a0823160e01b81523060048201526001600160a01b039091169063ba0876529082906370a0823190602401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085191906146aa565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906146aa565b505b601480546001600160a01b0319166001600160a01b0384811691821790925560135460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801561092d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109519190614660565b506013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf91906146aa565b905080156109d0576109d081611757565b604080516001600160a01b038085168252851660208201527fb32957d2794aaec3ea2c8852833af2192fe9fb518777de1f883e9e821781da75910160405180910390a1505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610a659261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190614660565b610ac25760405162461bcd60e51b815260040161050c90614682565b6000610ace84846117cc565b50949350505050565b6000610ae161185f565b905090565b33301480610af75750610af76115da565b610b5f5760405162461bcd60e51b815260206004820152603360248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f6260448201527232b1b7b6b2a4b6b83632b6b2b73a30ba34b7b760691b606482015260840161050c565b600081806020019051810190610b7591906146c3565b90506001600160a01b038116158015610b9857506014546001600160a01b031615155b15610c10576000546014546040516381218ea960e01b81526001600160a01b0391821660048201529116906381218ea990602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d91906146c3565b90505b6001600160a01b03811615801590610c3657506014546001600160a01b03828116911614155b1561051f5761051f816106ba565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610c919261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190614660565b610cee5760405162461bcd60e51b815260040161050c90614682565b6106b482611933565b606060026000610d056119b0565b90508160ff168151610d1791906146f6565b67ffffffffffffffff811115610d2f57610d2f614460565b604051908082528060200260200182016040528015610d58578160200160208202803683370190505b50925060005b8151811015610dbe57818181518110610d7957610d7961470e565b6020026020010151848281518110610d9357610d9361470e565b6001600160e01b03199092166020928302919091019091015280610db681614724565b915050610d5e565b50805163ef01df4f60e01b908490610dd58561473f565b9450610de49060ff86166146f6565b81518110610df457610df461470e565b6001600160e01b031990921660209283029190910190910152805163033e92d960e31b908490610e238561473f565b9450610e329060ff86166146f6565b81518110610e4257610e4261470e565b6001600160e01b03199092166020928302919091019091015260ff821615610eac5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161050c565b505090565b60028054610530906145f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f0b9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190614660565b610f685760405162461bcd60e51b815260040161050c90614682565b600061066683611b2a565b600080610f7f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe391906146aa565b50436009541461100057610ff9600a6039611c6b565b91506110c2565b8261100961185f565b101561101b57610ff9600e6038611c6b565b600d5483111561103157610ff96002603a611c6b565b82600d5461103f919061475c565b600d55600354604080516303e1469160e61b815290516110bc9261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b691906146c3565b84611411565b60005b91505b6110cb81611ce4565b50919050565b6000806110dd81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561111d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114191906146aa565b50436009541461115757610ff9600a6035611c6b565b8261116061185f565b101561117257610ff9600e6034611c6b565b600e5483111561118857610ff960026036611c6b565b600083600e54611198919061475c565b600e8190556000549091506111b6906001600160a01b031685611411565b60009250506110cb81611ce4565b600060016111d181611ba7565b6111dd33868686611d68565b915061066681611ce4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926112359261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015611252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112769190614660565b6112925760405162461bcd60e51b815260040161050c90614682565b6106b482612253565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926112e89261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113299190614660565b6113455760405162461bcd60e51b815260040161050c90614682565b6106b4826122ce565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261139b9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa1580156113b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dc9190614660565b6113f85760405162461bcd60e51b815260040161050c90614682565b600061140585858561234b565b509150505b9392505050565b601454604051632d182be560e21b8152600481018390526001600160a01b0384811660248301523060448301529091169063b460af94906064016020604051808303816000875af115801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e91906146aa565b505050565b60008060006114a181611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150591906146aa565b50611511333386612445565b9250925061151e81611ce4565b50915091565b6013546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061155990869030908790600401614789565b6020604051808303816000875af1158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190614660565b6115d15760405162461bcd60e51b815260040161050c906020808252600490820152631cd95b9960e21b604082015260600190565b6110cb82611757565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165791906146c3565b6001600160a01b0316336001600160a01b03161480156116d45750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190614660565b8061175157506000546001600160a01b0316331480156117515750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117519190614660565b91505090565b601454604051636e553f6560e01b8152600481018390523060248201526001600160a01b0390911690636e553f65906044016020604051808303816000875af11580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f91906146aa565b60008060006117da81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e91906146aa565b5061184a338686612445565b9250925061185781611ce4565b509250929050565b6014546040516370a0823160e01b81523060048201526000916001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d491906146aa565b6040518263ffffffff1660e01b81526004016118f291815260200190565b602060405180830381865afa15801561190f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae191906146aa565b60008061193f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561197f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a391906146aa565b506110bf33600085612854565b6060600360006119be612e9c565b90508160ff1681516119d091906146f6565b67ffffffffffffffff8111156119e8576119e8614460565b604051908082528060200260200182016040528015611a11578160200160208202803683370190505b50925060005b8151811015611a7757818181518110611a3257611a3261470e565b6020026020010151848281518110611a4c57611a4c61470e565b6001600160e01b03199092166020928302919091019091015280611a6f81614724565b915050611a17565b50805163cb2ef6f760e01b908490611a8e8561473f565b9450611a9d9060ff86166146f6565b81518110611aad57611aad61470e565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b908490611adc8561473f565b9450611aeb9060ff86166146f6565b81518110611afb57611afb61470e565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610e238561473f565b6000806000611b3881611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c91906146aa565b506115113385613264565b600054600160a01b900460ff16611bed5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015260640161050c565b80611c5b57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c4257600080fd5b505af1158015611c56573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611ca057611ca0614773565b836061811115611cb257611cb2614773565b60408051928352602083019190915260009082015260600160405180910390a18260118111156106b1576106b1614773565b6000805460ff60a01b1916600160a01b17905580611d6557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050505b50565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0091906146aa565b90508015611e1d57611e156003601d8361366f565b91505061224b565b846001600160a01b0316846001600160a01b03161415611e4357611e156006601e611c6b565b611ea8604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611ecb9085613711565b6020830181905282826003811115611ee557611ee5614773565b6003811115611ef657611ef6614773565b9052506000905081516003811115611f1057611f10614773565b14611f4057611f376009601c83600001516003811115611f3257611f32614773565b61366f565b9250505061224b565b611f5f846040518060200160405280666379da05b6000081525061373c565b6080820152604080516020810190915267016345785d8a00008152611f8590859061373c565b61014082018190526080820151611f9c908661475c565b611fa6919061475c565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200d91906146aa565b60c082019081526040805160208101909152905181526080820151612032919061375f565b60a0820152604080516020810190915260c08201518152610140820151612059919061375f565b61016082015260a0810151600c5461207191906146f6565b60e08201526101408101516080820151600f5461208e919061475c565b612098919061475c565b610120820152610160810151600e546120b191906146f6565b6101008201526001600160a01b03861660009081526010602052604090205460608201516120df9190613777565b60408301819052828260038111156120f9576120f9614773565b600381111561210a5761210a614773565b905250600090508151600381111561212457612124614773565b1461214657611f376009601b83600001516003811115611f3257611f32614773565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b168082529084902092909255606085015192519283529092909160008051602061482f833981519152910160405180910390a3306001600160a01b0316856001600160a01b031660008051602061482f83398151915283608001516040516121f391815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061225f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561229f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c391906146aa565b506110bf338461379d565b6000806122da81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e91906146aa565b506110bf33846000612854565b600080600061235981611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bd91906146aa565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156123fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242291906146aa565b5061242f33878787613b38565b9250925061243c81611ce4565b50935093915050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af11580156124b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d791906146aa565b905080156124f8576124ec600360438361366f565b6000925092505061284c565b436009541461250d576124ec600a6044611c6b565b6125566040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156125c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e491906146aa565b6080820152600019851415612602576080810151604082015261260a565b604081018590525b612618878260400151611524565b60e08201819052608082015161262d91613711565b60a083018190526020830182600381111561264a5761264a614773565b600381111561265b5761265b614773565b905250600090508160200151600381111561267857612678614773565b146126eb5760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c4544000000000000606482015260840161050c565b6126fb600b548260e00151613711565b60c083018190526020830182600381111561271857612718614773565b600381111561272957612729614773565b905250600090508160200151600381111561274657612746614773565b146127ad5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b606482015260840161050c565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b6000821580612861575081155b6128ad5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e740000000000000000604482015260640161050c565b6128ee6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295091906146aa565b60408201528315612a135761138884600f5461296c919061475c565b101561297857600f5493505b60608101849052604080516020810182529082015181526129999085613ff5565b60808301819052602083018260038111156129b6576129b6614773565b60038111156129c7576129c7614773565b90525060009050816020015160038111156129e4576129e4614773565b14612a0e57612a066009602c83602001516003811115611f3257611f32614773565b91505061140a565b612b5b565b600019831415612aa157600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e91906146aa565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0591906146aa565b90506103e8612b14858361475c565b1015612b1e578093505b612b2c848360400151614047565b60608301819052600f546103e891612b439161475c565b1015612b5257600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612b999130918b9190600401614789565b6020604051808303816000875af1158015612bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdc91906146aa565b90508015612bfa57612bf16003602b8361366f565b9250505061140a565b4360095414612c0f57612bf1600a602f611c6b565b612c1f600f548360600151613711565b60a0840181905260208401826003811115612c3c57612c3c614773565b6003811115612c4d57612c4d614773565b9052506000905082602001516003811115612c6a57612c6a614773565b14612c8c57612bf16009603184602001516003811115611f3257611f32614773565b6001600160a01b0386166000908152601060205260409020546060830151612cb49190613711565b60c0840181905260208401826003811115612cd157612cd1614773565b6003811115612ce257612ce2614773565b9052506000905082602001516003811115612cff57612cff614773565b14612d2157612bf16009603084602001516003811115611f3257611f32614773565b8160800151612d2e61185f565b1015612d4057612bf1600e6032611c6b565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612d76908790611411565b306001600160a01b0316866001600160a01b031660008051602061482f8339815191528460600151604051612dad91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5060009250612e92915050565b9695505050505050565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81612ed88461473f565b93508360ff1681518110612eee57612eee61470e565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81612f198461473f565b93508360ff1681518110612f2f57612f2f61470e565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81612f5a8461473f565b93508360ff1681518110612f7057612f7061470e565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b81612f9b8461473f565b93508360ff1681518110612fb157612fb161470e565b6001600160e01b03199092166020928302919091019091015263073a938160e11b81612fdc8461473f565b93508360ff1681518110612ff257612ff261470e565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b8161301d8461473f565b93508360ff16815181106130335761303361470e565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b8161305e8461473f565b93508360ff16815181106130745761307461470e565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b8161309f8461473f565b93508360ff16815181106130b5576130b561470e565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b816130e08461473f565b93508360ff16815181106130f6576130f661470e565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816131218461473f565b93508360ff16815181106131375761313761470e565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816131628461473f565b93508360ff16815181106131785761317861470e565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816131a38461473f565b93508360ff16815181106131b9576131b961470e565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b816131e48461473f565b93508360ff16815181106131fa576131fa61470e565b6001600160e01b03199092166020928302919091019091015260ff8216156106b45760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161050c565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e1906132a290309089908990600401614789565b6020604051808303816000875af11580156132c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e591906146aa565b90508015613306576132fa600360218361366f565b60009250925050613668565b436009541461331b576132fa600a6024611c6b565b61335c6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133be91906146aa565b60408201526133cd8686611524565b60c08201819052604080516020810182529083015181526133ee9190614082565b606083018190526020830182600381111561340b5761340b614773565b600381111561341c5761341c614773565b905250600090508160200151600381111561343957613439614773565b146134865760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c4544604482015260640161050c565b60008160600151116134da5760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a4543544544000000000000604482015260640161050c565b8060600151600f546134ec91906146f6565b608082015260608101516001600160a01b03871660009081526010602052604090205461351991906146f6565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b031660008051602061482f83398151915283606001516040516135c891815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561363b57600080fd5b505af115801561364f573d6000803e3d6000fd5b506000925061365c915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08460118111156136a4576136a4614773565b8460618111156136b6576136b6614773565b604080519283526020830191909152810184905260600160405180910390a160038460118111156136e9576136e9614773565b146137055783601181111561370057613700614773565b61224b565b61224b826103e86146f6565b600080838311613730576000613727848661475c565b91509150613668565b50600390506000613668565b6000670de0b6b3a7640000613755848460000151614092565b6106b191906147c3565b60008061376c84846140d4565b905061224b81614105565b60008083830184811061378f57600092509050613668565b600260009250925050613668565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c906137da90309088908890600401614789565b6020604051808303816000875af11580156137f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381d91906146aa565b9050801561383a57613832600360108361366f565b9150506106b4565b436009541461384f57613832600a600c611c6b565b600061385961185f565b9050838110156138785761386f600e600b611c6b565b925050506106b4565b6138a4604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391191906146aa565b602082018190526139229086613777565b604083018190528282600381111561393c5761393c614773565b600381111561394d5761394d614773565b905250600090508151600381111561396757613967614773565b14613993576139896009600e83600001516003811115611f3257611f32614773565b93505050506106b4565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156139ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1091906146aa565b92508215613a2557613989600360108561366f565b613a31600b5486613777565b6060830181905282826003811115613a4b57613a4b614773565b6003811115613a5c57613a5c614773565b9052506000905081516003811115613a7657613a76614773565b14613a98576139896009600d83600001516003811115611f3257611f32614773565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b55613ad48686611411565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd291906146aa565b90508015613bf357613be7600360148361366f565b60009250925050613fec565b4360095414613c0857613be7600a6018611c6b565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6b91906146aa565b14613c7c57613be7600a6013611c6b565b866001600160a01b0316866001600160a01b03161415613ca257613be760066019611c6b565b84613cb357613be760076017611c6b565b600019851415613cc957613be760076016611c6b565b600080613cd7898989612445565b90925090508115613d0c57613cfe826011811115613cf757613cf7614773565b601a611c6b565b600094509450505050613fec565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b90613d499030908c908890600401614789565b6040805180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8991906147d7565b90925090508115613df85760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161050c565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6591906146aa565b1015613eb35760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161050c565b60006001600160a01b038916301415613ed957613ed2308d8d85611d68565b9050613f4f565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613f09908f908f908790600401614789565b6020604051808303816000875af1158015613f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4c91906146aa565b90505b8015613f865760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b604482015260640161050c565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b600080600080614005868661411d565b9092509050600082600381111561401e5761401e614773565b1461402f5750915060009050613668565b600061403a82614105565b9350935050509250929050565b60008161405c84670de0b6b3a76400006147fb565b61406691906147c3565b9050614072828461481a565b156106b4576106b16001826146f6565b6000806000806140058686614199565b60006106b183836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061420c565b60408051602081019091526000815260405180602001604052806140fc856000015185614092565b90529392505050565b80516000906106b490670de0b6b3a7640000906147c3565b60006141356040518060200160405280600081525090565b60008061414686600001518661425f565b9092509050600082600381111561415f5761415f614773565b1461417e57506040805160208101909152600081529092509050613668565b60408051602081019091529081526000969095509350505050565b60006141b16040518060200160405280600081525090565b6000806141c6670de0b6b3a76400008761425f565b909250905060008260038111156141df576141df614773565b146141fe57506040805160208101909152600081529092509050613668565b61403a81866000015161429e565b6000831580614219575082155b156142265750600061140a565b600061423284866147fb565b90508361423f86836147c3565b148390610ace5760405162461bcd60e51b815260040161050c91906143d5565b6000808361427257506000905080613668565b8383028361428086836147c3565b1461429357600260009250925050613668565b600092509050613668565b60006142b66040518060200160405280600081525090565b6000806142cb86670de0b6b3a764000061425f565b909250905060008260038111156142e4576142e4614773565b1461430357506040805160208101909152600081529092509050613668565b6000806143108388614369565b9092509050600082600381111561432957614329614773565b1461434c5781604051806020016040528060008152509550955050505050613668565b604080516020810190915290815260009890975095505050505050565b6000808261437d5750600190506000613668565b600061438984866147c3565b915091509250929050565b6001600160a01b0381168114611d6557600080fd5b600080604083850312156143bc57600080fd5b82356143c781614394565b946020939093013593505050565b600060208083528351808285015260005b81811015614402578581018301518582016040015282016143e6565b81811115614414576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561443c57600080fd5b5035919050565b60006020828403121561445557600080fd5b813561140a81614394565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561448857600080fd5b813567ffffffffffffffff808211156144a057600080fd5b818401915084601f8301126144b457600080fd5b8135818111156144c6576144c6614460565b604051601f8201601f19908116603f011681019083821181831017156144ee576144ee614460565b8160405282815287602084870101111561450757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b818110156145695783516001600160e01b03191683529284019291840191600101614543565b50909695505050505050565b60008060006060848603121561458a57600080fd5b833561459581614394565b925060208401356145a581614394565b929592945050506040919091013590565b6000806000606084860312156145cb57600080fd5b83356145d681614394565b92506020840135915060408401356145ed81614394565b809150509250925092565b600181811c9082168061460c57607f821691505b602082108114156110cb57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561467257600080fd5b8151801515811461140a57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156146bc57600080fd5b5051919050565b6000602082840312156146d557600080fd5b815161140a81614394565b634e487b7160e01b600052601160045260246000fd5b60008219821115614709576147096146e0565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614738576147386146e0565b5060010190565b600060ff821680614752576147526146e0565b6000190192915050565b60008282101561476e5761476e6146e0565b500390565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b6000826147d2576147d26147ad565b500490565b600080604083850312156147ea57600080fd5b505080516020909101519092909150565b6000816000190483118215151615614815576148156146e0565b500290565b600082614829576148296147ad565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "494:3909:10:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c806389f8132e11610130578063b2a02ff1116100b8578063cb2ef6f71161007c578063cb2ef6f71461045d578063db006a751461048d578063ef01df4f146104a0578063f3fdb15a146104b3578063f5e3c462146104c657600080fd5b8063b2a02ff11461040c578063be99f1191461041f578063c3bf11cd1461042e578063c5ebeaec14610437578063c91a424f1461044a57600080fd5b80639826394b116100ff5780639826394b146103c1578063a0712d68146103ca578063a7b820df146103dd578063aa5af0fd146103f0578063b0d58e49146103f957600080fd5b806389f8132e146103925780638d02d9a1146103a75780638f840ddd146103b057806395d89b41146103b957600080fd5b8063313ce567116101be57806361feacff1161018257806361feacff1461034c5780636752e702146103555780636c540baf146103635780636f307dc31461036c578063852a12e31461037f57600080fd5b8063313ce567146102eb5780633b1d21a2146102f857806347bd37181461030057806356e67728146103095780635fe3b5671461031c57600080fd5b8063173b990411610205578063173b99041461029e57806318160ddd146102a757806319f496c8146102b05780632608f818146102c35780632c436e5b146102d657600080fd5b8063067db1b31461023757806306fdde031461024c5780630e7527021461026a578063135f13341461028b575b600080fd5b61024a6102453660046143a9565b6104d9565b005b610254610523565b60405161026191906143d5565b60405180910390f35b61027d61027836600461442a565b6105b1565b604051908152602001610261565b61027d6102993660046143a9565b61066e565b61027d60085481565b61027d600f5481565b61024a6102be366004614443565b6106ba565b61027d6102d13660046143a9565b610a18565b60025b60405160ff9091168152602001610261565b6003546102d99060ff1681565b61027d610ad7565b61027d600b5481565b61024a610317366004614476565b610ae6565b6003546103349061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610261565b61027d600d5481565b61027d666379da05b6000081565b61027d60095481565b601354610334906001600160a01b031681565b61027d61038d36600461442a565b610c44565b61039a610cf7565b6040516102619190614527565b61027d60065481565b61027d600c5481565b610254610eb1565b61027d600e5481565b61027d6103d836600461442a565b610ebe565b61027d6103eb36600461442a565b610f73565b61027d600a5481565b61027d61040736600461442a565b6110d1565b61027d61041a366004614575565b6111c4565b61027d67016345785d8a000081565b61027d60075481565b61027d61044536600461442a565b6111e8565b600054610334906001600160a01b031681565b604080518082019091526014815273434572633230506c7567696e44656c656761746560601b6020820152610254565b61027d61049b36600461442a565b61129b565b601454610334906001600160a01b031681565b600454610334906001600160a01b031681565b61027d6104d43660046145b6565b61134e565b3330146105155760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b61051f8282611411565b5050565b60018054610530906145f8565b80601f016020809104026020016040519081016040528092919081815260200182805461055c906145f8565b80156105a95780601f1061057e576101008083540402835291602001916105a9565b820191906000526020600020905b81548152906001019060200180831161058c57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105fe9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa15801561061b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061063f9190614660565b61065b5760405162461bcd60e51b815260040161050c90614682565b600061066683611493565b509392505050565b60003330146106a75760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b604482015260640161050c565b6106b18383611524565b90505b92915050565b333014806106cb57506106cb6115da565b61072b5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f7560448201526a383230ba32a8363ab3b4b760a91b606482015260840161050c565b6014546000906001600160a01b03166107445781610751565b6014546001600160a01b03165b6014549091506001600160a01b0316158015906107d857506014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107d591906146aa565b15155b156108c2576014546040516370a0823160e01b81523060048201526001600160a01b039091169063ba0876529082906370a0823190602401602060405180830381865afa15801561082d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061085191906146aa565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af115801561089c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c091906146aa565b505b601480546001600160a01b0319166001600160a01b0384811691821790925560135460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801561092d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109519190614660565b506013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa15801561099b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109bf91906146aa565b905080156109d0576109d081611757565b604080516001600160a01b038085168252851660208201527fb32957d2794aaec3ea2c8852833af2192fe9fb518777de1f883e9e821781da75910160405180910390a1505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610a659261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610a82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aa69190614660565b610ac25760405162461bcd60e51b815260040161050c90614682565b6000610ace84846117cc565b50949350505050565b6000610ae161185f565b905090565b33301480610af75750610af76115da565b610b5f5760405162461bcd60e51b815260206004820152603360248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f6260448201527232b1b7b6b2a4b6b83632b6b2b73a30ba34b7b760691b606482015260840161050c565b600081806020019051810190610b7591906146c3565b90506001600160a01b038116158015610b9857506014546001600160a01b031615155b15610c10576000546014546040516381218ea960e01b81526001600160a01b0391821660048201529116906381218ea990602401602060405180830381865afa158015610be9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c0d91906146c3565b90505b6001600160a01b03811615801590610c3657506014546001600160a01b03828116911614155b1561051f5761051f816106ba565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610c919261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cd29190614660565b610cee5760405162461bcd60e51b815260040161050c90614682565b6106b482611933565b606060026000610d056119b0565b90508160ff168151610d1791906146f6565b67ffffffffffffffff811115610d2f57610d2f614460565b604051908082528060200260200182016040528015610d58578160200160208202803683370190505b50925060005b8151811015610dbe57818181518110610d7957610d7961470e565b6020026020010151848281518110610d9357610d9361470e565b6001600160e01b03199092166020928302919091019091015280610db681614724565b915050610d5e565b50805163ef01df4f60e01b908490610dd58561473f565b9450610de49060ff86166146f6565b81518110610df457610df461470e565b6001600160e01b031990921660209283029190910190910152805163033e92d960e31b908490610e238561473f565b9450610e329060ff86166146f6565b81518110610e4257610e4261470e565b6001600160e01b03199092166020928302919091019091015260ff821615610eac5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161050c565b505090565b60028054610530906145f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f0b9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015610f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4c9190614660565b610f685760405162461bcd60e51b815260040161050c90614682565b600061066683611b2a565b600080610f7f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610fbf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe391906146aa565b50436009541461100057610ff9600a6039611c6b565b91506110c2565b8261100961185f565b101561101b57610ff9600e6038611c6b565b600d5483111561103157610ff96002603a611c6b565b82600d5461103f919061475c565b600d55600354604080516303e1469160e61b815290516110bc9261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015611092573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b691906146c3565b84611411565b60005b91505b6110cb81611ce4565b50919050565b6000806110dd81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561111d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061114191906146aa565b50436009541461115757610ff9600a6035611c6b565b8261116061185f565b101561117257610ff9600e6034611c6b565b600e5483111561118857610ff960026036611c6b565b600083600e54611198919061475c565b600e8190556000549091506111b6906001600160a01b031685611411565b60009250506110cb81611ce4565b600060016111d181611ba7565b6111dd33868686611d68565b915061066681611ce4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926112359261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015611252573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112769190614660565b6112925760405162461bcd60e51b815260040161050c90614682565b6106b482612253565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926112e89261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113299190614660565b6113455760405162461bcd60e51b815260040161050c90614682565b6106b4826122ce565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261139b9261010090910490911690339030906001600160e01b03198835169060040161462d565b602060405180830381865afa1580156113b8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113dc9190614660565b6113f85760405162461bcd60e51b815260040161050c90614682565b600061140585858561234b565b509150505b9392505050565b601454604051632d182be560e21b8152600481018390526001600160a01b0384811660248301523060448301529091169063b460af94906064016020604051808303816000875af115801561146a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148e91906146aa565b505050565b60008060006114a181611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156114e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061150591906146aa565b50611511333386612445565b9250925061151e81611ce4565b50915091565b6013546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061155990869030908790600401614789565b6020604051808303816000875af1158015611578573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159c9190614660565b6115d15760405162461bcd60e51b815260040161050c906020808252600490820152631cd95b9960e21b604082015260600190565b6110cb82611757565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611633573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061165791906146c3565b6001600160a01b0316336001600160a01b03161480156116d45750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156116b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116d49190614660565b8061175157506000546001600160a01b0316331480156117515750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561172d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117519190614660565b91505090565b601454604051636e553f6560e01b8152600481018390523060248201526001600160a01b0390911690636e553f65906044016020604051808303816000875af11580156117a8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051f91906146aa565b60008060006117da81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561181a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061183e91906146aa565b5061184a338686612445565b9250925061185781611ce4565b509250929050565b6014546040516370a0823160e01b81523060048201526000916001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156118b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118d491906146aa565b6040518263ffffffff1660e01b81526004016118f291815260200190565b602060405180830381865afa15801561190f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ae191906146aa565b60008061193f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561197f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119a391906146aa565b506110bf33600085612854565b6060600360006119be612e9c565b90508160ff1681516119d091906146f6565b67ffffffffffffffff8111156119e8576119e8614460565b604051908082528060200260200182016040528015611a11578160200160208202803683370190505b50925060005b8151811015611a7757818181518110611a3257611a3261470e565b6020026020010151848281518110611a4c57611a4c61470e565b6001600160e01b03199092166020928302919091019091015280611a6f81614724565b915050611a17565b50805163cb2ef6f760e01b908490611a8e8561473f565b9450611a9d9060ff86166146f6565b81518110611aad57611aad61470e565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b908490611adc8561473f565b9450611aeb9060ff86166146f6565b81518110611afb57611afb61470e565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610e238561473f565b6000806000611b3881611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611b78573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9c91906146aa565b506115113385613264565b600054600160a01b900460ff16611bed5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015260640161050c565b80611c5b57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611c4257600080fd5b505af1158015611c56573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611ca057611ca0614773565b836061811115611cb257611cb2614773565b60408051928352602083019190915260009082015260600160405180910390a18260118111156106b1576106b1614773565b6000805460ff60a01b1916600160a01b17905580611d6557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d4c57600080fd5b505af1158015611d60573d6000803e3d6000fd5b505050505b50565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611ddc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e0091906146aa565b90508015611e1d57611e156003601d8361366f565b91505061224b565b846001600160a01b0316846001600160a01b03161415611e4357611e156006601e611c6b565b611ea8604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611ecb9085613711565b6020830181905282826003811115611ee557611ee5614773565b6003811115611ef657611ef6614773565b9052506000905081516003811115611f1057611f10614773565b14611f4057611f376009601c83600001516003811115611f3257611f32614773565b61366f565b9250505061224b565b611f5f846040518060200160405280666379da05b6000081525061373c565b6080820152604080516020810190915267016345785d8a00008152611f8590859061373c565b61014082018190526080820151611f9c908661475c565b611fa6919061475c565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fe9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061200d91906146aa565b60c082019081526040805160208101909152905181526080820151612032919061375f565b60a0820152604080516020810190915260c08201518152610140820151612059919061375f565b61016082015260a0810151600c5461207191906146f6565b60e08201526101408101516080820151600f5461208e919061475c565b612098919061475c565b610120820152610160810151600e546120b191906146f6565b6101008201526001600160a01b03861660009081526010602052604090205460608201516120df9190613777565b60408301819052828260038111156120f9576120f9614773565b600381111561210a5761210a614773565b905250600090508151600381111561212457612124614773565b1461214657611f376009601b83600001516003811115611f3257611f32614773565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b168082529084902092909255606085015192519283529092909160008051602061482f833981519152910160405180910390a3306001600160a01b0316856001600160a01b031660008051602061482f83398151915283608001516040516121f391815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061225f81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561229f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122c391906146aa565b506110bf338461379d565b6000806122da81611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561231a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061233e91906146aa565b506110bf33846000612854565b600080600061235981611ba7565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612399573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123bd91906146aa565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156123fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242291906146aa565b5061242f33878787613b38565b9250925061243c81611ce4565b50935093915050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af11580156124b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124d791906146aa565b905080156124f8576124ec600360438361366f565b6000925092505061284c565b436009541461250d576124ec600a6044611c6b565b6125566040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156125c0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125e491906146aa565b6080820152600019851415612602576080810151604082015261260a565b604081018590525b612618878260400151611524565b60e08201819052608082015161262d91613711565b60a083018190526020830182600381111561264a5761264a614773565b600381111561265b5761265b614773565b905250600090508160200151600381111561267857612678614773565b146126eb5760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c4544000000000000606482015260840161050c565b6126fb600b548260e00151613711565b60c083018190526020830182600381111561271857612718614773565b600381111561272957612729614773565b905250600090508160200151600381111561274657612746614773565b146127ad5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b606482015260840161050c565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b6000821580612861575081155b6128ad5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e740000000000000000604482015260640161050c565b6128ee6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561292c573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295091906146aa565b60408201528315612a135761138884600f5461296c919061475c565b101561297857600f5493505b60608101849052604080516020810182529082015181526129999085613ff5565b60808301819052602083018260038111156129b6576129b6614773565b60038111156129c7576129c7614773565b90525060009050816020015160038111156129e4576129e4614773565b14612a0e57612a066009602c83602001516003811115611f3257611f32614773565b91505061140a565b612b5b565b600019831415612aa157600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612a7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a9e91906146aa565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612ae1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0591906146aa565b90506103e8612b14858361475c565b1015612b1e578093505b612b2c848360400151614047565b60608301819052600f546103e891612b439161475c565b1015612b5257600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612b999130918b9190600401614789565b6020604051808303816000875af1158015612bb8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bdc91906146aa565b90508015612bfa57612bf16003602b8361366f565b9250505061140a565b4360095414612c0f57612bf1600a602f611c6b565b612c1f600f548360600151613711565b60a0840181905260208401826003811115612c3c57612c3c614773565b6003811115612c4d57612c4d614773565b9052506000905082602001516003811115612c6a57612c6a614773565b14612c8c57612bf16009603184602001516003811115611f3257611f32614773565b6001600160a01b0386166000908152601060205260409020546060830151612cb49190613711565b60c0840181905260208401826003811115612cd157612cd1614773565b6003811115612ce257612ce2614773565b9052506000905082602001516003811115612cff57612cff614773565b14612d2157612bf16009603084602001516003811115611f3257611f32614773565b8160800151612d2e61185f565b1015612d4057612bf1600e6032611c6b565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612d76908790611411565b306001600160a01b0316866001600160a01b031660008051602061482f8339815191528460600151604051612dad91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612e7157600080fd5b505af1158015612e85573d6000803e3d6000fd5b5060009250612e92915050565b9695505050505050565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81612ed88461473f565b93508360ff1681518110612eee57612eee61470e565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81612f198461473f565b93508360ff1681518110612f2f57612f2f61470e565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81612f5a8461473f565b93508360ff1681518110612f7057612f7061470e565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b81612f9b8461473f565b93508360ff1681518110612fb157612fb161470e565b6001600160e01b03199092166020928302919091019091015263073a938160e11b81612fdc8461473f565b93508360ff1681518110612ff257612ff261470e565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b8161301d8461473f565b93508360ff16815181106130335761303361470e565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b8161305e8461473f565b93508360ff16815181106130745761307461470e565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b8161309f8461473f565b93508360ff16815181106130b5576130b561470e565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b816130e08461473f565b93508360ff16815181106130f6576130f661470e565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816131218461473f565b93508360ff16815181106131375761313761470e565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816131628461473f565b93508360ff16815181106131785761317861470e565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816131a38461473f565b93508360ff16815181106131b9576131b961470e565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b816131e48461473f565b93508360ff16815181106131fa576131fa61470e565b6001600160e01b03199092166020928302919091019091015260ff8216156106b45760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161050c565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e1906132a290309089908990600401614789565b6020604051808303816000875af11580156132c1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132e591906146aa565b90508015613306576132fa600360218361366f565b60009250925050613668565b436009541461331b576132fa600a6024611c6b565b61335c6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561339a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906133be91906146aa565b60408201526133cd8686611524565b60c08201819052604080516020810182529083015181526133ee9190614082565b606083018190526020830182600381111561340b5761340b614773565b600381111561341c5761341c614773565b905250600090508160200151600381111561343957613439614773565b146134865760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c4544604482015260640161050c565b60008160600151116134da5760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a4543544544000000000000604482015260640161050c565b8060600151600f546134ec91906146f6565b608082015260608101516001600160a01b03871660009081526010602052604090205461351991906146f6565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b031660008051602061482f83398151915283606001516040516135c891815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561363b57600080fd5b505af115801561364f573d6000803e3d6000fd5b506000925061365c915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08460118111156136a4576136a4614773565b8460618111156136b6576136b6614773565b604080519283526020830191909152810184905260600160405180910390a160038460118111156136e9576136e9614773565b146137055783601181111561370057613700614773565b61224b565b61224b826103e86146f6565b600080838311613730576000613727848661475c565b91509150613668565b50600390506000613668565b6000670de0b6b3a7640000613755848460000151614092565b6106b191906147c3565b60008061376c84846140d4565b905061224b81614105565b60008083830184811061378f57600092509050613668565b600260009250925050613668565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c906137da90309088908890600401614789565b6020604051808303816000875af11580156137f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061381d91906146aa565b9050801561383a57613832600360108361366f565b9150506106b4565b436009541461384f57613832600a600c611c6b565b600061385961185f565b9050838110156138785761386f600e600b611c6b565b925050506106b4565b6138a4604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156138ed573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061391191906146aa565b602082018190526139229086613777565b604083018190528282600381111561393c5761393c614773565b600381111561394d5761394d614773565b905250600090508151600381111561396757613967614773565b14613993576139896009600e83600001516003811115611f3257611f32614773565b93505050506106b4565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156139ec573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a1091906146aa565b92508215613a2557613989600360108561366f565b613a31600b5486613777565b6060830181905282826003811115613a4b57613a4b614773565b6003811115613a5c57613a5c614773565b9052506000905081516003811115613a7657613a76614773565b14613a98576139896009600d83600001516003811115611f3257611f32614773565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b55613ad48686611411565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613bd291906146aa565b90508015613bf357613be7600360148361366f565b60009250925050613fec565b4360095414613c0857613be7600a6018611c6b565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613c47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6b91906146aa565b14613c7c57613be7600a6013611c6b565b866001600160a01b0316866001600160a01b03161415613ca257613be760066019611c6b565b84613cb357613be760076017611c6b565b600019851415613cc957613be760076016611c6b565b600080613cd7898989612445565b90925090508115613d0c57613cfe826011811115613cf757613cf7614773565b601a611c6b565b600094509450505050613fec565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b90613d499030908c908890600401614789565b6040805180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8991906147d7565b90925090508115613df85760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161050c565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613e41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e6591906146aa565b1015613eb35760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161050c565b60006001600160a01b038916301415613ed957613ed2308d8d85611d68565b9050613f4f565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613f09908f908f908790600401614789565b6020604051808303816000875af1158015613f28573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4c91906146aa565b90505b8015613f865760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b604482015260640161050c565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b600080600080614005868661411d565b9092509050600082600381111561401e5761401e614773565b1461402f5750915060009050613668565b600061403a82614105565b9350935050509250929050565b60008161405c84670de0b6b3a76400006147fb565b61406691906147c3565b9050614072828461481a565b156106b4576106b16001826146f6565b6000806000806140058686614199565b60006106b183836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061420c565b60408051602081019091526000815260405180602001604052806140fc856000015185614092565b90529392505050565b80516000906106b490670de0b6b3a7640000906147c3565b60006141356040518060200160405280600081525090565b60008061414686600001518661425f565b9092509050600082600381111561415f5761415f614773565b1461417e57506040805160208101909152600081529092509050613668565b60408051602081019091529081526000969095509350505050565b60006141b16040518060200160405280600081525090565b6000806141c6670de0b6b3a76400008761425f565b909250905060008260038111156141df576141df614773565b146141fe57506040805160208101909152600081529092509050613668565b61403a81866000015161429e565b6000831580614219575082155b156142265750600061140a565b600061423284866147fb565b90508361423f86836147c3565b148390610ace5760405162461bcd60e51b815260040161050c91906143d5565b6000808361427257506000905080613668565b8383028361428086836147c3565b1461429357600260009250925050613668565b600092509050613668565b60006142b66040518060200160405280600081525090565b6000806142cb86670de0b6b3a764000061425f565b909250905060008260038111156142e4576142e4614773565b1461430357506040805160208101909152600081529092509050613668565b6000806143108388614369565b9092509050600082600381111561432957614329614773565b1461434c5781604051806020016040528060008152509550955050505050613668565b604080516020810190915290815260009890975095505050505050565b6000808261437d5750600190506000613668565b600061438984866147c3565b915091509250929050565b6001600160a01b0381168114611d6557600080fd5b600080604083850312156143bc57600080fd5b82356143c781614394565b946020939093013593505050565b600060208083528351808285015260005b81811015614402578581018301518582016040015282016143e6565b81811115614414576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561443c57600080fd5b5035919050565b60006020828403121561445557600080fd5b813561140a81614394565b634e487b7160e01b600052604160045260246000fd5b60006020828403121561448857600080fd5b813567ffffffffffffffff808211156144a057600080fd5b818401915084601f8301126144b457600080fd5b8135818111156144c6576144c6614460565b604051601f8201601f19908116603f011681019083821181831017156144ee576144ee614460565b8160405282815287602084870101111561450757600080fd5b826020860160208301376000928101602001929092525095945050505050565b6020808252825182820181905260009190848201906040850190845b818110156145695783516001600160e01b03191683529284019291840191600101614543565b50909695505050505050565b60008060006060848603121561458a57600080fd5b833561459581614394565b925060208401356145a581614394565b929592945050506040919091013590565b6000806000606084860312156145cb57600080fd5b83356145d681614394565b92506020840135915060408401356145ed81614394565b809150509250925092565b600181811c9082168061460c57607f821691505b602082108114156110cb57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561467257600080fd5b8151801515811461140a57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156146bc57600080fd5b5051919050565b6000602082840312156146d557600080fd5b815161140a81614394565b634e487b7160e01b600052601160045260246000fd5b60008219821115614709576147096146e0565b500190565b634e487b7160e01b600052603260045260246000fd5b6000600019821415614738576147386146e0565b5060010190565b600060ff821680614752576147526146e0565b6000190192915050565b60008282101561476e5761476e6146e0565b500390565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b6000826147d2576147d26147ad565b500490565b600080604083850312156147ea57600080fd5b505080516020909101519092909150565b6000816000190483118215151615614815576148156146e0565b500290565b600082614829576148296147ad565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "494:3909:10:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6703:158:13;;;;;;:::i;:::-;;:::i;:::-;;580:18:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4337:168:13;;;;;;:::i;:::-;;:::i;:::-;;;1403:25:504;;;1391:2;1376:18;4337:168:13;1257:177:504;6865:185:13;;;;;;:::i;:::-;;:::i;1783:36:15:-;;;;;;2626:26;;;;;;2228:717:10;;;;;;:::i;:::-;;:::i;4771:208:13:-;;;;;;:::i;:::-;;:::i;4190:88:10:-;4272:1;4190:88;;;1863:4:504;1851:17;;;1833:36;;1821:2;1806:18;4190:88:10;1691:184:504;750:21:15;;;;;;;;;5851:95:13;;;:::i;2162:27:15:-;;;;;;1482:584:10;;;;;;:::i;:::-;;:::i;1148:35:15:-;;;;;;;;-1:-1:-1;;;;;1148:35:15;;;;;;-1:-1:-1;;;;;3128:32:504;;;3110:51;;3098:2;3083:18;1148:35:15;2938:229:504;2405:29:15;;;;;;3491:59;;3544:6;3491:59;;1896:33;;;;;;3740:25;;;;;-1:-1:-1;;;;;3740:25:15;;;3617:153:13;;;;;;:::i;:::-;;:::i;681:672:10:-;;;:::i;:::-;;;;;;;:::i;1551:31:15:-;;;;;;2282:28;;;;;;663:20;;;:::i;2529:29::-;;;;;;2669:152:13;;;;;;:::i;:::-;;:::i;8504:1035::-;;;;;;:::i;:::-;;:::i;2037:26:15:-;;;;;;7283:988:13;;;;;;:::i;:::-;;:::i;6476:223::-;;;;;;:::i;:::-;;:::i;3619:52:15:-;;3667:4;3619:52;;1668:31;;;;;;4015:133:13;;;;;;:::i;:::-;;:::i;336:33:15:-;;;;;-1:-1:-1;;;;;336:33:15;;;4282:119:10;4367:29;;;;;;;;;;;;-1:-1:-1;;;4367:29:10;;;;4282:119;;3150:133:13;;;;;;:::i;:::-;;:::i;654:22:10:-;;;;;-1:-1:-1;;;;;654:22:10;;;1272:42:15;;;;;-1:-1:-1;;;;;1272:42:15;;;5433:264:13;;;;;;:::i;:::-;;:::i;6703:158::-;6788:10;6810:4;6788:27;6780:45;;;;-1:-1:-1;;;6780:45:13;;5851:2:504;6780:45:13;;;5833:21:504;5890:1;5870:18;;;5863:29;-1:-1:-1;;;5908:18:504;;;5901:35;5953:18;;6780:45:13;;;;;;;;;6831:25;6845:2;6849:6;6831:13;:25::i;:::-;6703:158;;:::o;580:18:15:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4337:168:13:-;4419:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4435:11:::1;4452:32;4472:11;4452:19;:32::i;:::-;-1:-1:-1::0;4434:50:13;4337:168;-1:-1:-1;;;4337:168:13:o;6865:185::-;6946:7;6969:10;6991:4;6969:27;6961:45;;;;-1:-1:-1;;;6961:45:13;;5851:2:504;6961:45:13;;;5833:21:504;5890:1;5870:18;;;5863:29;-1:-1:-1;;;5908:18:504;;;5901:35;5953:18;;6961:45:13;5649:328:504;6961:45:13;7019:26;7032:4;7038:6;7019:12;:26::i;:::-;7012:33;;6865:185;;;;;:::o;2228:717:10:-;2289:10;2311:4;2289:27;;:47;;;2320:16;:14;:16::i;:::-;2281:103;;;;-1:-1:-1;;;2281:103:10;;7680:2:504;2281:103:10;;;7662:21:504;7719:2;7699:18;;;7692:30;7758:34;7738:18;;;7731:62;-1:-1:-1;;;7809:18:504;;;7802:41;7860:19;;2281:103:10;7478:407:504;2281:103:10;2427:6;;2391:25;;-1:-1:-1;;;;;2427:6:10;2419:57;;2469:7;2419:57;;;2459:6;;-1:-1:-1;;;;;2459:6:10;2419:57;2495:6;;2391:85;;-1:-1:-1;;;;;;2495:6:10;2487:29;;;;:69;;-1:-1:-1;2520:6:10;;:31;;-1:-1:-1;;;2520:31:10;;2545:4;2520:31;;;3110:51:504;-1:-1:-1;;;;;2520:6:10;;;;:16;;3083:18:504;;2520:31:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;2487:69;2483:166;;;2566:6;;2580:31;;-1:-1:-1;;;2580:31:10;;2605:4;2580:31;;;3110:51:504;-1:-1:-1;;;;;2566:6:10;;;;:13;;:6;;2580:16;;3083:18:504;;2580:31:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2566:76;;-1:-1:-1;;;;;;2566:76:10;;;;;;;;;;8281:25:504;;;;2621:4:10;8360:18:504;;;8353:43;;;8412:18;;;8405:43;8254:18;;2566:76:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2483:166;2655:6;:26;;-1:-1:-1;;;;;;2655:26:10;-1:-1:-1;;;;;2655:26:10;;;;;;;;;2703:10;;2688:62;;-1:-1:-1;;;2688:62:10;;;;;8633:51:504;;;;-1:-1:-1;;8700:18:504;;;8693:34;2703:10:10;;;;2688:34;;8606:18:504;;2688:62:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2789:10:10;;2774:51;;-1:-1:-1;;;2774:51:10;;2819:4;2774:51;;;3110::504;2757:14:10;;-1:-1:-1;;;;;2789:10:10;;2774:36;;3083:18:504;;2774:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2757:68;-1:-1:-1;2835:11:10;;2831:47;;2856:15;2864:6;2856:7;:15::i;:::-;2889:51;;;-1:-1:-1;;;;;8968:15:504;;;8950:34;;9020:15;;9015:2;9000:18;;8993:43;2889:51:10;;8885:18:504;2889:51:10;;;;;;;2275:670;;2228:717;:::o;4771:208:13:-;4877:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4893:11:::1;4910:48;4936:8;4946:11;4910:25;:48::i;:::-;-1:-1:-1::0;4892:66:13;4771:208;-1:-1:-1;;;;4771:208:13:o;5851:95::-;5902:7;5924:17;:15;:17::i;:::-;5917:24;;5851:95;:::o;1482:584:10:-;1570:10;1592:4;1570:27;;:47;;;1601:16;:14;:16::i;:::-;1562:111;;;;-1:-1:-1;;;1562:111:10;;9249:2:504;1562:111:10;;;9231:21:504;9288:2;9268:18;;;9261:30;9327:34;9307:18;;;9300:62;-1:-1:-1;;;9378:18:504;;;9371:49;9437:19;;1562:111:10;9047:415:504;1562:111:10;1680:15;1709:4;1698:27;;;;;;;;;;;;:::i;:::-;1680:45;-1:-1:-1;;;;;;1736:21:10;;;:54;;;;-1:-1:-1;1769:6:10;;-1:-1:-1;;;;;1769:6:10;1761:29;;1736:54;1732:230;;;1900:10;;1947:6;;1884:71;;-1:-1:-1;;;1884:71:10;;-1:-1:-1;;;;;1947:6:10;;;1884:71;;;3110:51:504;1900:10:10;;;1884:54;;3083:18:504;;1884:71:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1874:81;;1732:230;-1:-1:-1;;;;;1972:21:10;;;;;;:51;;-1:-1:-1;2016:6:10;;-1:-1:-1;;;;;1997:26:10;;;2016:6;;1997:26;;1972:51;1968:94;;;2033:22;2047:7;2033:13;:22::i;3617:153:13:-;3705:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;3727:38:::1;3752:12;3727:24;:38::i;681:672:10:-:0;753:33;811:1;794:14;860:30;:28;:30::i;:::-;819:71;;961:8;929:40;;:22;:29;:40;;;;:::i;:::-;916:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;916:54:10;;896:74;;982:9;977:123;1001:22;:29;997:1;:33;977:123;;;1068:22;1091:1;1068:25;;;;;;;;:::i;:::-;;;;;;;1045:17;1063:1;1045:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1045:48:10;;;:20;;;;;;;;;;;:48;1032:3;;;;:::i;:::-;;;;977:123;;;-1:-1:-1;1137:29:10;;-1:-1:-1;;;1170:20:10;1106:17;;1124:10;;;:::i;:::-;;-1:-1:-1;1124:42:10;;;;;;:::i;:::-;1106:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1106:84:10;;;:61;;;;;;;;;;;:84;1227:29;;-1:-1:-1;;;1260:27:10;1196:17;;1214:10;;;:::i;:::-;;-1:-1:-1;1214:42:10;;;;;;:::i;:::-;1196:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1196:91:10;;;:61;;;;;;;;;;;:91;1302:13;;;;1294:54;;;;-1:-1:-1;;;1294:54:10;;10909:2:504;1294:54:10;;;10891:21:504;10948:2;10928:18;;;10921:30;10987;10967:18;;;10960:58;11035:18;;1294:54:10;10707:352:504;1294:54:10;788:565;;681:672;:::o;663:20:15:-;;;;;;;:::i;2669:152:13:-;2743:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;2759:11:::1;2776:24;2789:10;2776:12;:24::i;8504:1035::-:0;8603:7;8587:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;8618:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8687:12;8665:18;;:34;8661:135;;8716:73;8721:22;8745:43;8716:4;:73::i;:::-;8709:80;;;;8661:135;8894:14;8874:17;:15;:17::i;:::-;:34;8870:149;;;8925:87;8930:29;8961:50;8925:4;:87::i;8870:149::-;9046:14;;9029;:31;9025:124;;;9077:65;9082:15;9099:42;9077:4;:65::i;9025:124::-;9293:14;9276;;:31;;;;:::i;:::-;9259:14;:48:::0;9459:11:::1;::::0;9430:50:::1;::::0;;-1:-1:-1;;;9430:50:13;;;;9416:81:::1;::::0;9459:11:::1;::::0;::::1;-1:-1:-1::0;;;;;9459:11:13::1;::::0;9430:48:::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;9459:11;9430:50:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9482:14;9416:13;:81::i;:::-;9519:14;9511:23;9504:30;;41731:1;41738:29:::0;41757:9;41738:18;:29::i;:::-;8504:1035;;;;:::o;7283:988::-;7382:7;7366:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;7397:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7466:12;7444:18;;:34;7440:135;;7495:73;7500:22;7524:43;7495:4;:73::i;7440:135::-;7605:14;7585:17;:15;:17::i;:::-;:34;7581:149;;;7636:87;7641:29;7672:50;7636:4;:87::i;7581:149::-;7757:14;;7740;:31;7736:124;;;7788:65;7793:15;7810:42;7788:4;:65::i;7736:124::-;7971:25;8016:14;7999;;:31;;;;:::i;:::-;8036:14;:34:::0;;;8201:10:::1;::::0;7971:59;;-1:-1:-1;8179:50:13::1;::::0;-1:-1:-1;;;;;8201:10:13::1;8214:14:::0;8179:13:::1;:50::i;:::-;8251:14;8236:30;;;41738:29:::0;41757:9;41738:18;:29::i;6476:223::-;6612:7;6597:4;41695:30;41715:9;41695:19;:30::i;:::-;6634:60:::1;6648:10;6660;6672:8;6682:11;6634:13;:60::i;:::-;6627:67;;41738:29:::0;41757:9;41738:18;:29::i;4015:133::-;4093:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4115:28:::1;4130:12;4115:14;:28::i;3150:133::-:0;3228:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;3250:28:::1;3265:12;3250:14;:28::i;5433:264::-:0;5579:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;5595:11:::1;5612:64;5636:8;5646:11;5659:16;5612:23;:64::i;:::-;-1:-1:-1::0;5594:82:13;-1:-1:-1;;1193:1:13::1;5433:264:::0;;;;;:::o;4064:122:10:-;4139:6;;:42;;-1:-1:-1;;;4139:42:10;;;;;8281:25:504;;;-1:-1:-1;;;;;8380:15:504;;;8360:18;;;8353:43;4175:4:10;8412:18:504;;;8405:43;4139:6:10;;;;:15;;8254:18:504;;4139:42:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;4064:122;;:::o;27701:307:13:-;27789:7;27798;27773:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;27813:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27950:53;27967:10;27979;27991:11;27950:16;:53::i;:::-;27943:60;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;27701:307;;;;:::o;3531:263:10:-;3686:10;;3671:68;;-1:-1:-1;;;3671:68:10;;3610:7;;-1:-1:-1;;;;;3686:10:10;;3671:39;;:68;;3711:4;;3725;;3732:6;;3671:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3663:85;;;;-1:-1:-1;;;3663:85:10;;;;;;11908:2:504;11890:21;;;11947:1;11927:18;;;11920:29;-1:-1:-1;;;11980:2:504;11965:18;;11958:34;12024:2;12009:18;;11706:327;3663:85:10;3755:15;3763:6;3755:7;:15::i;10661:339:15:-;10710:4;10722:39;10793:11;;;;;;;;;-1:-1:-1;;;;;10793:11:15;10722:84;;10840:18;-1:-1:-1;;;;;10840:24:15;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10826:40:15;:10;-1:-1:-1;;;;;10826:40:15;;:79;;;;;10870:18;-1:-1:-1;;;;;10870:33:15;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10825:170;;;-1:-1:-1;10939:10:15;;-1:-1:-1;;;;;10939:10:15;10917;:33;:77;;;;;10954:18;-1:-1:-1;;;;;10954:38:15;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10812:183;;;10661:339;:::o;3798:90:10:-;3846:6;;:37;;-1:-1:-1;;;3846:37:10;;;;;12212:25:504;;;3877:4:10;12253:18:504;;;12246:60;-1:-1:-1;;;;;3846:6:10;;;;:14;;12185:18:504;;3846:37:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28319:343:13:-;28443:7;28452;28423:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;28469:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28606:51;28623:10;28635:8;28645:11;28606:16;:51::i;:::-;28599:58;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;28319:343;;;;;;:::o;3152:139:10:-;3233:6;;3254:31;;-1:-1:-1;;;3254:31:10;;3279:4;3254:31;;;3110:51:504;3211:7:10;;-1:-1:-1;;;;;3233:6:10;;:20;;:6;;3254:16;;3083:18:504;;3254:31:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3233:53;;;;;;;;;;;;;1403:25:504;;1391:2;1376:18;;1257:177;3233:53:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17924:280:13:-;18018:7;18002:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;18033:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:40;18171:10;18183:1;18186:12;18159:11;:40::i;272:782:8:-:0;344:33;402:1;385:14;451:30;:28;:30::i;:::-;410:71;;552:8;520:40;;:22;:29;:40;;;;:::i;:::-;507:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:54:8;;487:74;;573:9;568:123;592:22;:29;588:1;:33;568:123;;;659:22;682:1;659:25;;;;;;;;:::i;:::-;;;;;;;636:17;654:1;636:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;636:48:8;;;:20;;;;;;;;;;;:48;623:3;;;;:::i;:::-;;;;568:123;;;-1:-1:-1;728:29:8;;-1:-1:-1;;;761:26:8;697:17;;715:10;;;:::i;:::-;;-1:-1:-1;715:42:8;;;;;;:::i;:::-;697:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;697:90:8;;;:61;;;;;;;;;;;:90;824:29;;-1:-1:-1;;;857:26:8;793:17;;811:10;;;:::i;:::-;;-1:-1:-1;811:42:8;;;;;;:::i;:::-;793:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;793:90:8;;;:61;;;;;;;;;;;:90;920:29;;-1:-1:-1;;;953:35:8;889:17;;907:10;;;:::i;13048:290:13:-;13128:7;13137;13112:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;13152:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13300:33;13310:10;13322;13300:9;:33::i;42073:178::-:0;42140:11;;-1:-1:-1;;;42140:11:13;;;;42132:34;;;;-1:-1:-1;;;42132:34:13;;12519:2:504;42132:34:13;;;12501:21:504;12558:2;12538:18;;;12531:30;-1:-1:-1;;;12577:18:504;;;12570:40;12627:18;;42132:34:13;12317:334:504;42132:34:13;42177:9;42172:49;;42188:11;;;;;;;;;-1:-1:-1;;;;;42188:11:13;-1:-1:-1;;;;;42188:31:13;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:49;-1:-1:-1;42241:5:13;42227:19;;-1:-1:-1;;;;42227:19:13;;;42073:178::o;7757:151:23:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;12866:25:504;;;12922:2;12907:18;;12900:34;;;;7875:1:23;12950:18:504;;;12943:34;12854:2;12839:18;7838:39:23;;;;;;;7899:3;7891:12;;;;;;;;:::i;42551:169:13:-;42609:11;:18;;-1:-1:-1;;;;42609:18:13;-1:-1:-1;;;42609:18:13;;;42672:9;42667:48;;42683:11;;;;;;;;;-1:-1:-1;;;;;42683:11:13;-1:-1:-1;;;;;42683:30:13;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42667:48;42551:169;:::o;38262:3163::-;38472:11;;:87;;-1:-1:-1;;;38472:87:13;;38505:4;38472:87;;;13285:34:504;-1:-1:-1;;;;;13355:15:504;;;13335:18;;;13328:43;13407:15;;;13387:18;;;13380:43;13459:15;;;13439:18;;;13432:43;13491:19;;;13484:35;;;38403:7:13;;;;38472:11;;;;;;;;:24;;13219:19:504;;38472:87:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38454:105;-1:-1:-1;38569:12:13;;38565:139;;38598:99;38609:27;38638:49;38689:7;38598:10;:99::i;:::-;38591:106;;;;;38565:139;38766:10;-1:-1:-1;;;;;38754:22:13;:8;-1:-1:-1;;;;;38754:22:13;;38750:134;;;38793:84;38798:26;38826:50;38793:4;:84::i;38750:134::-;38890:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38890:34:13;-1:-1:-1;;;;;39230:23:13;;;;;;:13;:23;;;;;;39222:45;;39255:11;39222:7;:45::i;:::-;39196:22;;;39181:86;;;39182:4;39181:86;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;39293:18:13;;-1:-1:-1;39277:12:13;;:34;;;;;;;;:::i;:::-;;39273:167;;39328:105;39339:16;39357:52;39419:4;:12;;;39411:21;;;;;;;;:::i;:::-;39328:10;:105::i;:::-;39321:112;;;;;;39273:167;39473:64;39478:11;39491:45;;;;;;;;3544:6:15;39491:45:13;;;39473:4;:64::i;:::-;39446:24;;;:91;39583:40;;;;;;;;;3667:4:15;39583:40:13;;39565:59;;39570:11;;39565:4;:59::i;:::-;39543:19;;;:81;;;39673:24;;;;39659:38;;:11;:38;:::i;:::-;:60;;;;:::i;:::-;39630:26;;;:89;41519:4;-1:-1:-1;;;;;39754:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39726:25;;;:69;;;39855:44;;;;;;;;;39871:25;;39855:44;;-1:-1:-1;;;39907:24:13;39829:108;;39855:44;39829:18;:108::i;:::-;39802:24;;;:135;39984:44;;;;;;;;;40000:25;;;;39984:44;;40030:19;;;;39965:85;;39984:44;39965:18;:85::i;:::-;39943:19;;;:107;40097:24;;;;40081:13;;:40;;40097:24;40081:40;:::i;:::-;40057:21;;;:64;40190:19;;;;40163:24;;;;40149:11;;:38;;40163:24;40149:38;:::i;:::-;:60;;;;:::i;:::-;40127:19;;;:82;40256:19;;;;40239:14;;:36;;40256:19;40239:36;:::i;:::-;40215:21;;;:60;-1:-1:-1;;;;;40333:25:13;;;;;;:13;:25;;;;;;40360:26;;;;40325:62;;40333:25;40325:7;:62::i;:::-;40297:24;;;40282:105;;;40283:4;40282:105;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;40413:18:13;;-1:-1:-1;40397:12:13;;:34;;;;;;;;:::i;:::-;;40393:167;;40448:105;40459:16;40477:52;40539:4;:12;;;40531:21;;;;;;;;:::i;40393:167::-;40752:21;;;;40736:13;:37;40793:19;;;;40779:11;:33;40835:21;;;;40818:14;:38;40889:22;;;;;-1:-1:-1;;;;;40863:23:13;;;-1:-1:-1;40863:23:13;;;:13;:23;;;;;;:48;;;;40945:24;;;;40917:25;;;;;;;;;;:52;;;;41044:26;;;;41013:58;;1403:25:504;;;40917::13;;40863:23;;-1:-1:-1;;;;;;;;;;;41013:58:13;1376:18:504;41013:58:13;;;;;;;41109:4;-1:-1:-1;;;;;41082:59:13;41091:8;-1:-1:-1;;;;;41082:59:13;-1:-1:-1;;;;;;;;;;;41116:4:13;:24;;;41082:59;;;;1403:25:504;;1391:2;1376:18;;1257:177;41082:59:13;;;;;;;;41181:24;;;;41207:21;;;;41152:77;;;41174:4;13732:51:504;;13814:2;13799:18;;13792:34;;;;13842:18;;13835:34;41152:77:13;;13720:2:504;13705:18;41152:77:13;;;;;;;41405:14;41390:30;;;;38262:3163;;;;;;;:::o;23833:267::-;23917:7;23901:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;23932:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24058:37;24070:10;24082:12;24058:11;:37::i;17296:270::-:0;17380:7;17364:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;17395:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17521:40;17533:10;17545:12;17559:1;17521:11;:40::i;32809:437::-:0;32961:7;32970;32945:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;32985:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33035:16;-1:-1:-1::0;;;;;33027:40:13::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33168:73;33189:10;33201:8;33211:11;33224:16;33168:20;:73::i;:::-;33161:80;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;32809:437;;;;;;;:::o;29313:2997::-;29511:11;;:75;;-1:-1:-1;;;29511:75:13;;29550:4;29511:75;;;14149:34:504;-1:-1:-1;;;;;14219:15:504;;;14199:18;;;14192:43;14271:15;;;14251:18;;;14244:43;14303:18;;;14296:34;;;29427:7:13;;;;;;29511:11;;;;;;;;:30;;14083:19:504;;29511:75:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29493:93;-1:-1:-1;29596:12:13;;29592:141;;29626:96;29637:27;29666:46;29714:7;29626:10;:96::i;:::-;29724:1;29618:108;;;;;;;29592:141;29832:12;29810:18;;:34;29806:137;;29862:70;29867:22;29891:40;29862:4;:70::i;29806:137::-;29949:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:32:13;-1:-1:-1;;;;;30084:24:13;;;;;;:14;:24;;;;;:38;;;30063:18;;;:59;41519:4;30226:50;;-1:-1:-1;;;30226:50:13;;-1:-1:-1;;;;;3128:32:504;;;30226:50:13;;;3110:51:504;30226:40:13;;;;;;;3083:18:504;;30226:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30204:19;;;:72;-1:-1:-1;;30348:32:13;;30344:142;;;30409:19;;;;30390:16;;;:38;30344:142;;;30449:16;;;:30;;;30344:142;31027:37;31040:5;31047:4;:16;;;31027:12;:37::i;:::-;31002:22;;;:62;;;31343:19;;;;31335:52;;:7;:52::i;:::-;31309:22;;;31294:93;;;31295:12;;;31294:93;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31417:18:13;;-1:-1:-1;31401:4:13;:12;;;:34;;;;;;;;:::i;:::-;;31393:105;;;;-1:-1:-1;;;31393:105:13;;14543:2:504;31393:105:13;;;14525:21:504;14582:2;14562:18;;;14555:30;14621:34;14601:18;;;14594:62;14692:28;14672:18;;;14665:56;14738:19;;31393:105:13;14341:422:504;31393:105:13;31544:45;31552:12;;31566:4;:22;;;31544:7;:45::i;:::-;31520:20;;;31505:84;;;31506:12;;;31505:84;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31619:18:13;;-1:-1:-1;31603:4:13;:12;;;:34;;;;;;;;:::i;:::-;;31595:96;;;;-1:-1:-1;;;31595:96:13;;14970:2:504;31595:96:13;;;14952:21:504;15009:2;14989:18;;;14982:30;15048:34;15028:18;;;15021:62;-1:-1:-1;;;15099:18:504;;;15092:47;15156:19;;31595:96:13;14768:413:504;31595:96:13;31800:22;;;;;;-1:-1:-1;;;;;31763:24:13;;;;;;;:14;:24;;;;;;;;;:59;;;31869:11;;31828:38;;;;:52;;;;31901:20;;;;31886:12;:35;;;32000:22;;;;32024;;31971:98;;15501:15:504;;;15483:34;;15533:18;;;15526:43;;;;15585:18;;15578:34;;;;15643:2;15628:18;;15621:34;;;;15686:3;15671:19;;15664:35;;;;31971:98:13;;15417:19:504;31971:98:13;;;;;;;32282:22;;;32265:14;;-1:-1:-1;32282:22:13;-1:-1:-1;;29313:2997:13;;;;;;;:::o;19181:4407::-;19302:7;19325:19;;;:42;;-1:-1:-1;19348:19:13;;19325:42;19317:79;;;;-1:-1:-1;;;19317:79:13;;15912:2:504;19317:79:13;;;15894:21:504;15951:2;15931:18;;;15924:30;15990:26;15970:18;;;15963:54;16034:18;;19317:79:13;15710:348:504;19317:79:13;19403:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:27:13;41519:4;-1:-1:-1;;;;;19465:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19437:25;;;:69;19517:18;;19513:1634;;19637:4;19620:14;19606:11;;:28;;;;:::i;:::-;:35;19602:69;;;19660:11;;19643:28;;19602:69;19886:17;;;:34;;;19992:44;;;;;;;;20008:25;;;;19992:44;;19965:103;;19906:14;19965:17;:103::i;:::-;19944:17;;;19929:139;;;19930:12;;;19929:139;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;20096:18:13;;-1:-1:-1;20080:4:13;:12;;;:34;;;;;;;;:::i;:::-;;20076:182;;20143:106;20154:16;20172:53;20235:4;:12;;;20227:21;;;;;;;;:::i;20143:106::-;20126:123;;;;;20076:182;19513:1634;;;-1:-1:-1;;20282:14:13;:35;20278:150;;;20346:11;;:73;;-1:-1:-1;;;20346:73:13;;-1:-1:-1;;;;;16332:15:504;;;20346:73:13;;;16314:34:504;20405:4:13;16364:18:504;;;16357:43;20413:5:13;16416:18:504;;;16409:50;20346:11:13;;;;;;;;:32;;16249:18:504;;20346:73:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:90;;20278:150;20493:31;41519:4;-1:-1:-1;;;;;20527:46:13;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20493:82;-1:-1:-1;20630:4:13;20587:40;20613:14;20493:82;20587:40;:::i;:::-;:47;20583:93;;;20653:23;20636:40;;20583:93;20903:53;20914:14;20930:4;:25;;;20903:10;:53::i;:::-;20883:17;;;:73;;;21026:11;;21060:4;;21026:31;;;:::i;:::-;:38;21022:75;;;21086:11;;21066:17;;;:31;21022:75;-1:-1:-1;21106:17:13;;;:34;;;19513:1634;21208:11;;21259:17;;;;21208:69;;-1:-1:-1;;;21208:69:13;;21190:15;;21208:11;;;-1:-1:-1;;;;;21208:11:13;;:25;;:69;;21242:4;;21249:8;;21259:17;21208:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:87;-1:-1:-1;21287:12:13;;21283:130;;21316:90;21327:27;21356:40;21398:7;21316:10;:90::i;:::-;21309:97;;;;;;21283:130;21512:12;21490:18;;:34;21486:126;;21541:64;21546:22;21570:34;21541:4;:64::i;21486:126::-;21876:39;21884:11;;21897:4;:17;;;21876:7;:39::i;:::-;21853:19;;;21838:77;;;21839:12;;;21838:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;21941:18:13;;-1:-1:-1;21925:4:13;:12;;;:34;;;;;;;;:::i;:::-;;21921:177;;21984:107;21995:16;22013:54;22077:4;:12;;;22069:21;;;;;;;;:::i;21921:177::-;-1:-1:-1;;;;;22152:23:13;;;;;;:13;:23;;;;;;22177:17;;;;22144:51;;22152:23;22144:7;:51::i;:::-;22119:21;;;22104:91;;;22105:12;;;22104:91;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;22221:18:13;;-1:-1:-1;22205:4:13;:12;;;:34;;;;;;;;:::i;:::-;;22201:180;;22264:110;22275:16;22293:57;22360:4;:12;;;22352:21;;;;;;;;:::i;22201:180::-;22471:4;:17;;;22451;:15;:17::i;:::-;:37;22447:146;;;22505:81;22510:29;22541:44;22505:4;:81::i;22447:146::-;22779:19;;;;22765:11;:33;22830:21;;;;-1:-1:-1;;;;;22804:23:13;;;;;;:13;:23;;;;;:47;23215:17;;;;23191:42;;22818:8;;23191:13;:42::i;:::-;23327:4;-1:-1:-1;;;;;23300:52:13;23309:8;-1:-1:-1;;;;;23300:52:13;-1:-1:-1;;;;;;;;;;;23334:4:13;:17;;;23300:52;;;;1403:25:504;;1391:2;1376:18;;1257:177;23300:52:13;;;;;;;;23380:17;;;;23399;;;;;23363:54;;;-1:-1:-1;;;;;13750:32:504;;13732:51;;13814:2;13799:18;;13792:34;;;;13842:18;;13835:34;23363:54:13;;13705:18:504;23363:54:13;;;;;;;23459:11;;23509:17;;;;23528;;;;23459:87;;-1:-1:-1;;;23459:87:13;;23492:4;23459:87;;;16739:34:504;-1:-1:-1;;;;;16809:15:504;;;16789:18;;;16782:43;16841:18;;;16834:34;;;;16884:18;;;16877:34;;;;23459:11:13;;;;;;:24;;16673:19:504;;23459:87:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23568:14:13;;-1:-1:-1;23560:23:13;;-1:-1:-1;;23560:23:13;;23553:30;19181:4407;-1:-1:-1;;;;;;19181:4407:13:o;1203:1102::-;1359:22;;;1315:2;1359:22;;;;;;;;;1275:15;;1315:2;1298:14;;1315:2;1359:22;;;;;;;;;;-1:-1:-1;;1323:58:13;-1:-1:-1;;;;1323:58:13;1405:10;;;:::i;:::-;;;;1387:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1387:50:13;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;1443:17:13;1461:10;;;:::i;:::-;;;;1443:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1443:52:13;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1501:17:13;1519:10;;;:::i;:::-;;;;1501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1501:62:13;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;1569:17:13;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:52:13;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1627:17:13;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:57:13;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;1690:17:13;1708:10;;;:::i;:::-;;;;1690:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1690:63:13;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1759:17:13;1777:10;;;:::i;:::-;;;;1759:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1759:61:13;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;1826:17:13;1844:10;;;:::i;:::-;;;;1826:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1826:53:13;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1885:17:13;1903:10;;;:::i;:::-;;;;1885:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1885:51:13;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;1942:17:13;1960:10;;;:::i;:::-;;;;1942:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1942:61:13;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2009:17:13;2027:10;;;:::i;:::-;;;;2009:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2009:60:13;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2075:17:13;2093:10;;;:::i;:::-;;;;2075:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2075:64:13;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2145:17:13;2163:10;;;:::i;:::-;;;;2145:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2145:64:13;;;:29;;;;;;;;;;;:64;2224:13;;;;2216:54;;;;-1:-1:-1;;;2216:54:13;;10909:2:504;2216:54:13;;;10891:21:504;10948:2;10928:18;;;10921:30;10987;10967:18;;;10960:58;11035:18;;2216:54:13;10707:352:504;13996:2971:13;14146:11;;:58;;-1:-1:-1;;;14146:58:13;;14069:7;;;;;;14146:11;;;-1:-1:-1;;;;;14146:11:13;;:23;;:58;;14178:4;;14185:6;;14193:10;;14146:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14128:76;-1:-1:-1;14214:12:13;;14210:133;;14244:88;14255:27;14284:38;14324:7;14244:10;:88::i;:::-;14334:1;14236:100;;;;;;;14210:133;14442:12;14420:18;;:34;14416:129;;14472:62;14477:22;14501:32;14472:4;:62::i;14416:129::-;14551:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14551:25:13;41519:4;-1:-1:-1;;;;;14611:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14583:25;;;:69;15550:32;15563:6;15571:10;15550:12;:32::i;:::-;15526:21;;;:56;;;15890:44;;;;;;;;15906:25;;;;15890:44;;15831:109;;15526:56;15831:22;:109::i;:::-;15812:15;;;15797:143;;;15798:12;;;15797:143;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;15970:18:13;;-1:-1:-1;15954:4:13;:12;;;:34;;;;;;;;:::i;:::-;;15946:79;;;;-1:-1:-1;;;15946:79:13;;17124:2:504;15946:79:13;;;17106:21:504;;;17143:18;;;17136:30;17202:34;17182:18;;;17175:62;17254:18;;15946:79:13;16922:356:504;15946:79:13;16057:1;16039:4;:15;;;:19;16031:58;;;;-1:-1:-1;;;16031:58:13;;17485:2:504;16031:58:13;;;17467:21:504;17524:2;17504:18;;;17497:30;17563:28;17543:18;;;17536:56;17609:18;;16031:58:13;17283:350:504;16031:58:13;16360:4;:15;;;16346:11;;:29;;;;:::i;:::-;16324:19;;;:51;16430:15;;;;-1:-1:-1;;;;;16406:21:13;;;;;;:13;:21;;;;;;:39;;16430:15;16406:39;:::i;:::-;16382:21;;;:63;;;16527:19;;;;16513:11;:33;-1:-1:-1;;;;;16552:21:13;;;;;;:13;:21;;;;;;;;;:45;;;;16675:21;;;;16698:15;;;;;16662:52;;13732:51:504;;;13799:18;;;13792:34;;;;13842:18;;;13835:34;;;;16662:52:13;;13705:18:504;16662:52:13;;;;;;;16749:6;-1:-1:-1;;;;;16725:48:13;16742:4;-1:-1:-1;;;;;16725:48:13;-1:-1:-1;;;;;;;;;;;16757:4:13;:15;;;16725:48;;;;1403:25:504;;1391:2;1376:18;;1257:177;16725:48:13;;;;;;;;16815:11;;16861:21;;;;16884:15;;;;16815:85;;-1:-1:-1;;;16815:85:13;;16846:4;16815:85;;;16739:34:504;-1:-1:-1;;;;;16809:15:504;;;16789:18;;;16782:43;16841:18;;;16834:34;;;;16884:18;;;16877:34;;;;16815:11:13;;;;;;:22;;16673:19:504;;16815:85:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:14:13;;-1:-1:-1;16915:23:13;;-1:-1:-1;;16915:23:13;;16940:4;:21;;;16907:55;;;;;;13996:2971;;;;;;:::o;8016:262:23:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;12866:25:504;;;12922:2;12907:18;;12900:34;;;;12950:18;;12943:34;;;12854:2;12839:18;8140:49:23;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1280:213:16:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:16;;-1:-1:-1;1480:1:16;1443:39;;4229:119:25;4291:7;450:4;4313:19;4318:1;4321;:10;;;4313:4;:19::i;:::-;:30;;;;:::i;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1567:263:16:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:16;-1:-1:-1;1730:30:16;;1710:116;1789:26;1817:1;1781:38;;;;;;;24486:2981:13;24635:11;;:64;;-1:-1:-1;;;24635:64:13;;24565:7;;;;24635:11;;;;-1:-1:-1;;;;;24635:11:13;;:25;;:64;;24669:4;;24676:8;;24686:12;;24635:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:82;-1:-1:-1;24709:12:13;;24705:130;;24738:90;24749:27;24778:40;24820:7;24738:10;:90::i;:::-;24731:97;;;;;24705:130;24934:12;24912:18;;:34;24908:126;;24963:64;24968:22;24992:34;24963:4;:64::i;24908:126::-;25111:17;25131;:15;:17::i;:::-;25111:37;;25171:12;25159:9;:24;25155:126;;;25200:74;25205:29;25236:37;25200:4;:74::i;:::-;25193:81;;;;;;25155:126;25287:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:27:13;41519:4;25555:50;;-1:-1:-1;;;25555:50:13;;-1:-1:-1;;;;;3128:32:504;;;25555:50:13;;;3110:51:504;25555:40:13;;;;;;;3083:18:504;;25555:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25533:19;;;:72;;;25653:42;;25682:12;25653:7;:42::i;:::-;25627:22;;;25612:83;;;25613:4;25612:83;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;25721:18:13;;-1:-1:-1;25705:12:13;;:34;;;;;;;;:::i;:::-;;25701:227;;25764:157;25786:16;25814:64;25898:4;:12;;;25890:21;;;;;;;;:::i;25764:157::-;25749:172;;;;;;;25701:227;25997:11;;26043:22;;;;;25997:69;;-1:-1:-1;;;25997:69:13;;26036:4;25997:69;;;8633:51:504;8700:18;;;8693:34;;;;25997:11:13;;;;-1:-1:-1;;;;;25997:11:13;;:30;;8606:18:504;;25997:69:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25987:79;-1:-1:-1;26076:12:13;;26072:130;;26105:90;26116:27;26145:40;26187:7;26105:10;:90::i;26072:130::-;26247:35;26255:12;;26269;26247:7;:35::i;:::-;26223:20;;;26208:74;;;26209:4;26208:74;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;26308:18:13;;-1:-1:-1;26292:12:13;;:34;;;;;;;;:::i;:::-;;26288:178;;26351:108;26362:16;26380:55;26445:4;:12;;;26437:21;;;;;;;;:::i;26288:178::-;26679:22;;;;;-1:-1:-1;;;;;26642:24:13;;;;;;:14;:24;;;;;;:59;;;26748:11;;26707:38;;;;:52;26780:20;;;;26765:12;:35;27136:37;26657:8;27160:12;27136:13;:37::i;:::-;27249:22;;;;;27273:20;;;;;27218:76;;-1:-1:-1;;;;;18468:32:504;;18450:51;;18532:2;18517:18;;18510:34;;;18560:18;;;18553:34;;;;18603:18;;18596:34;27218:76:13;;18437:3:504;18422:19;27218:76:13;;;;;;;27447:14;27432:30;24486:2981;-1:-1:-1;;;;;;24486:2981:13:o;33827:3389::-;34062:11;;:138;;-1:-1:-1;;;34062:138:13;;34112:4;34062:138;;;13285:34:504;-1:-1:-1;;;;;13355:15:504;;;13335:18;;;13328:43;13407:15;;;13387:18;;;13380:43;13459:15;;;13439:18;;;13432:43;13491:19;;;13484:35;;;33980:7:13;;;;;;34062:11;;;;;;;;:34;;13219:19:504;;34062:138:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:156;-1:-1:-1;34210:12:13;;34206:138;;34240:93;34251:27;34280:43;34325:7;34240:10;:93::i;:::-;34335:1;34232:105;;;;;;;34206:138;34443:12;34421:18;;:34;34417:134;;34473:67;34478:22;34502:37;34473:4;:67::i;34417:134::-;34694:12;34652:16;-1:-1:-1;;;;;34645:43:13;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;34641:172;;34724:78;34729:22;34753:48;34724:4;:78::i;34641:172::-;34875:10;-1:-1:-1;;;;;34863:22:13;:8;-1:-1:-1;;;;;34863:22:13;;34859:133;;;34903:78;34908:26;34936:44;34903:4;:78::i;34859:133::-;35036:16;35032:135;;35070:86;35075:36;35113:42;35070:4;:86::i;35032:135::-;-1:-1:-1;;35212:11:13;:32;35208:155;;;35262:90;35267:36;35305:46;35262:4;:90::i;35208:155::-;35406:24;35432:25;35461:51;35478:10;35490:8;35500:11;35461:16;:51::i;:::-;35405:107;;-1:-1:-1;35405:107:13;-1:-1:-1;35522:43:13;;35518:154;;35583:78;35594:16;35588:23;;;;;;;;:::i;:::-;35613:47;35583:4;:78::i;:::-;35663:1;35575:90;;;;;;;;;35518:154;35908:11;;:117;;-1:-1:-1;;;35908:117:13;;35859:24;;;;35908:11;;;;-1:-1:-1;;;;;35908:11:13;;:41;;:117;;35965:4;;35978:16;;36002:17;;35908:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35858:167;;-1:-1:-1;35858:167:13;-1:-1:-1;36039:43:13;;36031:107;;;;-1:-1:-1;;;36031:107:13;;19093:2:504;36031:107:13;;;19075:21:504;19132:2;19112:18;;;19105:30;19171:34;19151:18;;;19144:62;-1:-1:-1;;;19222:18:504;;;19215:49;19281:19;;36031:107:13;18891:415:504;36031:107:13;36221:45;;-1:-1:-1;;;36221:45:13;;-1:-1:-1;;;;;3128:32:504;;;36221:45:13;;;3110:51:504;36270:11:13;;36221:35;;;;;;3083:18:504;;36221:45:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;36213:97;;;;-1:-1:-1;;;36213:97:13;;19513:2:504;36213:97:13;;;19495:21:504;19552:2;19532:18;;;19525:30;19591:26;19571:18;;;19564:54;19635:18;;36213:97:13;19311:348:504;36213:97:13;36428:18;-1:-1:-1;;;;;36456:33:13;;36484:4;36456:33;36452:229;;;36512:63;36534:4;36541:10;36553:8;36563:11;36512:13;:63::i;:::-;36499:76;;36452:229;;;36609:65;;-1:-1:-1;;;36609:65:13;;-1:-1:-1;;;;;36609:30:13;;;;;:65;;36640:10;;36652:8;;36662:11;;36609:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36596:78;;36452:229;36776:37;;36768:56;;;;-1:-1:-1;;;36768:56:13;;19866:2:504;36768:56:13;;;19848:21:504;19905:1;19885:18;;;19878:29;-1:-1:-1;;;19923:18:504;;;19916:36;19969:18;;36768:56:13;19664:329:504;36768:56:13;36878:87;;;-1:-1:-1;;;;;20313:15:504;;;20295:34;;20365:15;;;20360:2;20345:18;;20338:43;20397:18;;;20390:34;;;20460:15;;20455:2;20440:18;;20433:43;20507:3;20492:19;;20485:35;;;36878:87:13;;;;;;;20244:3:504;36878:87:13;;;37176:14;37160:51;-1:-1:-1;37193:17:13;;-1:-1:-1;;;;;;33827:3389:13;;;;;;;;:::o;2379:288:24:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:24;-1:-1:-1;2560:18:24;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:24;-1:-1:-1;2601:1:24;;-1:-1:-1;2588:15:24;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;18422:139:13:-;18487:11;18525:1;18513:8;:1;18517:4;18513:8;:::i;:::-;18512:14;;;;:::i;:::-;18506:20;-1:-1:-1;18536:5:13;18540:1;18536;:5;:::i;:::-;:10;18532:24;;18548:8;18555:1;18548:8;;:::i;3834:312:24:-;3925:9;3936:7;3952:13;3967:19;3990:31;4005:6;4013:7;3990:14;:31::i;4796:123:25:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:25;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:25:o;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:24:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:24;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:24;-1:-1:-1;2136:18:24;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:24;;;;;;;;;-1:-1:-1;2178:20:24;;2172:4;;-1:-1:-1;2178:20:24;-1:-1:-1;2164:35:24;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:24;;-1:-1:-1;1947:332:24;-1:-1:-1;;;;1947:332:24:o;3151:585::-;3234:9;3245:10;-1:-1:-1;;;;;;;;;;;;;;3245:10:24;3534:14;3550:17;3571:25;450:4:25;3589:6:24;3571:7;:25::i;:::-;3533:63;;-1:-1:-1;3533:63:24;-1:-1:-1;3614:18:24;3606:4;:26;;;;;;;;:::i;:::-;;3602:82;;-1:-1:-1;3656:20:24;;;;;;;;;-1:-1:-1;3656:20:24;;3650:4;;-1:-1:-1;3656:20:24;-1:-1:-1;3642:35:24;;3602:82;3696:35;3703:9;3714:7;:16;;;3696:6;:35::i;4923:243:25:-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:25;;5045:16;5041:45;;;-1:-1:-1;5078:1:25;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:25;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:25;;;;;;;;:::i;544:330:16:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:16;;-1:-1:-1;660:18:16;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:16;-1:-1:-1;833:30:16;;799:479:24;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:24;896:14;912:23;939:22;947:3;450:4:25;939:7:24;:22::i;:::-;895:66;;-1:-1:-1;895:66:24;-1:-1:-1;979:18:24;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:24;;;;;;;;;-1:-1:-1;1021:20:24;;1015:4;;-1:-1:-1;1021:20:24;-1:-1:-1;1007:35:24;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:24;-1:-1:-1;1141:18:24;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:24;;-1:-1:-1;799:479:24;-1:-1:-1;;;;;;799:479:24:o;958:198:16:-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:16;;-1:-1:-1;1102:1:16;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;14:131:504:-;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:504:o;470:597::-;582:4;611:2;640;629:9;622:21;672:6;666:13;715:6;710:2;699:9;695:18;688:34;740:1;750:140;764:6;761:1;758:13;750:140;;;859:14;;;855:23;;849:30;825:17;;;844:2;821:26;814:66;779:10;;750:140;;;908:6;905:1;902:13;899:91;;;978:1;973:2;964:6;953:9;949:22;945:31;938:42;899:91;-1:-1:-1;1051:2:504;1030:15;-1:-1:-1;;1026:29:504;1011:45;;;;1058:2;1007:54;;470:597;-1:-1:-1;;;470:597:504:o;1072:180::-;1131:6;1184:2;1172:9;1163:7;1159:23;1155:32;1152:52;;;1200:1;1197;1190:12;1152:52;-1:-1:-1;1223:23:504;;1072:180;-1:-1:-1;1072:180:504:o;1439:247::-;1498:6;1551:2;1539:9;1530:7;1526:23;1522:32;1519:52;;;1567:1;1564;1557:12;1519:52;1606:9;1593:23;1625:31;1650:5;1625:31;:::i;1880:127::-;1941:10;1936:3;1932:20;1929:1;1922:31;1972:4;1969:1;1962:15;1996:4;1993:1;1986:15;2012:921;2080:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:52;;;2149:1;2146;2139:12;2101:52;2189:9;2176:23;2218:18;2259:2;2251:6;2248:14;2245:34;;;2275:1;2272;2265:12;2245:34;2313:6;2302:9;2298:22;2288:32;;2358:7;2351:4;2347:2;2343:13;2339:27;2329:55;;2380:1;2377;2370:12;2329:55;2416:2;2403:16;2438:2;2434;2431:10;2428:36;;;2444:18;;:::i;:::-;2519:2;2513:9;2487:2;2573:13;;-1:-1:-1;;2569:22:504;;;2593:2;2565:31;2561:40;2549:53;;;2617:18;;;2637:22;;;2614:46;2611:72;;;2663:18;;:::i;:::-;2703:10;2699:2;2692:22;2738:2;2730:6;2723:18;2778:7;2773:2;2768;2764;2760:11;2756:20;2753:33;2750:53;;;2799:1;2796;2789:12;2750:53;2855:2;2850;2846;2842:11;2837:2;2829:6;2825:15;2812:46;2900:1;2878:15;;;2895:2;2874:24;2867:35;;;;-1:-1:-1;2882:6:504;2012:921;-1:-1:-1;;;;;2012:921:504:o;3380:657::-;3549:2;3601:21;;;3671:13;;3574:18;;;3693:22;;;3520:4;;3549:2;3772:15;;;;3746:2;3731:18;;;3520:4;3815:196;3829:6;3826:1;3823:13;3815:196;;;3894:13;;-1:-1:-1;;;;;;3890:40:504;3878:53;;3986:15;;;;3951:12;;;;3851:1;3844:9;3815:196;;;-1:-1:-1;4028:3:504;;3380:657;-1:-1:-1;;;;;;3380:657:504:o;4042:456::-;4119:6;4127;4135;4188:2;4176:9;4167:7;4163:23;4159:32;4156:52;;;4204:1;4201;4194:12;4156:52;4243:9;4230:23;4262:31;4287:5;4262:31;:::i;:::-;4312:5;-1:-1:-1;4369:2:504;4354:18;;4341:32;4382:33;4341:32;4382:33;:::i;:::-;4042:456;;4434:7;;-1:-1:-1;;;4488:2:504;4473:18;;;;4460:32;;4042:456::o;5188:::-;5265:6;5273;5281;5334:2;5322:9;5313:7;5309:23;5305:32;5302:52;;;5350:1;5347;5340:12;5302:52;5389:9;5376:23;5408:31;5433:5;5408:31;:::i;:::-;5458:5;-1:-1:-1;5510:2:504;5495:18;;5482:32;;-1:-1:-1;5566:2:504;5551:18;;5538:32;5579:33;5538:32;5579:33;:::i;:::-;5631:7;5621:17;;;5188:456;;;;;:::o;5982:380::-;6061:1;6057:12;;;;6104;;;6125:61;;6179:4;6171:6;6167:17;6157:27;;6125:61;6232:2;6224:6;6221:14;6201:18;6198:38;6195:161;;;6278:10;6273:3;6269:20;6266:1;6259:31;6313:4;6310:1;6303:15;6341:4;6338:1;6331:15;6367:481;-1:-1:-1;;;;;6652:15:504;;;6634:34;;6704:15;;;6699:2;6684:18;;6677:43;6756:15;;6751:2;6736:18;;6729:43;-1:-1:-1;;;;;;6808:33:504;;;6803:2;6788:18;;6781:61;6583:3;6568:19;;6367:481::o;6853:277::-;6920:6;6973:2;6961:9;6952:7;6948:23;6944:32;6941:52;;;6989:1;6986;6979:12;6941:52;7021:9;7015:16;7074:5;7067:13;7060:21;7053:5;7050:32;7040:60;;7096:1;7093;7086:12;7135:338;7337:2;7319:21;;;7376:2;7356:18;;;7349:30;-1:-1:-1;;;7410:2:504;7395:18;;7388:44;7464:2;7449:18;;7135:338::o;7890:184::-;7960:6;8013:2;8001:9;7992:7;7988:23;7984:32;7981:52;;;8029:1;8026;8019:12;7981:52;-1:-1:-1;8052:16:504;;7890:184;-1:-1:-1;7890:184:504:o;9467:259::-;9545:6;9598:2;9586:9;9577:7;9573:23;9569:32;9566:52;;;9614:1;9611;9604:12;9566:52;9646:9;9640:16;9665:31;9690:5;9665:31;:::i;9987:127::-;10048:10;10043:3;10039:20;10036:1;10029:31;10079:4;10076:1;10069:15;10103:4;10100:1;10093:15;10119:128;10159:3;10190:1;10186:6;10183:1;10180:13;10177:39;;;10196:18;;:::i;:::-;-1:-1:-1;10232:9:504;;10119:128::o;10252:127::-;10313:10;10308:3;10304:20;10301:1;10294:31;10344:4;10341:1;10334:15;10368:4;10365:1;10358:15;10384:135;10423:3;-1:-1:-1;;10444:17:504;;10441:43;;;10464:18;;:::i;:::-;-1:-1:-1;10511:1:504;10500:13;;10384:135::o;10524:178::-;10561:3;10605:4;10598:5;10594:16;10629:7;10619:41;;10640:18;;:::i;:::-;-1:-1:-1;;10676:20:504;;10524:178;-1:-1:-1;;10524:178:504:o;11064:125::-;11104:4;11132:1;11129;11126:8;11123:34;;;11137:18;;:::i;:::-;-1:-1:-1;11174:9:504;;11064:125::o;11194:127::-;11255:10;11250:3;11246:20;11243:1;11236:31;11286:4;11283:1;11276:15;11310:4;11307:1;11300:15;11326:375;-1:-1:-1;;;;;11584:15:504;;;11566:34;;11636:15;;;;11631:2;11616:18;;11609:43;11683:2;11668:18;;11661:34;;;;11516:2;11501:18;;11326:375::o;17962:127::-;18023:10;18018:3;18014:20;18011:1;18004:31;18054:4;18051:1;18044:15;18078:4;18075:1;18068:15;18094:120;18134:1;18160;18150:35;;18165:18;;:::i;:::-;-1:-1:-1;18199:9:504;;18094:120::o;18641:245::-;18720:6;18728;18781:2;18769:9;18760:7;18756:23;18752:32;18749:52;;;18797:1;18794;18787:12;18749:52;-1:-1:-1;;18820:16:504;;18876:2;18861:18;;;18855:25;18820:16;;18855:25;;-1:-1:-1;18641:245:504:o;20531:168::-;20571:7;20637:1;20633;20629:6;20625:14;20622:1;20619:21;20614:1;20607:9;20600:17;20596:45;20593:71;;;20644:18;;:::i;:::-;-1:-1:-1;20684:9:504;;20531:168::o;20704:112::-;20736:1;20762;20752:35;;20767:18;;:::i;:::-;-1:-1:-1;20801:9:504;;20704:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_becomeImplementation(bytes)": "56e67728", + "_getExtensionFunctions()": "89f8132e", + "_updatePlugin(address)": "19f496c8", + "_withdrawAdminFees(uint256)": "a7b820df", + "_withdrawIonicFees(uint256)": "b0d58e49", + "accrualBlockNumber()": "6c540baf", + "adminFeeMantissa()": "8d02d9a1", + "borrow(uint256)": "c5ebeaec", + "borrowIndex()": "aa5af0fd", + "comptroller()": "5fe3b567", + "contractType()": "cb2ef6f7", + "decimals()": "313ce567", + "delegateType()": "2c436e5b", + "feeSeizeShareMantissa()": "be99f119", + "getCash()": "3b1d21a2", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "liquidateBorrow(address,uint256,address)": "f5e3c462", + "mint(uint256)": "a0712d68", + "name()": "06fdde03", + "plugin()": "ef01df4f", + "protocolSeizeShareMantissa()": "6752e702", + "redeem(uint256)": "db006a75", + "redeemUnderlying(uint256)": "852a12e3", + "repayBorrow(uint256)": "0e752702", + "repayBorrowBehalf(address,uint256)": "2608f818", + "reserveFactorMantissa()": "173b9904", + "seize(address,address,uint256)": "b2a02ff1", + "selfTransferIn(address,uint256)": "135f1334", + "selfTransferOut(address,uint256)": "067db1b3", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/CErc20PluginRewardsDelegate.json b/packages/sdk/deployments/bob/CErc20PluginRewardsDelegate.json new file mode 100644 index 000000000..0bab84a32 --- /dev/null +++ b/packages/sdk/deployments/bob/CErc20PluginRewardsDelegate.json @@ -0,0 +1,2671 @@ +{ + "address": "0x8C58ECb9C0050824177f4e1Cd71C335421d4aeA2", + "abi": [ + { + "type": "function", + "name": "_becomeImplementation", + "inputs": [ + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "functionSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "_updatePlugin", + "inputs": [ + { + "name": "_plugin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_withdrawAdminFees", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_withdrawIonicFees", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "accrualBlockNumber", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "adminFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "_token", + "type": "address", + "internalType": "address" + }, + { + "name": "_spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "borrow", + "inputs": [ + { + "name": "borrowAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "borrowIndex", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "claim", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "comptroller", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "contractType", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "delegateType", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "feeSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCash", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "interestRateModel", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract InterestRateModel" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address payable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidateBorrow", + "inputs": [ + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mint", + "inputs": [ + { + "name": "mintAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "plugin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC4626" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "protocolSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redeem", + "inputs": [ + { + "name": "redeemTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redeemUnderlying", + "inputs": [ + { + "name": "redeemAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrow", + "inputs": [ + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrowBehalf", + "inputs": [ + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reserveFactorMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "seize", + "inputs": [ + { + "name": "liquidator", + "type": "address", + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "selfTransferIn", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "selfTransferOut", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalAdminFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBorrows", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalIonicFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalReserves", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "underlying", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "AccrueInterest", + "inputs": [ + { + "name": "cashPrior", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "interestAccumulated", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "borrowIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Borrow", + "inputs": [ + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrowAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "accountBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Failure", + "inputs": [ + { + "name": "error", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "info", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "detail", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LiquidateBorrow", + "inputs": [ + { + "name": "liquidator", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cTokenCollateral", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Mint", + "inputs": [ + { + "name": "minter", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "mintAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "mintTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAdminFee", + "inputs": [ + { + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewIonicFee", + "inputs": [ + { + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewMarketInterestRateModel", + "inputs": [ + { + "name": "oldInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + }, + { + "name": "newInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPluginImplementation", + "inputs": [ + { + "name": "oldImpl", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newImpl", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewReserveFactor", + "inputs": [ + { + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Redeem", + "inputs": [ + { + "name": "redeemer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "redeemAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "redeemTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RepayBorrow", + "inputs": [ + { + "name": "payer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "accountBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservesAdded", + "inputs": [ + { + "name": "benefactor", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "addAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newTotalReserves", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservesReduced", + "inputs": [ + { + "name": "admin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "reduceAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newTotalReserves", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x06e55e2d0c53e8f02f8f83188e238c61195e46a7f9ef966076e10af92c0d39af", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8C58ECb9C0050824177f4e1Cd71C335421d4aeA2", + "transactionIndex": 2, + "gasUsed": "4200758", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x3e43e4e2486c41c23bb71a1ea053eb3405e3b1ef08e57baf309a6e196ff694a2", + "transactionHash": "0x06e55e2d0c53e8f02f8f83188e238c61195e46a7f9ef966076e10af92c0d39af", + "logs": [], + "blockNumber": 3777806, + "cumulativeGasUsed": "4265661", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Borrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "LiquidateBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImpl", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newImpl", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPluginImplementation", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "redeemer", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Redeem", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "RepayBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "benefactor", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesReduced", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_plugin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_updatePlugin" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "claim" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "plugin", + "outputs": [ + { + "internalType": "contract IERC4626", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferOut" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_becomeImplementation(bytes)": { + "params": { + "data": "The encoded arguments for becoming" + } + }, + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_updatePlugin(address)": { + "params": { + "_plugin": "The address of the plugin implementation to use" + } + }, + "_withdrawAdminFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_withdrawIonicFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrow(uint256)": { + "params": { + "borrowAmount": "The amount of the underlying asset to borrow" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "getCash()": { + "returns": { + "_0": "The quantity of underlying asset owned by this contract" + } + }, + "liquidateBorrow(address,uint256,address)": { + "params": { + "borrower": "The borrower of this cToken to be liquidated", + "cTokenCollateral": "The market in which to seize collateral from the borrower", + "repayAmount": "The amount of the underlying borrowed asset to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "mint(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "mintAmount": "The amount of the underlying asset to supply" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeem(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemTokens": "The number of cTokens to redeem into underlying" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeemUnderlying(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemAmount": "The amount of underlying to redeem" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrow(uint256)": { + "params": { + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrowBehalf(address,uint256)": { + "params": { + "borrower": "the account with the debt being payed off", + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "seize(address,address,uint256)": { + "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.", + "params": { + "borrower": "The account having collateral seized", + "liquidator": "The account receiving seized collateral", + "seizeTokens": "The number of cTokens to seize" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_becomeImplementation(bytes)": { + "notice": "Delegate interface to become the implementation" + }, + "_updatePlugin(address)": { + "notice": "Update the plugin implementation to a whitelisted implementation" + }, + "_withdrawAdminFees(uint256)": { + "notice": "Accrues interest and reduces admin fees by transferring to admin" + }, + "_withdrawIonicFees(uint256)": { + "notice": "Accrues interest and reduces Ionic fees by transferring to Ionic" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "approve(address,address)": { + "notice": "token approval function" + }, + "borrow(uint256)": { + "notice": "Sender borrows assets from the protocol to their own address" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "claim()": { + "notice": "A reward token claim function to be overridden for use cases where rewardToken needs to be pulled in" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "getCash()": { + "notice": "Get cash balance of this cToken in the underlying asset" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "liquidateBorrow(address,uint256,address)": { + "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator." + }, + "mint(uint256)": { + "notice": "Sender supplies assets into the market and receives cTokens in exchange" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "plugin()": { + "notice": "Plugin address" + }, + "redeem(uint256)": { + "notice": "Sender redeems cTokens in exchange for the underlying asset" + }, + "redeemUnderlying(uint256)": { + "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset" + }, + "repayBorrow(uint256)": { + "notice": "Sender repays their own borrow" + }, + "repayBorrowBehalf(address,uint256)": { + "notice": "Sender repays a borrow belonging to borrower" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "seize(address,address,uint256)": { + "notice": "Transfers collateral tokens (this market) to the liquidator." + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CErc20PluginRewardsDelegate.sol": "CErc20PluginRewardsDelegate" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20PluginDelegate.sol": { + "keccak256": "0x095cc54097ac06a9b6232222c5197df72c4cc4a0f2c69261bf22ebba2dfead3f", + "urls": [ + "bzz-raw://5641c9c2222825360f0dedcd0706028c062ee42540e55f1088fb10b408d4ed9a", + "dweb:/ipfs/QmW1VLeKMfHNNvcst9uz5PD7QcJizVQ8iRApUE1NJDQ9e3" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20PluginRewardsDelegate.sol": { + "keccak256": "0x23501b22979946368a39d990fa507774877cd7eb6a42848d5376834f2fb5cf08", + "urls": [ + "bzz-raw://881651c1a1955b3925681fd3de442d73cb38a4b141233e7daf971b0e902444d1", + "dweb:/ipfs/QmRHBRmWgDYUANsVXxUnPcpD52PLSEbEtzz8CAPXKh53ib" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IERC4626.sol": { + "keccak256": "0x1dc7b6dc2f1202ca16bff4eb488bb5bfcd6a48202996663a7220a888b261d7cb", + "urls": [ + "bzz-raw://35f5dfa93bcb6e10c2b83a15fd376fcd57baba83d1a09e4ba300859b8cbda1be", + "dweb:/ipfs/QmbnBkjAsEn97WyATWGF8ftifX55S4efA9RYyiuFZ4juhP" + ], + "license": null + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50614b04806100206000396000f3fe608060405234801561001057600080fd5b50600436106102485760003560e01c8063852a12e31161013b578063b2a02ff1116100b8578063cb2ef6f71161007c578063cb2ef6f714610486578063db006a75146104bf578063ef01df4f146104d2578063f3fdb15a146104e5578063f5e3c462146104f857600080fd5b8063b2a02ff114610435578063be99f11914610448578063c3bf11cd14610457578063c5ebeaec14610460578063c91a424f1461047357600080fd5b80639826394b116100ff5780639826394b146103ea578063a0712d68146103f3578063a7b820df14610406578063aa5af0fd14610419578063b0d58e491461042257600080fd5b8063852a12e3146103a857806389f8132e146103bb5780638d02d9a1146103d05780638f840ddd146103d957806395d89b41146103e257600080fd5b80633b1d21a2116101c957806361feacff1161018d57806361feacff146103625780636752e7021461036b5780636c540baf146103795780636f307dc3146103825780637e5465ba1461039557600080fd5b80633b1d21a21461030e57806347bd3718146103165780634e71d92d1461026057806356e677281461031f5780635fe3b5671461033257600080fd5b806318160ddd1161021057806318160ddd146102bd57806319f496c8146102c65780632608f818146102d95780632c436e5b146102ec578063313ce5671461030157600080fd5b8063067db1b31461024d57806306fdde03146102625780630e75270214610280578063135f1334146102a1578063173b9904146102b4575b600080fd5b61026061025b366004614619565b61050b565b005b61026a610555565b6040516102779190614645565b60405180910390f35b61029361028e36600461469a565b6105e3565b604051908152602001610277565b6102936102af366004614619565b6106a0565b61029360085481565b610293600f5481565b6102606102d43660046146b3565b6106ec565b6102936102e7366004614619565b610a4a565b60045b60405160ff9091168152602001610277565b6003546102ef9060ff1681565b610293610b09565b610293600b5481565b61026061032d3660046146e6565b610b18565b60035461034a9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610277565b610293600d5481565b610293666379da05b6000081565b61029360095481565b60135461034a906001600160a01b031681565b6102606103a3366004614797565b610c76565b6102936103b636600461469a565b610d8d565b6103c3610e40565b60405161027791906147d0565b61029360065481565b610293600c5481565b61026a610ffa565b610293600e5481565b61029361040136600461469a565b611007565b61029361041436600461469a565b6110bc565b610293600a5481565b61029361043036600461469a565b61121a565b61029361044336600461481e565b61130d565b61029367016345785d8a000081565b61029360075481565b61029361046e36600461469a565b611331565b60005461034a906001600160a01b031681565b60408051808201909152601b81527f434572633230506c7567696e5265776172647344656c65676174650000000000602082015261026a565b6102936104cd36600461469a565b6113e4565b60145461034a906001600160a01b031681565b60045461034a906001600160a01b031681565b61029361050636600461485f565b611497565b3330146105475760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b610551828261155a565b5050565b60018054610562906148a1565b80601f016020809104026020016040519081016040528092919081815260200182805461058e906148a1565b80156105db5780601f106105b0576101008083540402835291602001916105db565b820191906000526020600020905b8154815290600101906020018083116105be57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106309261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190614909565b61068d5760405162461bcd60e51b815260040161053e9061492b565b6000610698836115d7565b509392505050565b60003330146106d95760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b604482015260640161053e565b6106e38383611668565b90505b92915050565b333014806106fd57506106fd61171e565b61075d5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f7560448201526a383230ba32a8363ab3b4b760a91b606482015260840161053e565b6014546000906001600160a01b03166107765781610783565b6014546001600160a01b03165b6014549091506001600160a01b03161580159061080a57506014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108079190614953565b15155b156108f4576014546040516370a0823160e01b81523060048201526001600160a01b039091169063ba0876529082906370a0823190602401602060405180830381865afa15801561085f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108839190614953565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190614953565b505b601480546001600160a01b0319166001600160a01b0384811691821790925560135460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190614909565b506013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f19190614953565b90508015610a0257610a028161189b565b604080516001600160a01b038085168252851660208201527fb32957d2794aaec3ea2c8852833af2192fe9fb518777de1f883e9e821781da75910160405180910390a1505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610a979261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015610ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad89190614909565b610af45760405162461bcd60e51b815260040161053e9061492b565b6000610b008484611910565b50949350505050565b6000610b136119a3565b905090565b33301480610b295750610b2961171e565b610b915760405162461bcd60e51b815260206004820152603360248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f6260448201527232b1b7b6b2a4b6b83632b6b2b73a30ba34b7b760691b606482015260840161053e565b600081806020019051810190610ba7919061496c565b90506001600160a01b038116158015610bca57506014546001600160a01b031615155b15610c42576000546014546040516381218ea960e01b81526001600160a01b0391821660048201529116906381218ea990602401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f919061496c565b90505b6001600160a01b03811615801590610c6857506014546001600160a01b03828116911614155b1561055157610551816106ec565b610c7e61171e565b610cb35760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b604482015260640161053e565b6013546001600160a01b03838116911614801590610cdf57506014546001600160a01b03838116911614155b610d145760405162461bcd60e51b815260206004820152600660248201526510ba37b5b2b760d11b604482015260640161053e565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af1158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614909565b505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610dda9261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190614909565b610e375760405162461bcd60e51b815260040161053e9061492b565b6106e682611a77565b606060026000610e4e611af4565b90508160ff168151610e60919061499f565b67ffffffffffffffff811115610e7857610e786146d0565b604051908082528060200260200182016040528015610ea1578160200160208202803683370190505b50925060005b8151811015610f0757818181518110610ec257610ec26149b7565b6020026020010151848281518110610edc57610edc6149b7565b6001600160e01b03199092166020928302919091019091015280610eff816149cd565b915050610ea7565b508051634e71d92d60e01b908490610f1e856149e8565b9450610f2d9060ff861661499f565b81518110610f3d57610f3d6149b7565b6001600160e01b0319909216602092830291909101909101528051633f2a32dd60e11b908490610f6c856149e8565b9450610f7b9060ff861661499f565b81518110610f8b57610f8b6149b7565b6001600160e01b03199092166020928302919091019091015260ff821615610ff55760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161053e565b505090565b60028054610562906148a1565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926110549261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110959190614909565b6110b15760405162461bcd60e51b815260040161053e9061492b565b600061069883611c20565b6000806110c881611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112c9190614953565b50436009541461114957611142600a6039611d61565b915061120b565b826111526119a3565b101561116457611142600e6038611d61565b600d5483111561117a576111426002603a611d61565b82600d546111889190614a05565b600d55600354604080516303e1469160e61b815290516112059261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff919061496c565b8461155a565b60005b91505b61121481611dda565b50919050565b60008061122681611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190614953565b5043600954146112a057611142600a6035611d61565b826112a96119a3565b10156112bb57611142600e6034611d61565b600e548311156112d15761114260026036611d61565b600083600e546112e19190614a05565b600e8190556000549091506112ff906001600160a01b03168561155a565b600092505061121481611dda565b6000600161131a81611c9d565b61132633868686611e5e565b915061069881611dda565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261137e9261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561139b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bf9190614909565b6113db5760405162461bcd60e51b815260040161053e9061492b565b6106e682612349565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926114319261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561144e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114729190614909565b61148e5760405162461bcd60e51b815260040161053e9061492b565b6106e6826123c4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926114e49261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190614909565b6115415760405162461bcd60e51b815260040161053e9061492b565b600061154e858585612441565b509150505b9392505050565b601454604051632d182be560e21b8152600481018390526001600160a01b0384811660248301523060448301529091169063b460af94906064016020604051808303816000875af11580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614953565b60008060006115e581611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116499190614953565b5061165533338661253b565b9250925061166281611dda565b50915091565b6013546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061169d90869030908790600401614a32565b6020604051808303816000875af11580156116bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e09190614909565b6117155760405162461bcd60e51b815260040161053e906020808252600490820152631cd95b9960e21b604082015260600190565b6112148261189b565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b919061496c565b6001600160a01b0316336001600160a01b03161480156118185750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118189190614909565b8061189557506000546001600160a01b0316331480156118955750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118959190614909565b91505090565b601454604051636e553f6560e01b8152600481018390523060248201526001600160a01b0390911690636e553f65906044016020604051808303816000875af11580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105519190614953565b600080600061191e81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561195e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119829190614953565b5061198e33868661253b565b9250925061199b81611dda565b509250929050565b6014546040516370a0823160e01b81523060048201526000916001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190614953565b6040518263ffffffff1660e01b8152600401611a3691815260200190565b602060405180830381865afa158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b139190614953565b600080611a8381611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190614953565b506112083360008561294a565b606060026000611b02612f92565b90508160ff168151611b14919061499f565b67ffffffffffffffff811115611b2c57611b2c6146d0565b604051908082528060200260200182016040528015611b55578160200160208202803683370190505b50925060005b8151811015611bbb57818181518110611b7657611b766149b7565b6020026020010151848281518110611b9057611b906149b7565b6001600160e01b03199092166020928302919091019091015280611bb3816149cd565b915050611b5b565b50805163ef01df4f60e01b908490611bd2856149e8565b9450611be19060ff861661499f565b81518110611bf157611bf16149b7565b6001600160e01b031990921660209283029190910190910152805163033e92d960e31b908490610f6c856149e8565b6000806000611c2e81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190614953565b50611655338561310c565b600054600160a01b900460ff16611ce35760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015260640161053e565b80611d5157600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611d9657611d96614a1c565b836061811115611da857611da8614a1c565b60408051928352602083019190915260009082015260600160405180910390a18260118111156106e3576106e3614a1c565b6000805460ff60a01b1916600160a01b17905580611e5b57600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4257600080fd5b505af1158015611e56573d6000803e3d6000fd5b505050505b50565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef69190614953565b90508015611f1357611f0b6003601d83613517565b915050612341565b846001600160a01b0316846001600160a01b03161415611f3957611f0b6006601e611d61565b611f9e604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611fc190856135b9565b6020830181905282826003811115611fdb57611fdb614a1c565b6003811115611fec57611fec614a1c565b905250600090508151600381111561200657612006614a1c565b146120365761202d6009601c8360000151600381111561202857612028614a1c565b613517565b92505050612341565b612055846040518060200160405280666379da05b600008152506135e4565b6080820152604080516020810190915267016345785d8a0000815261207b9085906135e4565b610140820181905260808201516120929086614a05565b61209c9190614a05565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121039190614953565b60c0820190815260408051602081019091529051815260808201516121289190613607565b60a0820152604080516020810190915260c0820151815261014082015161214f9190613607565b61016082015260a0810151600c54612167919061499f565b60e08201526101408101516080820151600f546121849190614a05565b61218e9190614a05565b610120820152610160810151600e546121a7919061499f565b6101008201526001600160a01b03861660009081526010602052604090205460608201516121d5919061361f565b60408301819052828260038111156121ef576121ef614a1c565b600381111561220057612200614a1c565b905250600090508151600381111561221a5761221a614a1c565b1461223c5761202d6009601b8360000151600381111561202857612028614a1c565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b1680825290849020929092556060850151925192835290929091600080516020614ad8833981519152910160405180910390a3306001600160a01b0316856001600160a01b0316600080516020614ad883398151915283608001516040516122e991815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061235581611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b99190614953565b506112083384613645565b6000806123d081611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124349190614953565b506112083384600061294a565b600080600061244f81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561248f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b39190614953565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156124f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125189190614953565b50612525338787876139e0565b9250925061253281611dda565b50935093915050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af11580156125a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cd9190614953565b905080156125ee576125e26003604383613517565b60009250925050612942565b4360095414612603576125e2600a6044611d61565b61264c6040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190614953565b60808201526000198514156126f85760808101516040820152612700565b604081018590525b61270e878260400151611668565b60e082018190526080820151612723916135b9565b60a083018190526020830182600381111561274057612740614a1c565b600381111561275157612751614a1c565b905250600090508160200151600381111561276e5761276e614a1c565b146127e15760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c4544000000000000606482015260840161053e565b6127f1600b548260e001516135b9565b60c083018190526020830182600381111561280e5761280e614a1c565b600381111561281f5761281f614a1c565b905250600090508160200151600381111561283c5761283c614a1c565b146128a35760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b606482015260840161053e565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b6000821580612957575081155b6129a35760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e740000000000000000604482015260640161053e565b6129e46040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a469190614953565b60408201528315612b095761138884600f54612a629190614a05565b1015612a6e57600f5493505b6060810184905260408051602081018252908201518152612a8f9085613e9d565b6080830181905260208301826003811115612aac57612aac614a1c565b6003811115612abd57612abd614a1c565b9052506000905081602001516003811115612ada57612ada614a1c565b14612b0457612afc6009602c8360200151600381111561202857612028614a1c565b915050611553565b612c51565b600019831415612b9757600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b949190614953565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb9190614953565b90506103e8612c0a8583614a05565b1015612c14578093505b612c22848360400151613eef565b60608301819052600f546103e891612c3991614a05565b1015612c4857600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612c8f9130918b9190600401614a32565b6020604051808303816000875af1158015612cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd29190614953565b90508015612cf057612ce76003602b83613517565b92505050611553565b4360095414612d0557612ce7600a602f611d61565b612d15600f5483606001516135b9565b60a0840181905260208401826003811115612d3257612d32614a1c565b6003811115612d4357612d43614a1c565b9052506000905082602001516003811115612d6057612d60614a1c565b14612d8257612ce7600960318460200151600381111561202857612028614a1c565b6001600160a01b0386166000908152601060205260409020546060830151612daa91906135b9565b60c0840181905260208401826003811115612dc757612dc7614a1c565b6003811115612dd857612dd8614a1c565b9052506000905082602001516003811115612df557612df5614a1c565b14612e1757612ce7600960308460200151600381111561202857612028614a1c565b8160800151612e246119a3565b1015612e3657612ce7600e6032611d61565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612e6c90879061155a565b306001600160a01b0316866001600160a01b0316600080516020614ad88339815191528460600151604051612ea391815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612f6757600080fd5b505af1158015612f7b573d6000803e3d6000fd5b5060009250612f88915050565b9695505050505050565b606060036000612fa0613f2a565b90508160ff168151612fb2919061499f565b67ffffffffffffffff811115612fca57612fca6146d0565b604051908082528060200260200182016040528015612ff3578160200160208202803683370190505b50925060005b815181101561305957818181518110613014576130146149b7565b602002602001015184828151811061302e5761302e6149b7565b6001600160e01b03199092166020928302919091019091015280613051816149cd565b915050612ff9565b50805163cb2ef6f760e01b908490613070856149e8565b945061307f9060ff861661499f565b8151811061308f5761308f6149b7565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b9084906130be856149e8565b94506130cd9060ff861661499f565b815181106130dd576130dd6149b7565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610f6c856149e8565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e19061314a90309089908990600401614a32565b6020604051808303816000875af1158015613169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318d9190614953565b905080156131ae576131a26003602183613517565b60009250925050613510565b43600954146131c3576131a2600a6024611d61565b6132046040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132669190614953565b60408201526132758686611668565b60c082018190526040805160208101825290830151815261329691906142f2565b60608301819052602083018260038111156132b3576132b3614a1c565b60038111156132c4576132c4614a1c565b90525060009050816020015160038111156132e1576132e1614a1c565b1461332e5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c4544604482015260640161053e565b60008160600151116133825760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a4543544544000000000000604482015260640161053e565b8060600151600f54613394919061499f565b608082015260608101516001600160a01b0387166000908152601060205260409020546133c1919061499f565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b0316600080516020614ad8833981519152836060015160405161347091815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b1580156134e357600080fd5b505af11580156134f7573d6000803e3d6000fd5b5060009250613504915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561354c5761354c614a1c565b84606181111561355e5761355e614a1c565b604080519283526020830191909152810184905260600160405180910390a1600384601181111561359157613591614a1c565b146135ad578360118111156135a8576135a8614a1c565b612341565b612341826103e861499f565b6000808383116135d85760006135cf8486614a05565b91509150613510565b50600390506000613510565b6000670de0b6b3a76400006135fd848460000151614302565b6106e39190614a6c565b6000806136148484614344565b905061234181614375565b60008083830184811061363757600092509050613510565b600260009250925050613510565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c9061368290309088908890600401614a32565b6020604051808303816000875af11580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c59190614953565b905080156136e2576136da6003601083613517565b9150506106e6565b43600954146136f7576136da600a600c611d61565b60006137016119a3565b90508381101561372057613717600e600b611d61565b925050506106e6565b61374c604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa158015613795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b99190614953565b602082018190526137ca908661361f565b60408301819052828260038111156137e4576137e4614a1c565b60038111156137f5576137f5614a1c565b905250600090508151600381111561380f5761380f614a1c565b1461383b576138316009600e8360000151600381111561202857612028614a1c565b93505050506106e6565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa158015613894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b89190614953565b925082156138cd576138316003601085613517565b6138d9600b548661361f565b60608301819052828260038111156138f3576138f3614a1c565b600381111561390457613904614a1c565b905250600090508151600381111561391e5761391e614a1c565b14613940576138316009600d8360000151600381111561202857612028614a1c565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b5561397c868661155a565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7a9190614953565b90508015613a9b57613a8f6003601483613517565b60009250925050613e94565b4360095414613ab057613a8f600a6018611d61565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b139190614953565b14613b2457613a8f600a6013611d61565b866001600160a01b0316866001600160a01b03161415613b4a57613a8f60066019611d61565b84613b5b57613a8f60076017611d61565b600019851415613b7157613a8f60076016611d61565b600080613b7f89898961253b565b90925090508115613bb457613ba6826011811115613b9f57613b9f614a1c565b601a611d61565b600094509450505050613e94565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b90613bf19030908c908890600401614a32565b6040805180830381865afa158015613c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c319190614a80565b90925090508115613ca05760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161053e565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0d9190614953565b1015613d5b5760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161053e565b60006001600160a01b038916301415613d8157613d7a308d8d85611e5e565b9050613df7565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613db1908f908f908790600401614a32565b6020604051808303816000875af1158015613dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df49190614953565b90505b8015613e2e5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b604482015260640161053e565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b600080600080613ead868661438d565b90925090506000826003811115613ec657613ec6614a1c565b14613ed75750915060009050613510565b6000613ee282614375565b9350935050509250929050565b600081613f0484670de0b6b3a7640000614aa4565b613f0e9190614a6c565b9050613f1a8284614ac3565b156106e6576106e360018261499f565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81613f66846149e8565b93508360ff1681518110613f7c57613f7c6149b7565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81613fa7846149e8565b93508360ff1681518110613fbd57613fbd6149b7565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81613fe8846149e8565b93508360ff1681518110613ffe57613ffe6149b7565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b81614029846149e8565b93508360ff168151811061403f5761403f6149b7565b6001600160e01b03199092166020928302919091019091015263073a938160e11b8161406a846149e8565b93508360ff1681518110614080576140806149b7565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b816140ab846149e8565b93508360ff16815181106140c1576140c16149b7565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b816140ec846149e8565b93508360ff1681518110614102576141026149b7565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b8161412d846149e8565b93508360ff1681518110614143576141436149b7565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b8161416e846149e8565b93508360ff1681518110614184576141846149b7565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816141af846149e8565b93508360ff16815181106141c5576141c56149b7565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816141f0846149e8565b93508360ff1681518110614206576142066149b7565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b81614231846149e8565b93508360ff1681518110614247576142476149b7565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b81614272846149e8565b93508360ff1681518110614288576142886149b7565b6001600160e01b03199092166020928302919091019091015260ff8216156106e65760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161053e565b600080600080613ead8686614409565b60006106e383836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061447c565b604080516020810190915260008152604051806020016040528061436c856000015185614302565b90529392505050565b80516000906106e690670de0b6b3a764000090614a6c565b60006143a56040518060200160405280600081525090565b6000806143b68660000151866144cf565b909250905060008260038111156143cf576143cf614a1c565b146143ee57506040805160208101909152600081529092509050613510565b60408051602081019091529081526000969095509350505050565b60006144216040518060200160405280600081525090565b600080614436670de0b6b3a7640000876144cf565b9092509050600082600381111561444f5761444f614a1c565b1461446e57506040805160208101909152600081529092509050613510565b613ee281866000015161450e565b6000831580614489575082155b1561449657506000611553565b60006144a28486614aa4565b9050836144af8683614a6c565b148390610b005760405162461bcd60e51b815260040161053e9190614645565b600080836144e257506000905080613510565b838302836144f08683614a6c565b1461450357600260009250925050613510565b600092509050613510565b60006145266040518060200160405280600081525090565b60008061453b86670de0b6b3a76400006144cf565b9092509050600082600381111561455457614554614a1c565b1461457357506040805160208101909152600081529092509050613510565b60008061458083886145d9565b9092509050600082600381111561459957614599614a1c565b146145bc5781604051806020016040528060008152509550955050505050613510565b604080516020810190915290815260009890975095505050505050565b600080826145ed5750600190506000613510565b60006145f98486614a6c565b915091509250929050565b6001600160a01b0381168114611e5b57600080fd5b6000806040838503121561462c57600080fd5b823561463781614604565b946020939093013593505050565b600060208083528351808285015260005b8181101561467257858101830151858201604001528201614656565b81811115614684576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156146ac57600080fd5b5035919050565b6000602082840312156146c557600080fd5b813561155381614604565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156146f857600080fd5b813567ffffffffffffffff8082111561471057600080fd5b818401915084601f83011261472457600080fd5b813581811115614736576147366146d0565b604051601f8201601f19908116603f0116810190838211818310171561475e5761475e6146d0565b8160405282815287602084870101111561477757600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156147aa57600080fd5b82356147b581614604565b915060208301356147c581614604565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156148125783516001600160e01b031916835292840192918401916001016147ec565b50909695505050505050565b60008060006060848603121561483357600080fd5b833561483e81614604565b9250602084013561484e81614604565b929592945050506040919091013590565b60008060006060848603121561487457600080fd5b833561487f81614604565b925060208401359150604084013561489681614604565b809150509250925092565b600181811c908216806148b557607f821691505b6020821081141561121457634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561491b57600080fd5b8151801515811461155357600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60006020828403121561496557600080fd5b5051919050565b60006020828403121561497e57600080fd5b815161155381614604565b634e487b7160e01b600052601160045260246000fd5b600082198211156149b2576149b2614989565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156149e1576149e1614989565b5060010190565b600060ff8216806149fb576149fb614989565b6000190192915050565b600082821015614a1757614a17614989565b500390565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082614a7b57614a7b614a56565b500490565b60008060408385031215614a9357600080fd5b505080516020909101519092909150565b6000816000190483118215151615614abe57614abe614989565b500290565b600082614ad257614ad2614a56565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "103:1387:11:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106102485760003560e01c8063852a12e31161013b578063b2a02ff1116100b8578063cb2ef6f71161007c578063cb2ef6f714610486578063db006a75146104bf578063ef01df4f146104d2578063f3fdb15a146104e5578063f5e3c462146104f857600080fd5b8063b2a02ff114610435578063be99f11914610448578063c3bf11cd14610457578063c5ebeaec14610460578063c91a424f1461047357600080fd5b80639826394b116100ff5780639826394b146103ea578063a0712d68146103f3578063a7b820df14610406578063aa5af0fd14610419578063b0d58e491461042257600080fd5b8063852a12e3146103a857806389f8132e146103bb5780638d02d9a1146103d05780638f840ddd146103d957806395d89b41146103e257600080fd5b80633b1d21a2116101c957806361feacff1161018d57806361feacff146103625780636752e7021461036b5780636c540baf146103795780636f307dc3146103825780637e5465ba1461039557600080fd5b80633b1d21a21461030e57806347bd3718146103165780634e71d92d1461026057806356e677281461031f5780635fe3b5671461033257600080fd5b806318160ddd1161021057806318160ddd146102bd57806319f496c8146102c65780632608f818146102d95780632c436e5b146102ec578063313ce5671461030157600080fd5b8063067db1b31461024d57806306fdde03146102625780630e75270214610280578063135f1334146102a1578063173b9904146102b4575b600080fd5b61026061025b366004614619565b61050b565b005b61026a610555565b6040516102779190614645565b60405180910390f35b61029361028e36600461469a565b6105e3565b604051908152602001610277565b6102936102af366004614619565b6106a0565b61029360085481565b610293600f5481565b6102606102d43660046146b3565b6106ec565b6102936102e7366004614619565b610a4a565b60045b60405160ff9091168152602001610277565b6003546102ef9060ff1681565b610293610b09565b610293600b5481565b61026061032d3660046146e6565b610b18565b60035461034a9061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610277565b610293600d5481565b610293666379da05b6000081565b61029360095481565b60135461034a906001600160a01b031681565b6102606103a3366004614797565b610c76565b6102936103b636600461469a565b610d8d565b6103c3610e40565b60405161027791906147d0565b61029360065481565b610293600c5481565b61026a610ffa565b610293600e5481565b61029361040136600461469a565b611007565b61029361041436600461469a565b6110bc565b610293600a5481565b61029361043036600461469a565b61121a565b61029361044336600461481e565b61130d565b61029367016345785d8a000081565b61029360075481565b61029361046e36600461469a565b611331565b60005461034a906001600160a01b031681565b60408051808201909152601b81527f434572633230506c7567696e5265776172647344656c65676174650000000000602082015261026a565b6102936104cd36600461469a565b6113e4565b60145461034a906001600160a01b031681565b60045461034a906001600160a01b031681565b61029361050636600461485f565b611497565b3330146105475760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b610551828261155a565b5050565b60018054610562906148a1565b80601f016020809104026020016040519081016040528092919081815260200182805461058e906148a1565b80156105db5780601f106105b0576101008083540402835291602001916105db565b820191906000526020600020905b8154815290600101906020018083116105be57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106309261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561064d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106719190614909565b61068d5760405162461bcd60e51b815260040161053e9061492b565b6000610698836115d7565b509392505050565b60003330146106d95760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b604482015260640161053e565b6106e38383611668565b90505b92915050565b333014806106fd57506106fd61171e565b61075d5760405162461bcd60e51b815260206004820152602b60248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f7560448201526a383230ba32a8363ab3b4b760a91b606482015260840161053e565b6014546000906001600160a01b03166107765781610783565b6014546001600160a01b03165b6014549091506001600160a01b03161580159061080a57506014546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa1580156107e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108079190614953565b15155b156108f4576014546040516370a0823160e01b81523060048201526001600160a01b039091169063ba0876529082906370a0823190602401602060405180830381865afa15801561085f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108839190614953565b6040516001600160e01b031960e084901b1681526004810191909152306024820181905260448201526064016020604051808303816000875af11580156108ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f29190614953565b505b601480546001600160a01b0319166001600160a01b0384811691821790925560135460405163095ea7b360e01b8152600481019290925260001960248301529091169063095ea7b3906044016020604051808303816000875af115801561095f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109839190614909565b506013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156109cd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f19190614953565b90508015610a0257610a028161189b565b604080516001600160a01b038085168252851660208201527fb32957d2794aaec3ea2c8852833af2192fe9fb518777de1f883e9e821781da75910160405180910390a1505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610a979261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015610ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ad89190614909565b610af45760405162461bcd60e51b815260040161053e9061492b565b6000610b008484611910565b50949350505050565b6000610b136119a3565b905090565b33301480610b295750610b2961171e565b610b915760405162461bcd60e51b815260206004820152603360248201527f6f6e6c792073656c6620616e642061646d696e732063616e2063616c6c205f6260448201527232b1b7b6b2a4b6b83632b6b2b73a30ba34b7b760691b606482015260840161053e565b600081806020019051810190610ba7919061496c565b90506001600160a01b038116158015610bca57506014546001600160a01b031615155b15610c42576000546014546040516381218ea960e01b81526001600160a01b0391821660048201529116906381218ea990602401602060405180830381865afa158015610c1b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c3f919061496c565b90505b6001600160a01b03811615801590610c6857506014546001600160a01b03828116911614155b1561055157610551816106ec565b610c7e61171e565b610cb35760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b604482015260640161053e565b6013546001600160a01b03838116911614801590610cdf57506014546001600160a01b03838116911614155b610d145760405162461bcd60e51b815260206004820152600660248201526510ba37b5b2b760d11b604482015260640161053e565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af1158015610d64573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614909565b505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610dda9261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015610df7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1b9190614909565b610e375760405162461bcd60e51b815260040161053e9061492b565b6106e682611a77565b606060026000610e4e611af4565b90508160ff168151610e60919061499f565b67ffffffffffffffff811115610e7857610e786146d0565b604051908082528060200260200182016040528015610ea1578160200160208202803683370190505b50925060005b8151811015610f0757818181518110610ec257610ec26149b7565b6020026020010151848281518110610edc57610edc6149b7565b6001600160e01b03199092166020928302919091019091015280610eff816149cd565b915050610ea7565b508051634e71d92d60e01b908490610f1e856149e8565b9450610f2d9060ff861661499f565b81518110610f3d57610f3d6149b7565b6001600160e01b0319909216602092830291909101909101528051633f2a32dd60e11b908490610f6c856149e8565b9450610f7b9060ff861661499f565b81518110610f8b57610f8b6149b7565b6001600160e01b03199092166020928302919091019091015260ff821615610ff55760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161053e565b505090565b60028054610562906148a1565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926110549261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015611071573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110959190614909565b6110b15760405162461bcd60e51b815260040161053e9061492b565b600061069883611c20565b6000806110c881611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611108573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061112c9190614953565b50436009541461114957611142600a6039611d61565b915061120b565b826111526119a3565b101561116457611142600e6038611d61565b600d5483111561117a576111426002603a611d61565b82600d546111889190614a05565b600d55600354604080516303e1469160e61b815290516112059261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa1580156111db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ff919061496c565b8461155a565b60005b91505b61121481611dda565b50919050565b60008061122681611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611266573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061128a9190614953565b5043600954146112a057611142600a6035611d61565b826112a96119a3565b10156112bb57611142600e6034611d61565b600e548311156112d15761114260026036611d61565b600083600e546112e19190614a05565b600e8190556000549091506112ff906001600160a01b03168561155a565b600092505061121481611dda565b6000600161131a81611c9d565b61132633868686611e5e565b915061069881611dda565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261137e9261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561139b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113bf9190614909565b6113db5760405162461bcd60e51b815260040161053e9061492b565b6106e682612349565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926114319261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa15801561144e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114729190614909565b61148e5760405162461bcd60e51b815260040161053e9061492b565b6106e6826123c4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926114e49261010090910490911690339030906001600160e01b0319883516906004016148d6565b602060405180830381865afa158015611501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115259190614909565b6115415760405162461bcd60e51b815260040161053e9061492b565b600061154e858585612441565b509150505b9392505050565b601454604051632d182be560e21b8152600481018390526001600160a01b0384811660248301523060448301529091169063b460af94906064016020604051808303816000875af11580156115b3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d889190614953565b60008060006115e581611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611625573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116499190614953565b5061165533338661253b565b9250925061166281611dda565b50915091565b6013546040516323b872dd60e01b81526000916001600160a01b0316906323b872dd9061169d90869030908790600401614a32565b6020604051808303816000875af11580156116bc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e09190614909565b6117155760405162461bcd60e51b815260040161053e906020808252600490820152631cd95b9960e21b604082015260600190565b6112148261189b565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611777573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061179b919061496c565b6001600160a01b0316336001600160a01b03161480156118185750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156117f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118189190614909565b8061189557506000546001600160a01b0316331480156118955750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118959190614909565b91505090565b601454604051636e553f6560e01b8152600481018390523060248201526001600160a01b0390911690636e553f65906044016020604051808303816000875af11580156118ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105519190614953565b600080600061191e81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561195e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119829190614953565b5061198e33868661253b565b9250925061199b81611dda565b509250929050565b6014546040516370a0823160e01b81523060048201526000916001600160a01b031690634cdad5069082906370a0823190602401602060405180830381865afa1580156119f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a189190614953565b6040518263ffffffff1660e01b8152600401611a3691815260200190565b602060405180830381865afa158015611a53573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b139190614953565b600080611a8381611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ac3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ae79190614953565b506112083360008561294a565b606060026000611b02612f92565b90508160ff168151611b14919061499f565b67ffffffffffffffff811115611b2c57611b2c6146d0565b604051908082528060200260200182016040528015611b55578160200160208202803683370190505b50925060005b8151811015611bbb57818181518110611b7657611b766149b7565b6020026020010151848281518110611b9057611b906149b7565b6001600160e01b03199092166020928302919091019091015280611bb3816149cd565b915050611b5b565b50805163ef01df4f60e01b908490611bd2856149e8565b9450611be19060ff861661499f565b81518110611bf157611bf16149b7565b6001600160e01b031990921660209283029190910190910152805163033e92d960e31b908490610f6c856149e8565b6000806000611c2e81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611c6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c929190614953565b50611655338561310c565b600054600160a01b900460ff16611ce35760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b604482015260640161053e565b80611d5157600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611d3857600080fd5b505af1158015611d4c573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611d9657611d96614a1c565b836061811115611da857611da8614a1c565b60408051928352602083019190915260009082015260600160405180910390a18260118111156106e3576106e3614a1c565b6000805460ff60a01b1916600160a01b17905580611e5b57600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611e4257600080fd5b505af1158015611e56573d6000803e3d6000fd5b505050505b50565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611ed2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ef69190614953565b90508015611f1357611f0b6003601d83613517565b915050612341565b846001600160a01b0316846001600160a01b03161415611f3957611f0b6006601e611d61565b611f9e604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611fc190856135b9565b6020830181905282826003811115611fdb57611fdb614a1c565b6003811115611fec57611fec614a1c565b905250600090508151600381111561200657612006614a1c565b146120365761202d6009601c8360000151600381111561202857612028614a1c565b613517565b92505050612341565b612055846040518060200160405280666379da05b600008152506135e4565b6080820152604080516020810190915267016345785d8a0000815261207b9085906135e4565b610140820181905260808201516120929086614a05565b61209c9190614a05565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156120df573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121039190614953565b60c0820190815260408051602081019091529051815260808201516121289190613607565b60a0820152604080516020810190915260c0820151815261014082015161214f9190613607565b61016082015260a0810151600c54612167919061499f565b60e08201526101408101516080820151600f546121849190614a05565b61218e9190614a05565b610120820152610160810151600e546121a7919061499f565b6101008201526001600160a01b03861660009081526010602052604090205460608201516121d5919061361f565b60408301819052828260038111156121ef576121ef614a1c565b600381111561220057612200614a1c565b905250600090508151600381111561221a5761221a614a1c565b1461223c5761202d6009601b8360000151600381111561202857612028614a1c565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b1680825290849020929092556060850151925192835290929091600080516020614ad8833981519152910160405180910390a3306001600160a01b0316856001600160a01b0316600080516020614ad883398151915283608001516040516122e991815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b60008061235581611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612395573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b99190614953565b506112083384613645565b6000806123d081611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612410573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124349190614953565b506112083384600061294a565b600080600061244f81611c9d565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561248f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b39190614953565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156124f4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125189190614953565b50612525338787876139e0565b9250925061253281611dda565b50935093915050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af11580156125a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125cd9190614953565b905080156125ee576125e26003604383613517565b60009250925050612942565b4360095414612603576125e2600a6044611d61565b61264c6040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190614953565b60808201526000198514156126f85760808101516040820152612700565b604081018590525b61270e878260400151611668565b60e082018190526080820151612723916135b9565b60a083018190526020830182600381111561274057612740614a1c565b600381111561275157612751614a1c565b905250600090508160200151600381111561276e5761276e614a1c565b146127e15760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c4544000000000000606482015260840161053e565b6127f1600b548260e001516135b9565b60c083018190526020830182600381111561280e5761280e614a1c565b600381111561281f5761281f614a1c565b905250600090508160200151600381111561283c5761283c614a1c565b146128a35760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b606482015260840161053e565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b6000821580612957575081155b6129a35760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e740000000000000000604482015260640161053e565b6129e46040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a469190614953565b60408201528315612b095761138884600f54612a629190614a05565b1015612a6e57600f5493505b6060810184905260408051602081018252908201518152612a8f9085613e9d565b6080830181905260208301826003811115612aac57612aac614a1c565b6003811115612abd57612abd614a1c565b9052506000905081602001516003811115612ada57612ada614a1c565b14612b0457612afc6009602c8360200151600381111561202857612028614a1c565b915050611553565b612c51565b600019831415612b9757600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b949190614953565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bfb9190614953565b90506103e8612c0a8583614a05565b1015612c14578093505b612c22848360400151613eef565b60608301819052600f546103e891612c3991614a05565b1015612c4857600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612c8f9130918b9190600401614a32565b6020604051808303816000875af1158015612cae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cd29190614953565b90508015612cf057612ce76003602b83613517565b92505050611553565b4360095414612d0557612ce7600a602f611d61565b612d15600f5483606001516135b9565b60a0840181905260208401826003811115612d3257612d32614a1c565b6003811115612d4357612d43614a1c565b9052506000905082602001516003811115612d6057612d60614a1c565b14612d8257612ce7600960318460200151600381111561202857612028614a1c565b6001600160a01b0386166000908152601060205260409020546060830151612daa91906135b9565b60c0840181905260208401826003811115612dc757612dc7614a1c565b6003811115612dd857612dd8614a1c565b9052506000905082602001516003811115612df557612df5614a1c565b14612e1757612ce7600960308460200151600381111561202857612028614a1c565b8160800151612e246119a3565b1015612e3657612ce7600e6032611d61565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612e6c90879061155a565b306001600160a01b0316866001600160a01b0316600080516020614ad88339815191528460600151604051612ea391815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612f6757600080fd5b505af1158015612f7b573d6000803e3d6000fd5b5060009250612f88915050565b9695505050505050565b606060036000612fa0613f2a565b90508160ff168151612fb2919061499f565b67ffffffffffffffff811115612fca57612fca6146d0565b604051908082528060200260200182016040528015612ff3578160200160208202803683370190505b50925060005b815181101561305957818181518110613014576130146149b7565b602002602001015184828151811061302e5761302e6149b7565b6001600160e01b03199092166020928302919091019091015280613051816149cd565b915050612ff9565b50805163cb2ef6f760e01b908490613070856149e8565b945061307f9060ff861661499f565b8151811061308f5761308f6149b7565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b9084906130be856149e8565b94506130cd9060ff861661499f565b815181106130dd576130dd6149b7565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610f6c856149e8565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e19061314a90309089908990600401614a32565b6020604051808303816000875af1158015613169573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318d9190614953565b905080156131ae576131a26003602183613517565b60009250925050613510565b43600954146131c3576131a2600a6024611d61565b6132046040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132669190614953565b60408201526132758686611668565b60c082018190526040805160208101825290830151815261329691906142f2565b60608301819052602083018260038111156132b3576132b3614a1c565b60038111156132c4576132c4614a1c565b90525060009050816020015160038111156132e1576132e1614a1c565b1461332e5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c4544604482015260640161053e565b60008160600151116133825760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a4543544544000000000000604482015260640161053e565b8060600151600f54613394919061499f565b608082015260608101516001600160a01b0387166000908152601060205260409020546133c1919061499f565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b0316600080516020614ad8833981519152836060015160405161347091815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b1580156134e357600080fd5b505af11580156134f7573d6000803e3d6000fd5b5060009250613504915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561354c5761354c614a1c565b84606181111561355e5761355e614a1c565b604080519283526020830191909152810184905260600160405180910390a1600384601181111561359157613591614a1c565b146135ad578360118111156135a8576135a8614a1c565b612341565b612341826103e861499f565b6000808383116135d85760006135cf8486614a05565b91509150613510565b50600390506000613510565b6000670de0b6b3a76400006135fd848460000151614302565b6106e39190614a6c565b6000806136148484614344565b905061234181614375565b60008083830184811061363757600092509050613510565b600260009250925050613510565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c9061368290309088908890600401614a32565b6020604051808303816000875af11580156136a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136c59190614953565b905080156136e2576136da6003601083613517565b9150506106e6565b43600954146136f7576136da600a600c611d61565b60006137016119a3565b90508381101561372057613717600e600b611d61565b925050506106e6565b61374c604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa158015613795573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137b99190614953565b602082018190526137ca908661361f565b60408301819052828260038111156137e4576137e4614a1c565b60038111156137f5576137f5614a1c565b905250600090508151600381111561380f5761380f614a1c565b1461383b576138316009600e8360000151600381111561202857612028614a1c565b93505050506106e6565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa158015613894573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906138b89190614953565b925082156138cd576138316003601085613517565b6138d9600b548661361f565b60608301819052828260038111156138f3576138f3614a1c565b600381111561390457613904614a1c565b905250600090508151600381111561391e5761391e614a1c565b14613940576138316009600d8360000151600381111561202857612028614a1c565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b5561397c868661155a565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af1158015613a56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a7a9190614953565b90508015613a9b57613a8f6003601483613517565b60009250925050613e94565b4360095414613ab057613a8f600a6018611d61565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015613aef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b139190614953565b14613b2457613a8f600a6013611d61565b866001600160a01b0316866001600160a01b03161415613b4a57613a8f60066019611d61565b84613b5b57613a8f60076017611d61565b600019851415613b7157613a8f60076016611d61565b600080613b7f89898961253b565b90925090508115613bb457613ba6826011811115613b9f57613b9f614a1c565b601a611d61565b600094509450505050613e94565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b90613bf19030908c908890600401614a32565b6040805180830381865afa158015613c0d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c319190614a80565b90925090508115613ca05760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b606482015260840161053e565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613ce9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d0d9190614953565b1015613d5b5760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d5543480000000000000000604482015260640161053e565b60006001600160a01b038916301415613d8157613d7a308d8d85611e5e565b9050613df7565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613db1908f908f908790600401614a32565b6020604051808303816000875af1158015613dd0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613df49190614953565b90505b8015613e2e5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b604482015260640161053e565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b600080600080613ead868661438d565b90925090506000826003811115613ec657613ec6614a1c565b14613ed75750915060009050613510565b6000613ee282614375565b9350935050509250929050565b600081613f0484670de0b6b3a7640000614aa4565b613f0e9190614a6c565b9050613f1a8284614ac3565b156106e6576106e360018261499f565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81613f66846149e8565b93508360ff1681518110613f7c57613f7c6149b7565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81613fa7846149e8565b93508360ff1681518110613fbd57613fbd6149b7565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81613fe8846149e8565b93508360ff1681518110613ffe57613ffe6149b7565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b81614029846149e8565b93508360ff168151811061403f5761403f6149b7565b6001600160e01b03199092166020928302919091019091015263073a938160e11b8161406a846149e8565b93508360ff1681518110614080576140806149b7565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b816140ab846149e8565b93508360ff16815181106140c1576140c16149b7565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b816140ec846149e8565b93508360ff1681518110614102576141026149b7565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b8161412d846149e8565b93508360ff1681518110614143576141436149b7565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b8161416e846149e8565b93508360ff1681518110614184576141846149b7565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b816141af846149e8565b93508360ff16815181106141c5576141c56149b7565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b816141f0846149e8565b93508360ff1681518110614206576142066149b7565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b81614231846149e8565b93508360ff1681518110614247576142476149b7565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b81614272846149e8565b93508360ff1681518110614288576142886149b7565b6001600160e01b03199092166020928302919091019091015260ff8216156106e65760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e67746800000000604482015260640161053e565b600080600080613ead8686614409565b60006106e383836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f7700000000000000000081525061447c565b604080516020810190915260008152604051806020016040528061436c856000015185614302565b90529392505050565b80516000906106e690670de0b6b3a764000090614a6c565b60006143a56040518060200160405280600081525090565b6000806143b68660000151866144cf565b909250905060008260038111156143cf576143cf614a1c565b146143ee57506040805160208101909152600081529092509050613510565b60408051602081019091529081526000969095509350505050565b60006144216040518060200160405280600081525090565b600080614436670de0b6b3a7640000876144cf565b9092509050600082600381111561444f5761444f614a1c565b1461446e57506040805160208101909152600081529092509050613510565b613ee281866000015161450e565b6000831580614489575082155b1561449657506000611553565b60006144a28486614aa4565b9050836144af8683614a6c565b148390610b005760405162461bcd60e51b815260040161053e9190614645565b600080836144e257506000905080613510565b838302836144f08683614a6c565b1461450357600260009250925050613510565b600092509050613510565b60006145266040518060200160405280600081525090565b60008061453b86670de0b6b3a76400006144cf565b9092509050600082600381111561455457614554614a1c565b1461457357506040805160208101909152600081529092509050613510565b60008061458083886145d9565b9092509050600082600381111561459957614599614a1c565b146145bc5781604051806020016040528060008152509550955050505050613510565b604080516020810190915290815260009890975095505050505050565b600080826145ed5750600190506000613510565b60006145f98486614a6c565b915091509250929050565b6001600160a01b0381168114611e5b57600080fd5b6000806040838503121561462c57600080fd5b823561463781614604565b946020939093013593505050565b600060208083528351808285015260005b8181101561467257858101830151858201604001528201614656565b81811115614684576000604083870101525b50601f01601f1916929092016040019392505050565b6000602082840312156146ac57600080fd5b5035919050565b6000602082840312156146c557600080fd5b813561155381614604565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156146f857600080fd5b813567ffffffffffffffff8082111561471057600080fd5b818401915084601f83011261472457600080fd5b813581811115614736576147366146d0565b604051601f8201601f19908116603f0116810190838211818310171561475e5761475e6146d0565b8160405282815287602084870101111561477757600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156147aa57600080fd5b82356147b581614604565b915060208301356147c581614604565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156148125783516001600160e01b031916835292840192918401916001016147ec565b50909695505050505050565b60008060006060848603121561483357600080fd5b833561483e81614604565b9250602084013561484e81614604565b929592945050506040919091013590565b60008060006060848603121561487457600080fd5b833561487f81614604565b925060208401359150604084013561489681614604565b809150509250925092565b600181811c908216806148b557607f821691505b6020821081141561121457634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561491b57600080fd5b8151801515811461155357600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b60006020828403121561496557600080fd5b5051919050565b60006020828403121561497e57600080fd5b815161155381614604565b634e487b7160e01b600052601160045260246000fd5b600082198211156149b2576149b2614989565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156149e1576149e1614989565b5060010190565b600060ff8216806149fb576149fb614989565b6000190192915050565b600082821015614a1757614a17614989565b500390565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b600082614a7b57614a7b614a56565b500490565b60008060408385031215614a9357600080fd5b505080516020909101519092909150565b6000816000190483118215151615614abe57614abe614989565b500290565b600082614ad257614ad2614a56565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "103:1387:11:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6703:158:13;;;;;;:::i;:::-;;:::i;:::-;;580:18:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4337:168:13;;;;;;:::i;:::-;;:::i;:::-;;;1403:25:504;;;1391:2;1376:18;4337:168:13;1257:177:504;6865:185:13;;;;;;:::i;:::-;;:::i;1783:36:15:-;;;;;;2626:26;;;;;;2228:717:10;;;;;;:::i;:::-;;:::i;4771:208:13:-;;;;;;:::i;:::-;;:::i;1278:88:11:-;1360:1;1278:88;;;1863:4:504;1851:17;;;1833:36;;1821:2;1806:18;1278:88:11;1691:184:504;750:21:15;;;;;;;;;5851:95:13;;;:::i;2162:27:15:-;;;;;;1482:584:10;;;;;;:::i;:::-;;:::i;1148:35:15:-;;;;;;;;-1:-1:-1;;;;;1148:35:15;;;;;;-1:-1:-1;;;;;3128:32:504;;;3110:51;;3098:2;3083:18;1148:35:15;2938:229:504;2405:29:15;;;;;;3491:59;;3544:6;3491:59;;1896:33;;;;;;3740:25;;;;;-1:-1:-1;;;;;3740:25:15;;;1028:246:11;;;;;;:::i;:::-;;:::i;3617:153:13:-;;;;;;:::i;:::-;;:::i;168:665:11:-;;;:::i;:::-;;;;;;;:::i;1551:31:15:-;;;;;;2282:28;;;;;;663:20;;;:::i;2529:29::-;;;;;;2669:152:13;;;;;;:::i;:::-;;:::i;8504:1035::-;;;;;;:::i;:::-;;:::i;2037:26:15:-;;;;;;7283:988:13;;;;;;:::i;:::-;;:::i;6476:223::-;;;;;;:::i;:::-;;:::i;3619:52:15:-;;3667:4;3619:52;;1668:31;;;;;;4015:133:13;;;;;;:::i;:::-;;:::i;336:33:15:-;;;;;-1:-1:-1;;;;;336:33:15;;;1370:118:11;1447:36;;;;;;;;;;;;;;;;;1370:118;;3150:133:13;;;;;;:::i;:::-;;:::i;654:22:10:-;;;;;-1:-1:-1;;;;;654:22:10;;;1272:42:15;;;;;-1:-1:-1;;;;;1272:42:15;;;5433:264:13;;;;;;:::i;:::-;;:::i;6703:158::-;6788:10;6810:4;6788:27;6780:45;;;;-1:-1:-1;;;6780:45:13;;6244:2:504;6780:45:13;;;6226:21:504;6283:1;6263:18;;;6256:29;-1:-1:-1;;;6301:18:504;;;6294:35;6346:18;;6780:45:13;;;;;;;;;6831:25;6845:2;6849:6;6831:13;:25::i;:::-;6703:158;;:::o;580:18:15:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4337:168:13:-;4419:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4435:11:::1;4452:32;4472:11;4452:19;:32::i;:::-;-1:-1:-1::0;4434:50:13;4337:168;-1:-1:-1;;;4337:168:13:o;6865:185::-;6946:7;6969:10;6991:4;6969:27;6961:45;;;;-1:-1:-1;;;6961:45:13;;6244:2:504;6961:45:13;;;6226:21:504;6283:1;6263:18;;;6256:29;-1:-1:-1;;;6301:18:504;;;6294:35;6346:18;;6961:45:13;6042:328:504;6961:45:13;7019:26;7032:4;7038:6;7019:12;:26::i;:::-;7012:33;;6865:185;;;;;:::o;2228:717:10:-;2289:10;2311:4;2289:27;;:47;;;2320:16;:14;:16::i;:::-;2281:103;;;;-1:-1:-1;;;2281:103:10;;8073:2:504;2281:103:10;;;8055:21:504;8112:2;8092:18;;;8085:30;8151:34;8131:18;;;8124:62;-1:-1:-1;;;8202:18:504;;;8195:41;8253:19;;2281:103:10;7871:407:504;2281:103:10;2427:6;;2391:25;;-1:-1:-1;;;;;2427:6:10;2419:57;;2469:7;2419:57;;;2459:6;;-1:-1:-1;;;;;2459:6:10;2419:57;2495:6;;2391:85;;-1:-1:-1;;;;;;2495:6:10;2487:29;;;;:69;;-1:-1:-1;2520:6:10;;:31;;-1:-1:-1;;;2520:31:10;;2545:4;2520:31;;;3110:51:504;-1:-1:-1;;;;;2520:6:10;;;;:16;;3083:18:504;;2520:31:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:36;;2487:69;2483:166;;;2566:6;;2580:31;;-1:-1:-1;;;2580:31:10;;2605:4;2580:31;;;3110:51:504;-1:-1:-1;;;;;2566:6:10;;;;:13;;:6;;2580:16;;3083:18:504;;2580:31:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2566:76;;-1:-1:-1;;;;;;2566:76:10;;;;;;;;;;8674:25:504;;;;2621:4:10;8753:18:504;;;8746:43;;;8805:18;;;8798:43;8647:18;;2566:76:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2483:166;2655:6;:26;;-1:-1:-1;;;;;;2655:26:10;-1:-1:-1;;;;;2655:26:10;;;;;;;;;2703:10;;2688:62;;-1:-1:-1;;;2688:62:10;;;;;9026:51:504;;;;-1:-1:-1;;9093:18:504;;;9086:34;2703:10:10;;;;2688:34;;8999:18:504;;2688:62:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2789:10:10;;2774:51;;-1:-1:-1;;;2774:51:10;;2819:4;2774:51;;;3110::504;2757:14:10;;-1:-1:-1;;;;;2789:10:10;;2774:36;;3083:18:504;;2774:51:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2757:68;-1:-1:-1;2835:11:10;;2831:47;;2856:15;2864:6;2856:7;:15::i;:::-;2889:51;;;-1:-1:-1;;;;;9361:15:504;;;9343:34;;9413:15;;9408:2;9393:18;;9386:43;2889:51:10;;9278:18:504;2889:51:10;;;;;;;2275:670;;2228:717;:::o;4771:208:13:-;4877:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4893:11:::1;4910:48;4936:8;4946:11;4910:25;:48::i;:::-;-1:-1:-1::0;4892:66:13;4771:208;-1:-1:-1;;;;4771:208:13:o;5851:95::-;5902:7;5924:17;:15;:17::i;:::-;5917:24;;5851:95;:::o;1482:584:10:-;1570:10;1592:4;1570:27;;:47;;;1601:16;:14;:16::i;:::-;1562:111;;;;-1:-1:-1;;;1562:111:10;;9642:2:504;1562:111:10;;;9624:21:504;9681:2;9661:18;;;9654:30;9720:34;9700:18;;;9693:62;-1:-1:-1;;;9771:18:504;;;9764:49;9830:19;;1562:111:10;9440:415:504;1562:111:10;1680:15;1709:4;1698:27;;;;;;;;;;;;:::i;:::-;1680:45;-1:-1:-1;;;;;;1736:21:10;;;:54;;;;-1:-1:-1;1769:6:10;;-1:-1:-1;;;;;1769:6:10;1761:29;;1736:54;1732:230;;;1900:10;;1947:6;;1884:71;;-1:-1:-1;;;1884:71:10;;-1:-1:-1;;;;;1947:6:10;;;1884:71;;;3110:51:504;1900:10:10;;;1884:54;;3083:18:504;;1884:71:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1874:81;;1732:230;-1:-1:-1;;;;;1972:21:10;;;;;;:51;;-1:-1:-1;2016:6:10;;-1:-1:-1;;;;;1997:26:10;;;2016:6;;1997:26;;1972:51;1968:94;;;2033:22;2047:7;2033:13;:22::i;1028:246:11:-;1102:16;:14;:16::i;:::-;1094:35;;;;-1:-1:-1;;;1094:35:11;;10582:2:504;1094:35:11;;;10564:21:504;10621:1;10601:18;;;10594:29;-1:-1:-1;;;10639:18:504;;;10632:36;10685:18;;1094:35:11;10380:329:504;1094:35:11;1153:10;;-1:-1:-1;;;;;1143:20:11;;;1153:10;;1143:20;;;;:49;;-1:-1:-1;1185:6:11;;-1:-1:-1;;;;;1167:25:11;;;1185:6;;1167:25;;1143:49;1135:68;;;;-1:-1:-1;;;1135:68:11;;10916:2:504;1135:68:11;;;10898:21:504;10955:1;10935:18;;;10928:29;-1:-1:-1;;;10973:18:504;;;10966:36;11019:18;;1135:68:11;10714:329:504;1135:68:11;1210:59;;-1:-1:-1;;;1210:59:11;;-1:-1:-1;;;;;9044:32:504;;;1210:59:11;;;9026:51:504;-1:-1:-1;;9093:18:504;;;9086:34;1210:30:11;;;;;8999:18:504;;1210:59:11;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1028:246;;:::o;3617:153:13:-;3705:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;3727:38:::1;3752:12;3727:24;:38::i;168:665:11:-:0;240:33;298:1;281:14;347:30;:28;:30::i;:::-;306:71;;448:8;416:40;;:22;:29;:40;;;;:::i;:::-;403:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;403:54:11;;383:74;;469:9;464:123;488:22;:29;484:1;:33;464:123;;;555:22;578:1;555:25;;;;;;;;:::i;:::-;;;;;;;532:17;550:1;532:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;532:48:11;;;:20;;;;;;;;;;;:48;519:3;;;;:::i;:::-;;;;464:123;;;-1:-1:-1;624:29:11;;-1:-1:-1;;;657:19:11;593:17;;611:10;;;:::i;:::-;;-1:-1:-1;611:42:11;;;;;;:::i;:::-;593:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;593:83:11;;;:61;;;;;;;;;;;:83;713:29;;-1:-1:-1;;;746:21:11;682:17;;700:10;;;:::i;:::-;;-1:-1:-1;700:42:11;;;;;;:::i;:::-;682:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;682:85:11;;;:61;;;;;;;;;;;:85;782:13;;;;774:54;;;;-1:-1:-1;;;774:54:11;;11970:2:504;774:54:11;;;11952:21:504;12009:2;11989:18;;;11982:30;12048;12028:18;;;12021:58;12096:18;;774:54:11;11768:352:504;774:54:11;275:558;;168:665;:::o;663:20:15:-;;;;;;;:::i;2669:152:13:-;2743:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;2759:11:::1;2776:24;2789:10;2776:12;:24::i;8504:1035::-:0;8603:7;8587:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;8618:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8687:12;8665:18;;:34;8661:135;;8716:73;8721:22;8745:43;8716:4;:73::i;:::-;8709:80;;;;8661:135;8894:14;8874:17;:15;:17::i;:::-;:34;8870:149;;;8925:87;8930:29;8961:50;8925:4;:87::i;8870:149::-;9046:14;;9029;:31;9025:124;;;9077:65;9082:15;9099:42;9077:4;:65::i;9025:124::-;9293:14;9276;;:31;;;;:::i;:::-;9259:14;:48:::0;9459:11:::1;::::0;9430:50:::1;::::0;;-1:-1:-1;;;9430:50:13;;;;9416:81:::1;::::0;9459:11:::1;::::0;::::1;-1:-1:-1::0;;;;;9459:11:13::1;::::0;9430:48:::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;9459:11;9430:50:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9482:14;9416:13;:81::i;:::-;9519:14;9511:23;9504:30;;41731:1;41738:29:::0;41757:9;41738:18;:29::i;:::-;8504:1035;;;;:::o;7283:988::-;7382:7;7366:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;7397:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7466:12;7444:18;;:34;7440:135;;7495:73;7500:22;7524:43;7495:4;:73::i;7440:135::-;7605:14;7585:17;:15;:17::i;:::-;:34;7581:149;;;7636:87;7641:29;7672:50;7636:4;:87::i;7581:149::-;7757:14;;7740;:31;7736:124;;;7788:65;7793:15;7810:42;7788:4;:65::i;7736:124::-;7971:25;8016:14;7999;;:31;;;;:::i;:::-;8036:14;:34:::0;;;8201:10:::1;::::0;7971:59;;-1:-1:-1;8179:50:13::1;::::0;-1:-1:-1;;;;;8201:10:13::1;8214:14:::0;8179:13:::1;:50::i;:::-;8251:14;8236:30;;;41738:29:::0;41757:9;41738:18;:29::i;6476:223::-;6612:7;6597:4;41695:30;41715:9;41695:19;:30::i;:::-;6634:60:::1;6648:10;6660;6672:8;6682:11;6634:13;:60::i;:::-;6627:67;;41738:29:::0;41757:9;41738:18;:29::i;4015:133::-;4093:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4115:28:::1;4130:12;4115:14;:28::i;3150:133::-:0;3228:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;3250:28:::1;3265:12;3250:14;:28::i;5433:264::-:0;5579:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;5595:11:::1;5612:64;5636:8;5646:11;5659:16;5612:23;:64::i;:::-;-1:-1:-1::0;5594:82:13;-1:-1:-1;;1193:1:13::1;5433:264:::0;;;;;:::o;4064:122:10:-;4139:6;;:42;;-1:-1:-1;;;4139:42:10;;;;;8674:25:504;;;-1:-1:-1;;;;;8773:15:504;;;8753:18;;;8746:43;4175:4:10;8805:18:504;;;8798:43;4139:6:10;;;;:15;;8647:18:504;;4139:42:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;27701:307:13:-;27789:7;27798;27773:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;27813:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27950:53;27967:10;27979;27991:11;27950:16;:53::i;:::-;27943:60;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;27701:307;;;;:::o;3531:263:10:-;3686:10;;3671:68;;-1:-1:-1;;;3671:68:10;;3610:7;;-1:-1:-1;;;;;3686:10:10;;3671:39;;:68;;3711:4;;3725;;3732:6;;3671:68;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3663:85;;;;-1:-1:-1;;;3663:85:10;;;;;;12969:2:504;12951:21;;;13008:1;12988:18;;;12981:29;-1:-1:-1;;;13041:2:504;13026:18;;13019:34;13085:2;13070:18;;12767:327;3663:85:10;3755:15;3763:6;3755:7;:15::i;10661:339:15:-;10710:4;10722:39;10793:11;;;;;;;;;-1:-1:-1;;;;;10793:11:15;10722:84;;10840:18;-1:-1:-1;;;;;10840:24:15;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10826:40:15;:10;-1:-1:-1;;;;;10826:40:15;;:79;;;;;10870:18;-1:-1:-1;;;;;10870:33:15;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10825:170;;;-1:-1:-1;10939:10:15;;-1:-1:-1;;;;;10939:10:15;10917;:33;:77;;;;;10954:18;-1:-1:-1;;;;;10954:38:15;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10812:183;;;10661:339;:::o;3798:90:10:-;3846:6;;:37;;-1:-1:-1;;;3846:37:10;;;;;13273:25:504;;;3877:4:10;13314:18:504;;;13307:60;-1:-1:-1;;;;;3846:6:10;;;;:14;;13246:18:504;;3846:37:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;28319:343:13:-;28443:7;28452;28423:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;28469:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28606:51;28623:10;28635:8;28645:11;28606:16;:51::i;:::-;28599:58;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;28319:343;;;;;;:::o;3152:139:10:-;3233:6;;3254:31;;-1:-1:-1;;;3254:31:10;;3279:4;3254:31;;;3110:51:504;3211:7:10;;-1:-1:-1;;;;;3233:6:10;;:20;;:6;;3254:16;;3083:18:504;;3254:31:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3233:53;;;;;;;;;;;;;1403:25:504;;1391:2;1376:18;;1257:177;3233:53:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;17924:280:13:-;18018:7;18002:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;18033:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:40;18171:10;18183:1;18186:12;18159:11;:40::i;681:672:10:-:0;753:33;811:1;794:14;860:30;:28;:30::i;:::-;819:71;;961:8;929:40;;:22;:29;:40;;;;:::i;:::-;916:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;916:54:10;;896:74;;982:9;977:123;1001:22;:29;997:1;:33;977:123;;;1068:22;1091:1;1068:25;;;;;;;;:::i;:::-;;;;;;;1045:17;1063:1;1045:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1045:48:10;;;:20;;;;;;;;;;;:48;1032:3;;;;:::i;:::-;;;;977:123;;;-1:-1:-1;1137:29:10;;-1:-1:-1;;;1170:20:10;1106:17;;1124:10;;;:::i;:::-;;-1:-1:-1;1124:42:10;;;;;;:::i;:::-;1106:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1106:84:10;;;:61;;;;;;;;;;;:84;1227:29;;-1:-1:-1;;;1260:27:10;1196:17;;1214:10;;;:::i;13048:290:13:-;13128:7;13137;13112:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;13152:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13300:33;13310:10;13322;13300:9;:33::i;42073:178::-:0;42140:11;;-1:-1:-1;;;42140:11:13;;;;42132:34;;;;-1:-1:-1;;;42132:34:13;;13580:2:504;42132:34:13;;;13562:21:504;13619:2;13599:18;;;13592:30;-1:-1:-1;;;13638:18:504;;;13631:40;13688:18;;42132:34:13;13378:334:504;42132:34:13;42177:9;42172:49;;42188:11;;;;;;;;;-1:-1:-1;;;;;42188:11:13;-1:-1:-1;;;;;42188:31:13;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:49;-1:-1:-1;42241:5:13;42227:19;;-1:-1:-1;;;;42227:19:13;;;42073:178::o;7757:151:23:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;13927:25:504;;;13983:2;13968:18;;13961:34;;;;7875:1:23;14011:18:504;;;14004:34;13915:2;13900:18;7838:39:23;;;;;;;7899:3;7891:12;;;;;;;;:::i;42551:169:13:-;42609:11;:18;;-1:-1:-1;;;;42609:18:13;-1:-1:-1;;;42609:18:13;;;42672:9;42667:48;;42683:11;;;;;;;;;-1:-1:-1;;;;;42683:11:13;-1:-1:-1;;;;;42683:30:13;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42667:48;42551:169;:::o;38262:3163::-;38472:11;;:87;;-1:-1:-1;;;38472:87:13;;38505:4;38472:87;;;14346:34:504;-1:-1:-1;;;;;14416:15:504;;;14396:18;;;14389:43;14468:15;;;14448:18;;;14441:43;14520:15;;;14500:18;;;14493:43;14552:19;;;14545:35;;;38403:7:13;;;;38472:11;;;;;;;;:24;;14280:19:504;;38472:87:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38454:105;-1:-1:-1;38569:12:13;;38565:139;;38598:99;38609:27;38638:49;38689:7;38598:10;:99::i;:::-;38591:106;;;;;38565:139;38766:10;-1:-1:-1;;;;;38754:22:13;:8;-1:-1:-1;;;;;38754:22:13;;38750:134;;;38793:84;38798:26;38826:50;38793:4;:84::i;38750:134::-;38890:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38890:34:13;-1:-1:-1;;;;;39230:23:13;;;;;;:13;:23;;;;;;39222:45;;39255:11;39222:7;:45::i;:::-;39196:22;;;39181:86;;;39182:4;39181:86;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;39293:18:13;;-1:-1:-1;39277:12:13;;:34;;;;;;;;:::i;:::-;;39273:167;;39328:105;39339:16;39357:52;39419:4;:12;;;39411:21;;;;;;;;:::i;:::-;39328:10;:105::i;:::-;39321:112;;;;;;39273:167;39473:64;39478:11;39491:45;;;;;;;;3544:6:15;39491:45:13;;;39473:4;:64::i;:::-;39446:24;;;:91;39583:40;;;;;;;;;3667:4:15;39583:40:13;;39565:59;;39570:11;;39565:4;:59::i;:::-;39543:19;;;:81;;;39673:24;;;;39659:38;;:11;:38;:::i;:::-;:60;;;;:::i;:::-;39630:26;;;:89;41519:4;-1:-1:-1;;;;;39754:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39726:25;;;:69;;;39855:44;;;;;;;;;39871:25;;39855:44;;-1:-1:-1;;;39907:24:13;39829:108;;39855:44;39829:18;:108::i;:::-;39802:24;;;:135;39984:44;;;;;;;;;40000:25;;;;39984:44;;40030:19;;;;39965:85;;39984:44;39965:18;:85::i;:::-;39943:19;;;:107;40097:24;;;;40081:13;;:40;;40097:24;40081:40;:::i;:::-;40057:21;;;:64;40190:19;;;;40163:24;;;;40149:11;;:38;;40163:24;40149:38;:::i;:::-;:60;;;;:::i;:::-;40127:19;;;:82;40256:19;;;;40239:14;;:36;;40256:19;40239:36;:::i;:::-;40215:21;;;:60;-1:-1:-1;;;;;40333:25:13;;;;;;:13;:25;;;;;;40360:26;;;;40325:62;;40333:25;40325:7;:62::i;:::-;40297:24;;;40282:105;;;40283:4;40282:105;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;40413:18:13;;-1:-1:-1;40397:12:13;;:34;;;;;;;;:::i;:::-;;40393:167;;40448:105;40459:16;40477:52;40539:4;:12;;;40531:21;;;;;;;;:::i;40393:167::-;40752:21;;;;40736:13;:37;40793:19;;;;40779:11;:33;40835:21;;;;40818:14;:38;40889:22;;;;;-1:-1:-1;;;;;40863:23:13;;;-1:-1:-1;40863:23:13;;;:13;:23;;;;;;:48;;;;40945:24;;;;40917:25;;;;;;;;;;:52;;;;41044:26;;;;41013:58;;1403:25:504;;;40917::13;;40863:23;;-1:-1:-1;;;;;;;;;;;41013:58:13;1376:18:504;41013:58:13;;;;;;;41109:4;-1:-1:-1;;;;;41082:59:13;41091:8;-1:-1:-1;;;;;41082:59:13;-1:-1:-1;;;;;;;;;;;41116:4:13;:24;;;41082:59;;;;1403:25:504;;1391:2;1376:18;;1257:177;41082:59:13;;;;;;;;41181:24;;;;41207:21;;;;41152:77;;;41174:4;14793:51:504;;14875:2;14860:18;;14853:34;;;;14903:18;;14896:34;41152:77:13;;14781:2:504;14766:18;41152:77:13;;;;;;;41405:14;41390:30;;;;38262:3163;;;;;;;:::o;23833:267::-;23917:7;23901:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;23932:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24058:37;24070:10;24082:12;24058:11;:37::i;17296:270::-:0;17380:7;17364:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;17395:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17521:40;17533:10;17545:12;17559:1;17521:11;:40::i;32809:437::-:0;32961:7;32970;32945:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;32985:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33035:16;-1:-1:-1::0;;;;;33027:40:13::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33168:73;33189:10;33201:8;33211:11;33224:16;33168:20;:73::i;:::-;33161:80;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;32809:437;;;;;;;:::o;29313:2997::-;29511:11;;:75;;-1:-1:-1;;;29511:75:13;;29550:4;29511:75;;;15210:34:504;-1:-1:-1;;;;;15280:15:504;;;15260:18;;;15253:43;15332:15;;;15312:18;;;15305:43;15364:18;;;15357:34;;;29427:7:13;;;;;;29511:11;;;;;;;;:30;;15144:19:504;;29511:75:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29493:93;-1:-1:-1;29596:12:13;;29592:141;;29626:96;29637:27;29666:46;29714:7;29626:10;:96::i;:::-;29724:1;29618:108;;;;;;;29592:141;29832:12;29810:18;;:34;29806:137;;29862:70;29867:22;29891:40;29862:4;:70::i;29806:137::-;29949:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:32:13;-1:-1:-1;;;;;30084:24:13;;;;;;:14;:24;;;;;:38;;;30063:18;;;:59;41519:4;30226:50;;-1:-1:-1;;;30226:50:13;;-1:-1:-1;;;;;3128:32:504;;;30226:50:13;;;3110:51:504;30226:40:13;;;;;;;3083:18:504;;30226:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30204:19;;;:72;-1:-1:-1;;30348:32:13;;30344:142;;;30409:19;;;;30390:16;;;:38;30344:142;;;30449:16;;;:30;;;30344:142;31027:37;31040:5;31047:4;:16;;;31027:12;:37::i;:::-;31002:22;;;:62;;;31343:19;;;;31335:52;;:7;:52::i;:::-;31309:22;;;31294:93;;;31295:12;;;31294:93;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31417:18:13;;-1:-1:-1;31401:4:13;:12;;;:34;;;;;;;;:::i;:::-;;31393:105;;;;-1:-1:-1;;;31393:105:13;;15604:2:504;31393:105:13;;;15586:21:504;15643:2;15623:18;;;15616:30;15682:34;15662:18;;;15655:62;15753:28;15733:18;;;15726:56;15799:19;;31393:105:13;15402:422:504;31393:105:13;31544:45;31552:12;;31566:4;:22;;;31544:7;:45::i;:::-;31520:20;;;31505:84;;;31506:12;;;31505:84;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31619:18:13;;-1:-1:-1;31603:4:13;:12;;;:34;;;;;;;;:::i;:::-;;31595:96;;;;-1:-1:-1;;;31595:96:13;;16031:2:504;31595:96:13;;;16013:21:504;16070:2;16050:18;;;16043:30;16109:34;16089:18;;;16082:62;-1:-1:-1;;;16160:18:504;;;16153:47;16217:19;;31595:96:13;15829:413:504;31595:96:13;31800:22;;;;;;-1:-1:-1;;;;;31763:24:13;;;;;;;:14;:24;;;;;;;;;:59;;;31869:11;;31828:38;;;;:52;;;;31901:20;;;;31886:12;:35;;;32000:22;;;;32024;;31971:98;;16562:15:504;;;16544:34;;16594:18;;;16587:43;;;;16646:18;;16639:34;;;;16704:2;16689:18;;16682:34;;;;16747:3;16732:19;;16725:35;;;;31971:98:13;;16478:19:504;31971:98:13;;;;;;;32282:22;;;32265:14;;-1:-1:-1;32282:22:13;-1:-1:-1;;29313:2997:13;;;;;;;:::o;19181:4407::-;19302:7;19325:19;;;:42;;-1:-1:-1;19348:19:13;;19325:42;19317:79;;;;-1:-1:-1;;;19317:79:13;;16973:2:504;19317:79:13;;;16955:21:504;17012:2;16992:18;;;16985:30;17051:26;17031:18;;;17024:54;17095:18;;19317:79:13;16771:348:504;19317:79:13;19403:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:27:13;41519:4;-1:-1:-1;;;;;19465:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19437:25;;;:69;19517:18;;19513:1634;;19637:4;19620:14;19606:11;;:28;;;;:::i;:::-;:35;19602:69;;;19660:11;;19643:28;;19602:69;19886:17;;;:34;;;19992:44;;;;;;;;20008:25;;;;19992:44;;19965:103;;19906:14;19965:17;:103::i;:::-;19944:17;;;19929:139;;;19930:12;;;19929:139;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;20096:18:13;;-1:-1:-1;20080:4:13;:12;;;:34;;;;;;;;:::i;:::-;;20076:182;;20143:106;20154:16;20172:53;20235:4;:12;;;20227:21;;;;;;;;:::i;20143:106::-;20126:123;;;;;20076:182;19513:1634;;;-1:-1:-1;;20282:14:13;:35;20278:150;;;20346:11;;:73;;-1:-1:-1;;;20346:73:13;;-1:-1:-1;;;;;17393:15:504;;;20346:73:13;;;17375:34:504;20405:4:13;17425:18:504;;;17418:43;20413:5:13;17477:18:504;;;17470:50;20346:11:13;;;;;;;;:32;;17310:18:504;;20346:73:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:90;;20278:150;20493:31;41519:4;-1:-1:-1;;;;;20527:46:13;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20493:82;-1:-1:-1;20630:4:13;20587:40;20613:14;20493:82;20587:40;:::i;:::-;:47;20583:93;;;20653:23;20636:40;;20583:93;20903:53;20914:14;20930:4;:25;;;20903:10;:53::i;:::-;20883:17;;;:73;;;21026:11;;21060:4;;21026:31;;;:::i;:::-;:38;21022:75;;;21086:11;;21066:17;;;:31;21022:75;-1:-1:-1;21106:17:13;;;:34;;;19513:1634;21208:11;;21259:17;;;;21208:69;;-1:-1:-1;;;21208:69:13;;21190:15;;21208:11;;;-1:-1:-1;;;;;21208:11:13;;:25;;:69;;21242:4;;21249:8;;21259:17;21208:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:87;-1:-1:-1;21287:12:13;;21283:130;;21316:90;21327:27;21356:40;21398:7;21316:10;:90::i;:::-;21309:97;;;;;;21283:130;21512:12;21490:18;;:34;21486:126;;21541:64;21546:22;21570:34;21541:4;:64::i;21486:126::-;21876:39;21884:11;;21897:4;:17;;;21876:7;:39::i;:::-;21853:19;;;21838:77;;;21839:12;;;21838:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;21941:18:13;;-1:-1:-1;21925:4:13;:12;;;:34;;;;;;;;:::i;:::-;;21921:177;;21984:107;21995:16;22013:54;22077:4;:12;;;22069:21;;;;;;;;:::i;21921:177::-;-1:-1:-1;;;;;22152:23:13;;;;;;:13;:23;;;;;;22177:17;;;;22144:51;;22152:23;22144:7;:51::i;:::-;22119:21;;;22104:91;;;22105:12;;;22104:91;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;22221:18:13;;-1:-1:-1;22205:4:13;:12;;;:34;;;;;;;;:::i;:::-;;22201:180;;22264:110;22275:16;22293:57;22360:4;:12;;;22352:21;;;;;;;;:::i;22201:180::-;22471:4;:17;;;22451;:15;:17::i;:::-;:37;22447:146;;;22505:81;22510:29;22541:44;22505:4;:81::i;22447:146::-;22779:19;;;;22765:11;:33;22830:21;;;;-1:-1:-1;;;;;22804:23:13;;;;;;:13;:23;;;;;:47;23215:17;;;;23191:42;;22818:8;;23191:13;:42::i;:::-;23327:4;-1:-1:-1;;;;;23300:52:13;23309:8;-1:-1:-1;;;;;23300:52:13;-1:-1:-1;;;;;;;;;;;23334:4:13;:17;;;23300:52;;;;1403:25:504;;1391:2;1376:18;;1257:177;23300:52:13;;;;;;;;23380:17;;;;23399;;;;;23363:54;;;-1:-1:-1;;;;;14811:32:504;;14793:51;;14875:2;14860:18;;14853:34;;;;14903:18;;14896:34;23363:54:13;;14766:18:504;23363:54:13;;;;;;;23459:11;;23509:17;;;;23528;;;;23459:87;;-1:-1:-1;;;23459:87:13;;23492:4;23459:87;;;17800:34:504;-1:-1:-1;;;;;17870:15:504;;;17850:18;;;17843:43;17902:18;;;17895:34;;;;17945:18;;;17938:34;;;;23459:11:13;;;;;;:24;;17734:19:504;;23459:87:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23568:14:13;;-1:-1:-1;23560:23:13;;-1:-1:-1;;23560:23:13;;23553:30;19181:4407;-1:-1:-1;;;;;;19181:4407:13:o;272:782:8:-;344:33;402:1;385:14;451:30;:28;:30::i;:::-;410:71;;552:8;520:40;;:22;:29;:40;;;;:::i;:::-;507:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:54:8;;487:74;;573:9;568:123;592:22;:29;588:1;:33;568:123;;;659:22;682:1;659:25;;;;;;;;:::i;:::-;;;;;;;636:17;654:1;636:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;636:48:8;;;:20;;;;;;;;;;;:48;623:3;;;;:::i;:::-;;;;568:123;;;-1:-1:-1;728:29:8;;-1:-1:-1;;;761:26:8;697:17;;715:10;;;:::i;:::-;;-1:-1:-1;715:42:8;;;;;;:::i;:::-;697:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;697:90:8;;;:61;;;;;;;;;;;:90;824:29;;-1:-1:-1;;;857:26:8;793:17;;811:10;;;:::i;:::-;;-1:-1:-1;811:42:8;;;;;;:::i;:::-;793:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;793:90:8;;;:61;;;;;;;;;;;:90;920:29;;-1:-1:-1;;;953:35:8;889:17;;907:10;;;:::i;13996:2971:13:-;14146:11;;:58;;-1:-1:-1;;;14146:58:13;;14069:7;;;;;;14146:11;;;-1:-1:-1;;;;;14146:11:13;;:23;;:58;;14178:4;;14185:6;;14193:10;;14146:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14128:76;-1:-1:-1;14214:12:13;;14210:133;;14244:88;14255:27;14284:38;14324:7;14244:10;:88::i;:::-;14334:1;14236:100;;;;;;;14210:133;14442:12;14420:18;;:34;14416:129;;14472:62;14477:22;14501:32;14472:4;:62::i;14416:129::-;14551:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14551:25:13;41519:4;-1:-1:-1;;;;;14611:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14583:25;;;:69;15550:32;15563:6;15571:10;15550:12;:32::i;:::-;15526:21;;;:56;;;15890:44;;;;;;;;15906:25;;;;15890:44;;15831:109;;15526:56;15831:22;:109::i;:::-;15812:15;;;15797:143;;;15798:12;;;15797:143;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;15970:18:13;;-1:-1:-1;15954:4:13;:12;;;:34;;;;;;;;:::i;:::-;;15946:79;;;;-1:-1:-1;;;15946:79:13;;18185:2:504;15946:79:13;;;18167:21:504;;;18204:18;;;18197:30;18263:34;18243:18;;;18236:62;18315:18;;15946:79:13;17983:356:504;15946:79:13;16057:1;16039:4;:15;;;:19;16031:58;;;;-1:-1:-1;;;16031:58:13;;18546:2:504;16031:58:13;;;18528:21:504;18585:2;18565:18;;;18558:30;18624:28;18604:18;;;18597:56;18670:18;;16031:58:13;18344:350:504;16031:58:13;16360:4;:15;;;16346:11;;:29;;;;:::i;:::-;16324:19;;;:51;16430:15;;;;-1:-1:-1;;;;;16406:21:13;;;;;;:13;:21;;;;;;:39;;16430:15;16406:39;:::i;:::-;16382:21;;;:63;;;16527:19;;;;16513:11;:33;-1:-1:-1;;;;;16552:21:13;;;;;;:13;:21;;;;;;;;;:45;;;;16675:21;;;;16698:15;;;;;16662:52;;14793:51:504;;;14860:18;;;14853:34;;;;14903:18;;;14896:34;;;;16662:52:13;;14766:18:504;16662:52:13;;;;;;;16749:6;-1:-1:-1;;;;;16725:48:13;16742:4;-1:-1:-1;;;;;16725:48:13;-1:-1:-1;;;;;;;;;;;16757:4:13;:15;;;16725:48;;;;1403:25:504;;1391:2;1376:18;;1257:177;16725:48:13;;;;;;;;16815:11;;16861:21;;;;16884:15;;;;16815:85;;-1:-1:-1;;;16815:85:13;;16846:4;16815:85;;;17800:34:504;-1:-1:-1;;;;;17870:15:504;;;17850:18;;;17843:43;17902:18;;;17895:34;;;;17945:18;;;17938:34;;;;16815:11:13;;;;;;:22;;17734:19:504;;16815:85:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:14:13;;-1:-1:-1;16915:23:13;;-1:-1:-1;;16915:23:13;;16940:4;:21;;;16907:55;;;;;;13996:2971;;;;;;:::o;8016:262:23:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;13927:25:504;;;13983:2;13968:18;;13961:34;;;;14011:18;;14004:34;;;13915:2;13900:18;8140:49:23;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1280:213:16:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:16;;-1:-1:-1;1480:1:16;1443:39;;4229:119:25;4291:7;450:4;4313:19;4318:1;4321;:10;;;4313:4;:19::i;:::-;:30;;;;:::i;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1567:263:16:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:16;-1:-1:-1;1730:30:16;;1710:116;1789:26;1817:1;1781:38;;;;;;;24486:2981:13;24635:11;;:64;;-1:-1:-1;;;24635:64:13;;24565:7;;;;24635:11;;;;-1:-1:-1;;;;;24635:11:13;;:25;;:64;;24669:4;;24676:8;;24686:12;;24635:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:82;-1:-1:-1;24709:12:13;;24705:130;;24738:90;24749:27;24778:40;24820:7;24738:10;:90::i;:::-;24731:97;;;;;24705:130;24934:12;24912:18;;:34;24908:126;;24963:64;24968:22;24992:34;24963:4;:64::i;24908:126::-;25111:17;25131;:15;:17::i;:::-;25111:37;;25171:12;25159:9;:24;25155:126;;;25200:74;25205:29;25236:37;25200:4;:74::i;:::-;25193:81;;;;;;25155:126;25287:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:27:13;41519:4;25555:50;;-1:-1:-1;;;25555:50:13;;-1:-1:-1;;;;;3128:32:504;;;25555:50:13;;;3110:51:504;25555:40:13;;;;;;;3083:18:504;;25555:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25533:19;;;:72;;;25653:42;;25682:12;25653:7;:42::i;:::-;25627:22;;;25612:83;;;25613:4;25612:83;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;25721:18:13;;-1:-1:-1;25705:12:13;;:34;;;;;;;;:::i;:::-;;25701:227;;25764:157;25786:16;25814:64;25898:4;:12;;;25890:21;;;;;;;;:::i;25764:157::-;25749:172;;;;;;;25701:227;25997:11;;26043:22;;;;;25997:69;;-1:-1:-1;;;25997:69:13;;26036:4;25997:69;;;9026:51:504;9093:18;;;9086:34;;;;25997:11:13;;;;-1:-1:-1;;;;;25997:11:13;;:30;;8999:18:504;;25997:69:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25987:79;-1:-1:-1;26076:12:13;;26072:130;;26105:90;26116:27;26145:40;26187:7;26105:10;:90::i;26072:130::-;26247:35;26255:12;;26269;26247:7;:35::i;:::-;26223:20;;;26208:74;;;26209:4;26208:74;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;26308:18:13;;-1:-1:-1;26292:12:13;;:34;;;;;;;;:::i;:::-;;26288:178;;26351:108;26362:16;26380:55;26445:4;:12;;;26437:21;;;;;;;;:::i;26288:178::-;26679:22;;;;;-1:-1:-1;;;;;26642:24:13;;;;;;:14;:24;;;;;;:59;;;26748:11;;26707:38;;;;:52;26780:20;;;;26765:12;:35;27136:37;26657:8;27160:12;27136:13;:37::i;:::-;27249:22;;;;;27273:20;;;;;27218:76;;-1:-1:-1;;;;;19529:32:504;;19511:51;;19593:2;19578:18;;19571:34;;;19621:18;;;19614:34;;;;19664:18;;19657:34;27218:76:13;;19498:3:504;19483:19;27218:76:13;;;;;;;27447:14;27432:30;24486:2981;-1:-1:-1;;;;;;24486:2981:13:o;33827:3389::-;34062:11;;:138;;-1:-1:-1;;;34062:138:13;;34112:4;34062:138;;;14346:34:504;-1:-1:-1;;;;;14416:15:504;;;14396:18;;;14389:43;14468:15;;;14448:18;;;14441:43;14520:15;;;14500:18;;;14493:43;14552:19;;;14545:35;;;33980:7:13;;;;;;34062:11;;;;;;;;:34;;14280:19:504;;34062:138:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:156;-1:-1:-1;34210:12:13;;34206:138;;34240:93;34251:27;34280:43;34325:7;34240:10;:93::i;:::-;34335:1;34232:105;;;;;;;34206:138;34443:12;34421:18;;:34;34417:134;;34473:67;34478:22;34502:37;34473:4;:67::i;34417:134::-;34694:12;34652:16;-1:-1:-1;;;;;34645:43:13;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;34641:172;;34724:78;34729:22;34753:48;34724:4;:78::i;34641:172::-;34875:10;-1:-1:-1;;;;;34863:22:13;:8;-1:-1:-1;;;;;34863:22:13;;34859:133;;;34903:78;34908:26;34936:44;34903:4;:78::i;34859:133::-;35036:16;35032:135;;35070:86;35075:36;35113:42;35070:4;:86::i;35032:135::-;-1:-1:-1;;35212:11:13;:32;35208:155;;;35262:90;35267:36;35305:46;35262:4;:90::i;35208:155::-;35406:24;35432:25;35461:51;35478:10;35490:8;35500:11;35461:16;:51::i;:::-;35405:107;;-1:-1:-1;35405:107:13;-1:-1:-1;35522:43:13;;35518:154;;35583:78;35594:16;35588:23;;;;;;;;:::i;:::-;35613:47;35583:4;:78::i;:::-;35663:1;35575:90;;;;;;;;;35518:154;35908:11;;:117;;-1:-1:-1;;;35908:117:13;;35859:24;;;;35908:11;;;;-1:-1:-1;;;;;35908:11:13;;:41;;:117;;35965:4;;35978:16;;36002:17;;35908:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35858:167;;-1:-1:-1;35858:167:13;-1:-1:-1;36039:43:13;;36031:107;;;;-1:-1:-1;;;36031:107:13;;20154:2:504;36031:107:13;;;20136:21:504;20193:2;20173:18;;;20166:30;20232:34;20212:18;;;20205:62;-1:-1:-1;;;20283:18:504;;;20276:49;20342:19;;36031:107:13;19952:415:504;36031:107:13;36221:45;;-1:-1:-1;;;36221:45:13;;-1:-1:-1;;;;;3128:32:504;;;36221:45:13;;;3110:51:504;36270:11:13;;36221:35;;;;;;3083:18:504;;36221:45:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;36213:97;;;;-1:-1:-1;;;36213:97:13;;20574:2:504;36213:97:13;;;20556:21:504;20613:2;20593:18;;;20586:30;20652:26;20632:18;;;20625:54;20696:18;;36213:97:13;20372:348:504;36213:97:13;36428:18;-1:-1:-1;;;;;36456:33:13;;36484:4;36456:33;36452:229;;;36512:63;36534:4;36541:10;36553:8;36563:11;36512:13;:63::i;:::-;36499:76;;36452:229;;;36609:65;;-1:-1:-1;;;36609:65:13;;-1:-1:-1;;;;;36609:30:13;;;;;:65;;36640:10;;36652:8;;36662:11;;36609:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36596:78;;36452:229;36776:37;;36768:56;;;;-1:-1:-1;;;36768:56:13;;20927:2:504;36768:56:13;;;20909:21:504;20966:1;20946:18;;;20939:29;-1:-1:-1;;;20984:18:504;;;20977:36;21030:18;;36768:56:13;20725:329:504;36768:56:13;36878:87;;;-1:-1:-1;;;;;21374:15:504;;;21356:34;;21426:15;;;21421:2;21406:18;;21399:43;21458:18;;;21451:34;;;21521:15;;21516:2;21501:18;;21494:43;21568:3;21553:19;;21546:35;;;36878:87:13;;;;;;;21305:3:504;36878:87:13;;;37176:14;37160:51;-1:-1:-1;37193:17:13;;-1:-1:-1;;;;;;33827:3389:13;;;;;;;;:::o;2379:288:24:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:24;-1:-1:-1;2560:18:24;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:24;-1:-1:-1;2601:1:24;;-1:-1:-1;2588:15:24;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;18422:139:13:-;18487:11;18525:1;18513:8;:1;18517:4;18513:8;:::i;:::-;18512:14;;;;:::i;:::-;18506:20;-1:-1:-1;18536:5:13;18540:1;18536;:5;:::i;:::-;:10;18532:24;;18548:8;18555:1;18548:8;;:::i;1203:1102::-;1359:22;;;1315:2;1359:22;;;;;;;;;1275:15;;1315:2;1298:14;;1315:2;1359:22;;;;;;;;;;-1:-1:-1;;1323:58:13;-1:-1:-1;;;;1323:58:13;1405:10;;;:::i;:::-;;;;1387:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1387:50:13;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;1443:17:13;1461:10;;;:::i;:::-;;;;1443:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1443:52:13;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1501:17:13;1519:10;;;:::i;:::-;;;;1501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1501:62:13;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;1569:17:13;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:52:13;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1627:17:13;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:57:13;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;1690:17:13;1708:10;;;:::i;:::-;;;;1690:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1690:63:13;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1759:17:13;1777:10;;;:::i;:::-;;;;1759:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1759:61:13;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;1826:17:13;1844:10;;;:::i;:::-;;;;1826:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1826:53:13;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1885:17:13;1903:10;;;:::i;:::-;;;;1885:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1885:51:13;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;1942:17:13;1960:10;;;:::i;:::-;;;;1942:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1942:61:13;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2009:17:13;2027:10;;;:::i;:::-;;;;2009:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2009:60:13;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2075:17:13;2093:10;;;:::i;:::-;;;;2075:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2075:64:13;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2145:17:13;2163:10;;;:::i;:::-;;;;2145:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2145:64:13;;;:29;;;;;;;;;;;:64;2224:13;;;;2216:54;;;;-1:-1:-1;;;2216:54:13;;11970:2:504;2216:54:13;;;11952:21:504;12009:2;11989:18;;;11982:30;12048;12028:18;;;12021:58;12096:18;;2216:54:13;11768:352:504;3834:312:24;3925:9;3936:7;3952:13;3967:19;3990:31;4005:6;4013:7;3990:14;:31::i;4796:123:25:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:25;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:25:o;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:24:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:24;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:24;-1:-1:-1;2136:18:24;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:24;;;;;;;;;-1:-1:-1;2178:20:24;;2172:4;;-1:-1:-1;2178:20:24;-1:-1:-1;2164:35:24;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:24;;-1:-1:-1;1947:332:24;-1:-1:-1;;;;1947:332:24:o;3151:585::-;3234:9;3245:10;-1:-1:-1;;;;;;;;;;;;;;3245:10:24;3534:14;3550:17;3571:25;450:4:25;3589:6:24;3571:7;:25::i;:::-;3533:63;;-1:-1:-1;3533:63:24;-1:-1:-1;3614:18:24;3606:4;:26;;;;;;;;:::i;:::-;;3602:82;;-1:-1:-1;3656:20:24;;;;;;;;;-1:-1:-1;3656:20:24;;3650:4;;-1:-1:-1;3656:20:24;-1:-1:-1;3642:35:24;;3602:82;3696:35;3703:9;3714:7;:16;;;3696:6;:35::i;4923:243:25:-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:25;;5045:16;5041:45;;;-1:-1:-1;5078:1:25;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:25;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:25;;;;;;;;:::i;544:330:16:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:16;;-1:-1:-1;660:18:16;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:16;-1:-1:-1;833:30:16;;799:479:24;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:24;896:14;912:23;939:22;947:3;450:4:25;939:7:24;:22::i;:::-;895:66;;-1:-1:-1;895:66:24;-1:-1:-1;979:18:24;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:24;;;;;;;;;-1:-1:-1;1021:20:24;;1015:4;;-1:-1:-1;1021:20:24;-1:-1:-1;1007:35:24;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:24;-1:-1:-1;1141:18:24;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:24;;-1:-1:-1;799:479:24;-1:-1:-1;;;;;;799:479:24:o;958:198:16:-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:16;;-1:-1:-1;1102:1:16;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;14:131:504:-;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:504:o;470:597::-;582:4;611:2;640;629:9;622:21;672:6;666:13;715:6;710:2;699:9;695:18;688:34;740:1;750:140;764:6;761:1;758:13;750:140;;;859:14;;;855:23;;849:30;825:17;;;844:2;821:26;814:66;779:10;;750:140;;;908:6;905:1;902:13;899:91;;;978:1;973:2;964:6;953:9;949:22;945:31;938:42;899:91;-1:-1:-1;1051:2:504;1030:15;-1:-1:-1;;1026:29:504;1011:45;;;;1058:2;1007:54;;470:597;-1:-1:-1;;;470:597:504:o;1072:180::-;1131:6;1184:2;1172:9;1163:7;1159:23;1155:32;1152:52;;;1200:1;1197;1190:12;1152:52;-1:-1:-1;1223:23:504;;1072:180;-1:-1:-1;1072:180:504:o;1439:247::-;1498:6;1551:2;1539:9;1530:7;1526:23;1522:32;1519:52;;;1567:1;1564;1557:12;1519:52;1606:9;1593:23;1625:31;1650:5;1625:31;:::i;1880:127::-;1941:10;1936:3;1932:20;1929:1;1922:31;1972:4;1969:1;1962:15;1996:4;1993:1;1986:15;2012:921;2080:6;2133:2;2121:9;2112:7;2108:23;2104:32;2101:52;;;2149:1;2146;2139:12;2101:52;2189:9;2176:23;2218:18;2259:2;2251:6;2248:14;2245:34;;;2275:1;2272;2265:12;2245:34;2313:6;2302:9;2298:22;2288:32;;2358:7;2351:4;2347:2;2343:13;2339:27;2329:55;;2380:1;2377;2370:12;2329:55;2416:2;2403:16;2438:2;2434;2431:10;2428:36;;;2444:18;;:::i;:::-;2519:2;2513:9;2487:2;2573:13;;-1:-1:-1;;2569:22:504;;;2593:2;2565:31;2561:40;2549:53;;;2617:18;;;2637:22;;;2614:46;2611:72;;;2663:18;;:::i;:::-;2703:10;2699:2;2692:22;2738:2;2730:6;2723:18;2778:7;2773:2;2768;2764;2760:11;2756:20;2753:33;2750:53;;;2799:1;2796;2789:12;2750:53;2855:2;2850;2846;2842:11;2837:2;2829:6;2825:15;2812:46;2900:1;2878:15;;;2895:2;2874:24;2867:35;;;;-1:-1:-1;2882:6:504;2012:921;-1:-1:-1;;;;;2012:921:504:o;3380:388::-;3448:6;3456;3509:2;3497:9;3488:7;3484:23;3480:32;3477:52;;;3525:1;3522;3515:12;3477:52;3564:9;3551:23;3583:31;3608:5;3583:31;:::i;:::-;3633:5;-1:-1:-1;3690:2:504;3675:18;;3662:32;3703:33;3662:32;3703:33;:::i;:::-;3755:7;3745:17;;;3380:388;;;;;:::o;3773:657::-;3942:2;3994:21;;;4064:13;;3967:18;;;4086:22;;;3913:4;;3942:2;4165:15;;;;4139:2;4124:18;;;3913:4;4208:196;4222:6;4219:1;4216:13;4208:196;;;4287:13;;-1:-1:-1;;;;;;4283:40:504;4271:53;;4379:15;;;;4344:12;;;;4244:1;4237:9;4208:196;;;-1:-1:-1;4421:3:504;;3773:657;-1:-1:-1;;;;;;3773:657:504:o;4435:456::-;4512:6;4520;4528;4581:2;4569:9;4560:7;4556:23;4552:32;4549:52;;;4597:1;4594;4587:12;4549:52;4636:9;4623:23;4655:31;4680:5;4655:31;:::i;:::-;4705:5;-1:-1:-1;4762:2:504;4747:18;;4734:32;4775:33;4734:32;4775:33;:::i;:::-;4435:456;;4827:7;;-1:-1:-1;;;4881:2:504;4866:18;;;;4853:32;;4435:456::o;5581:::-;5658:6;5666;5674;5727:2;5715:9;5706:7;5702:23;5698:32;5695:52;;;5743:1;5740;5733:12;5695:52;5782:9;5769:23;5801:31;5826:5;5801:31;:::i;:::-;5851:5;-1:-1:-1;5903:2:504;5888:18;;5875:32;;-1:-1:-1;5959:2:504;5944:18;;5931:32;5972:33;5931:32;5972:33;:::i;:::-;6024:7;6014:17;;;5581:456;;;;;:::o;6375:380::-;6454:1;6450:12;;;;6497;;;6518:61;;6572:4;6564:6;6560:17;6550:27;;6518:61;6625:2;6617:6;6614:14;6594:18;6591:38;6588:161;;;6671:10;6666:3;6662:20;6659:1;6652:31;6706:4;6703:1;6696:15;6734:4;6731:1;6724:15;6760:481;-1:-1:-1;;;;;7045:15:504;;;7027:34;;7097:15;;;7092:2;7077:18;;7070:43;7149:15;;7144:2;7129:18;;7122:43;-1:-1:-1;;;;;;7201:33:504;;;7196:2;7181:18;;7174:61;6976:3;6961:19;;6760:481::o;7246:277::-;7313:6;7366:2;7354:9;7345:7;7341:23;7337:32;7334:52;;;7382:1;7379;7372:12;7334:52;7414:9;7408:16;7467:5;7460:13;7453:21;7446:5;7443:32;7433:60;;7489:1;7486;7479:12;7528:338;7730:2;7712:21;;;7769:2;7749:18;;;7742:30;-1:-1:-1;;;7803:2:504;7788:18;;7781:44;7857:2;7842:18;;7528:338::o;8283:184::-;8353:6;8406:2;8394:9;8385:7;8381:23;8377:32;8374:52;;;8422:1;8419;8412:12;8374:52;-1:-1:-1;8445:16:504;;8283:184;-1:-1:-1;8283:184:504:o;9860:259::-;9938:6;9991:2;9979:9;9970:7;9966:23;9962:32;9959:52;;;10007:1;10004;9997:12;9959:52;10039:9;10033:16;10058:31;10083:5;10058:31;:::i;11048:127::-;11109:10;11104:3;11100:20;11097:1;11090:31;11140:4;11137:1;11130:15;11164:4;11161:1;11154:15;11180:128;11220:3;11251:1;11247:6;11244:1;11241:13;11238:39;;;11257:18;;:::i;:::-;-1:-1:-1;11293:9:504;;11180:128::o;11313:127::-;11374:10;11369:3;11365:20;11362:1;11355:31;11405:4;11402:1;11395:15;11429:4;11426:1;11419:15;11445:135;11484:3;-1:-1:-1;;11505:17:504;;11502:43;;;11525:18;;:::i;:::-;-1:-1:-1;11572:1:504;11561:13;;11445:135::o;11585:178::-;11622:3;11666:4;11659:5;11655:16;11690:7;11680:41;;11701:18;;:::i;:::-;-1:-1:-1;;11737:20:504;;11585:178;-1:-1:-1;;11585:178:504:o;12125:125::-;12165:4;12193:1;12190;12187:8;12184:34;;;12198:18;;:::i;:::-;-1:-1:-1;12235:9:504;;12125:125::o;12255:127::-;12316:10;12311:3;12307:20;12304:1;12297:31;12347:4;12344:1;12337:15;12371:4;12368:1;12361:15;12387:375;-1:-1:-1;;;;;12645:15:504;;;12627:34;;12697:15;;;;12692:2;12677:18;;12670:43;12744:2;12729:18;;12722:34;;;;12577:2;12562:18;;12387:375::o;19023:127::-;19084:10;19079:3;19075:20;19072:1;19065:31;19115:4;19112:1;19105:15;19139:4;19136:1;19129:15;19155:120;19195:1;19221;19211:35;;19226:18;;:::i;:::-;-1:-1:-1;19260:9:504;;19155:120::o;19702:245::-;19781:6;19789;19842:2;19830:9;19821:7;19817:23;19813:32;19810:52;;;19858:1;19855;19848:12;19810:52;-1:-1:-1;;19881:16:504;;19937:2;19922:18;;;19916:25;19881:16;;19916:25;;-1:-1:-1;19702:245:504:o;21592:168::-;21632:7;21698:1;21694;21690:6;21686:14;21683:1;21680:21;21675:1;21668:9;21661:17;21657:45;21654:71;;;21705:18;;:::i;:::-;-1:-1:-1;21745:9:504;;21592:168::o;21765:112::-;21797:1;21823;21813:35;;21828:18;;:::i;:::-;-1:-1:-1;21862:9:504;;21765:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_becomeImplementation(bytes)": "56e67728", + "_getExtensionFunctions()": "89f8132e", + "_updatePlugin(address)": "19f496c8", + "_withdrawAdminFees(uint256)": "a7b820df", + "_withdrawIonicFees(uint256)": "b0d58e49", + "accrualBlockNumber()": "6c540baf", + "adminFeeMantissa()": "8d02d9a1", + "approve(address,address)": "7e5465ba", + "borrow(uint256)": "c5ebeaec", + "borrowIndex()": "aa5af0fd", + "claim()": "4e71d92d", + "comptroller()": "5fe3b567", + "contractType()": "cb2ef6f7", + "decimals()": "313ce567", + "delegateType()": "2c436e5b", + "feeSeizeShareMantissa()": "be99f119", + "getCash()": "3b1d21a2", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "liquidateBorrow(address,uint256,address)": "f5e3c462", + "mint(uint256)": "a0712d68", + "name()": "06fdde03", + "plugin()": "ef01df4f", + "protocolSeizeShareMantissa()": "6752e702", + "redeem(uint256)": "db006a75", + "redeemUnderlying(uint256)": "852a12e3", + "repayBorrow(uint256)": "0e752702", + "repayBorrowBehalf(address,uint256)": "2608f818", + "reserveFactorMantissa()": "173b9904", + "seize(address,address,uint256)": "b2a02ff1", + "selfTransferIn(address,uint256)": "135f1334", + "selfTransferOut(address,uint256)": "067db1b3", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/CErc20RewardsDelegate.json b/packages/sdk/deployments/bob/CErc20RewardsDelegate.json new file mode 100644 index 000000000..bdf434050 --- /dev/null +++ b/packages/sdk/deployments/bob/CErc20RewardsDelegate.json @@ -0,0 +1,2540 @@ +{ + "address": "0xE1A3006be645a80F206311d9f18C866c204bA02f", + "abi": [ + { + "type": "function", + "name": "_becomeImplementation", + "inputs": [ + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "functionSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "_withdrawAdminFees", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_withdrawIonicFees", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "accrualBlockNumber", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "adminFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "_token", + "type": "address", + "internalType": "address" + }, + { + "name": "_spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "borrow", + "inputs": [ + { + "name": "borrowAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "borrowIndex", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "claim", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "comptroller", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "contractType", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "delegateType", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "feeSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCash", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "interestRateModel", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract InterestRateModel" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address payable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidateBorrow", + "inputs": [ + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mint", + "inputs": [ + { + "name": "mintAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "protocolSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redeem", + "inputs": [ + { + "name": "redeemTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redeemUnderlying", + "inputs": [ + { + "name": "redeemAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrow", + "inputs": [ + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrowBehalf", + "inputs": [ + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reserveFactorMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "seize", + "inputs": [ + { + "name": "liquidator", + "type": "address", + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "selfTransferIn", + "inputs": [ + { + "name": "from", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "selfTransferOut", + "inputs": [ + { + "name": "to", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalAdminFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBorrows", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalIonicFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalReserves", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "underlying", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "AccrueInterest", + "inputs": [ + { + "name": "cashPrior", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "interestAccumulated", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "borrowIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Borrow", + "inputs": [ + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrowAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "accountBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Failure", + "inputs": [ + { + "name": "error", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "info", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "detail", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "LiquidateBorrow", + "inputs": [ + { + "name": "liquidator", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "cTokenCollateral", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Mint", + "inputs": [ + { + "name": "minter", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "mintAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "mintTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAdminFee", + "inputs": [ + { + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewIonicFee", + "inputs": [ + { + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewMarketInterestRateModel", + "inputs": [ + { + "name": "oldInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + }, + { + "name": "newInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewReserveFactor", + "inputs": [ + { + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Redeem", + "inputs": [ + { + "name": "redeemer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "redeemAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "redeemTokens", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "RepayBorrow", + "inputs": [ + { + "name": "payer", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "accountBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservesAdded", + "inputs": [ + { + "name": "benefactor", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "addAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newTotalReserves", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "ReservesReduced", + "inputs": [ + { + "name": "admin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "reduceAmount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newTotalReserves", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xc64c8a13f2f7ca0519c0225bd07e4742bcd3245e8a6a41d2ce22e313bd549bd3", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xE1A3006be645a80F206311d9f18C866c204bA02f", + "transactionIndex": 1, + "gasUsed": "3875952", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc059bf08ca767a1d0c5033e591e5c256f197cbad0b9026d55201884572f875ab", + "transactionHash": "0xc64c8a13f2f7ca0519c0225bd07e4742bcd3245e8a6a41d2ce22e313bd549bd3", + "logs": [], + "blockNumber": 3777802, + "cumulativeGasUsed": "3919791", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Borrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "LiquidateBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "minter", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Mint", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "redeemer", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Redeem", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "payer", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "borrower", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "accountBorrows", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "RepayBorrow", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "benefactor", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "addAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesAdded", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "admin", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "reduceAmount", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newTotalReserves", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "ReservesReduced", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_token", + "type": "address" + }, + { + "internalType": "address", + "name": "_spender", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "claim" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "contractType", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "delegateType", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCash", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mint", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowBehalf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seize", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferIn", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "to", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "selfTransferOut" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_withdrawAdminFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_withdrawIonicFees(uint256)": { + "params": { + "withdrawAmount": "Amount of fees to withdraw" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrow(uint256)": { + "params": { + "borrowAmount": "The amount of the underlying asset to borrow" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "getCash()": { + "returns": { + "_0": "The quantity of underlying asset owned by this contract" + } + }, + "liquidateBorrow(address,uint256,address)": { + "params": { + "borrower": "The borrower of this cToken to be liquidated", + "cTokenCollateral": "The market in which to seize collateral from the borrower", + "repayAmount": "The amount of the underlying borrowed asset to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "mint(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "mintAmount": "The amount of the underlying asset to supply" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeem(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemTokens": "The number of cTokens to redeem into underlying" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "redeemUnderlying(uint256)": { + "details": "Accrues interest whether or not the operation succeeds, unless reverted", + "params": { + "redeemAmount": "The amount of underlying to redeem" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrow(uint256)": { + "params": { + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "repayBorrowBehalf(address,uint256)": { + "params": { + "borrower": "the account with the debt being payed off", + "repayAmount": "The amount to repay" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "seize(address,address,uint256)": { + "details": "Will fail unless called by another cToken during the process of liquidation. Its absolutely critical to use msg.sender as the borrowed cToken and not a parameter.", + "params": { + "borrower": "The account having collateral seized", + "liquidator": "The account receiving seized collateral", + "seizeTokens": "The number of cTokens to seize" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_becomeImplementation(bytes)": { + "notice": "Called by the delegator on a delegate to initialize it for duty" + }, + "_withdrawAdminFees(uint256)": { + "notice": "Accrues interest and reduces admin fees by transferring to admin" + }, + "_withdrawIonicFees(uint256)": { + "notice": "Accrues interest and reduces Ionic fees by transferring to Ionic" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "approve(address,address)": { + "notice": "token approval function" + }, + "borrow(uint256)": { + "notice": "Sender borrows assets from the protocol to their own address" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "claim()": { + "notice": "A reward token claim function to be overridden for use cases where rewardToken needs to be pulled in" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "getCash()": { + "notice": "Get cash balance of this cToken in the underlying asset" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "liquidateBorrow(address,uint256,address)": { + "notice": "The sender liquidates the borrowers collateral. The collateral seized is transferred to the liquidator." + }, + "mint(uint256)": { + "notice": "Sender supplies assets into the market and receives cTokens in exchange" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "redeem(uint256)": { + "notice": "Sender redeems cTokens in exchange for the underlying asset" + }, + "redeemUnderlying(uint256)": { + "notice": "Sender redeems cTokens in exchange for a specified amount of underlying asset" + }, + "repayBorrow(uint256)": { + "notice": "Sender repays their own borrow" + }, + "repayBorrowBehalf(address,uint256)": { + "notice": "Sender repays a borrow belonging to borrower" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "seize(address,address,uint256)": { + "notice": "Transfers collateral tokens (this market) to the liquidator." + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CErc20RewardsDelegate.sol": "CErc20RewardsDelegate" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20RewardsDelegate.sol": { + "keccak256": "0xf816a22a4d0855cd55c6ae69158efa6d20591594945d7352ca5f14ace93c4f3a", + "urls": [ + "bzz-raw://1815aa20ab9079bae895ee19597146a87c3f65a622536aeb50ee3df3e43d0f57", + "dweb:/ipfs/QmamrGVtXFgC2SvQaQ6hGGE12cgiiAKZgUk8sRtNxzXTAV" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50614526806100206000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c8063852a12e311610130578063b0d58e49116100b8578063c91a424f1161007c578063c91a424f1461044a578063cb2ef6f71461045d578063db006a751461048e578063f3fdb15a146104a1578063f5e3c462146104b457600080fd5b8063b0d58e49146103f9578063b2a02ff11461040c578063be99f1191461041f578063c3bf11cd1461042e578063c5ebeaec1461043757600080fd5b806395d89b41116100ff57806395d89b41146103b95780639826394b146103c1578063a0712d68146103ca578063a7b820df146103dd578063aa5af0fd146103f057600080fd5b8063852a12e31461037f57806389f8132e146103925780638d02d9a1146103a75780638f840ddd146103b057600080fd5b80633b1d21a2116101be57806361feacff1161018257806361feacff146103395780636752e702146103425780636c540baf146103505780636f307dc3146103595780637e5465ba1461036c57600080fd5b80633b1d21a2146102e557806347bd3718146102ed5780634e71d92d1461024a57806356e67728146102f65780635fe3b5671461030957600080fd5b8063173b990411610205578063173b99041461029e57806318160ddd146102a75780632608f818146102b05780632c436e5b146102c3578063313ce567146102d857600080fd5b8063067db1b31461023757806306fdde031461024c5780630e7527021461026a578063135f13341461028b575b600080fd5b61024a610245366004614032565b6104c7565b005b610254610511565b604051610261919061408a565b60405180910390f35b61027d6102783660046140bd565b61059f565b604051908152602001610261565b61027d610299366004614032565b61065c565b61027d60085481565b61027d600f5481565b61027d6102be366004614032565b6106a8565b60035b60405160ff9091168152602001610261565b6003546102c69060ff1681565b61027d610767565b61027d600b5481565b61024a6103043660046140ec565b610776565b6003546103219061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610261565b61027d600d5481565b61027d666379da05b6000081565b61027d60095481565b601354610321906001600160a01b031681565b61024a61037a36600461419d565b6107c8565b61027d61038d3660046140bd565b6108ca565b61039a61097d565b60405161026191906141d6565b61027d60065481565b61027d600c5481565b610254610b85565b61027d600e5481565b61027d6103d83660046140bd565b610b92565b61027d6103eb3660046140bd565b610c47565b61027d600a5481565b61027d6104073660046140bd565b610da5565b61027d61041a366004614224565b610e98565b61027d67016345785d8a000081565b61027d60075481565b61027d6104453660046140bd565b610ebc565b600054610321906001600160a01b031681565b6040805180820190915260158152744345726332305265776172647344656c656761746560581b6020820152610254565b61027d61049c3660046140bd565b610f6f565b600454610321906001600160a01b031681565b61027d6104c2366004614265565b611022565b3330146105035760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b61050d82826110e5565b5050565b6001805461051e906142a7565b80601f016020809104026020016040519081016040528092919081815260200182805461054a906142a7565b80156105975780601f1061056c57610100808354040283529160200191610597565b820191906000526020600020905b81548152906001019060200180831161057a57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105ec9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062d919061430f565b6106495760405162461bcd60e51b81526004016104fa90614331565b600061065483611166565b509392505050565b60003330146106955760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104fa565b61069f83836111f7565b90505b92915050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106f59261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610712573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610736919061430f565b6107525760405162461bcd60e51b81526004016104fa90614331565b600061075e84846113ca565b50949350505050565b600061077161145d565b905090565b3330148061078757506107876114ca565b6107c55760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b60448201526064016104fa565b50565b6107d06114ca565b6108055760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016104fa565b6013546001600160a01b03838116911614156108515760405162461bcd60e51b815260206004820152600b60248201526a21756e6465726c79696e6760a81b60448201526064016104fa565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af11580156108a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c5919061430f565b505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926109179261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610958919061430f565b6109745760405162461bcd60e51b81526004016104fa90614331565b6106a282611647565b60606003600061098b6116c4565b90508160ff16815161099d919061436f565b67ffffffffffffffff8111156109b5576109b56140d6565b6040519080825280602002602001820160405280156109de578160200160208202803683370190505b50925060005b8151811015610a44578181815181106109ff576109ff614387565b6020026020010151848281518110610a1957610a19614387565b6001600160e01b03199092166020928302919091019091015280610a3c8161439d565b9150506109e4565b50805163cb2ef6f760e01b908490610a5b856143b8565b9450610a6a9060ff861661436f565b81518110610a7a57610a7a614387565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b908490610aa9856143b8565b9450610ab89060ff861661436f565b81518110610ac857610ac8614387565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610af7856143b8565b9450610b069060ff861661436f565b81518110610b1657610b16614387565b6001600160e01b03199092166020928302919091019091015260ff821615610b805760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104fa565b505090565b6002805461051e906142a7565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610bdf9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c20919061430f565b610c3c5760405162461bcd60e51b81526004016104fa90614331565b600061065483611a8c565b600080610c5381611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906143d5565b504360095414610cd457610ccd600a6039611bcd565b9150610d96565b82610cdd61145d565b1015610cef57610ccd600e6038611bcd565b600d54831115610d0557610ccd6002603a611bcd565b82600d54610d1391906143ee565b600d55600354604080516303e1469160e61b81529051610d909261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8a9190614405565b846110e5565b60005b91505b610d9f81611c46565b50919050565b600080610db181611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1591906143d5565b504360095414610e2b57610ccd600a6035611bcd565b82610e3461145d565b1015610e4657610ccd600e6034611bcd565b600e54831115610e5c57610ccd60026036611bcd565b600083600e54610e6c91906143ee565b600e819055600054909150610e8a906001600160a01b0316856110e5565b6000925050610d9f81611c46565b60006001610ea581611b09565b610eb133868686611cc9565b915061065481611c46565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f099261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a919061430f565b610f665760405162461bcd60e51b81526004016104fa90614331565b6106a2826121b4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610fbc9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd919061430f565b6110195760405162461bcd60e51b81526004016104fa90614331565b6106a28261222f565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261106f9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa15801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b0919061430f565b6110cc5760405162461bcd60e51b81526004016104fa90614331565b60006110d98585856122ac565b509150505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091018252602080820180516001600160e01b031663a9059cbb60e01b1790528251808401909352601983527f544f4b454e5f5452414e534645525f4f55545f4641494c4544000000000000009083015261050d916123a6565b600080600061117481611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d891906143d5565b506111e4333386612403565b925092506111f181611c46565b50915091565b6013546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126891906143d5565b90506112f86323b872dd60e01b85308660405160240161128a93929190614438565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280601881526020017f544f4b454e5f5452414e534645525f494e5f4641494c454400000000000000008152506123a6565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136591906143d5565b9050818110156113b75760405162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f5700000000000060448201526064016104fa565b6113c182826143ee565b95945050505050565b60008060006113d881611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c91906143d5565b50611448338686612403565b9250925061145581611c46565b509250929050565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077191906143d5565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614405565b6001600160a01b0316336001600160a01b03161480156115c45750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c4919061430f565b8061164157506000546001600160a01b0316331480156116415750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611641919061430f565b91505090565b60008061165381611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906143d5565b50610d9333600085612812565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81611700846143b8565b93508360ff168151811061171657611716614387565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81611741846143b8565b93508360ff168151811061175757611757614387565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81611782846143b8565b93508360ff168151811061179857611798614387565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b816117c3846143b8565b93508360ff16815181106117d9576117d9614387565b6001600160e01b03199092166020928302919091019091015263073a938160e11b81611804846143b8565b93508360ff168151811061181a5761181a614387565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b81611845846143b8565b93508360ff168151811061185b5761185b614387565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b81611886846143b8565b93508360ff168151811061189c5761189c614387565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b816118c7846143b8565b93508360ff16815181106118dd576118dd614387565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b81611908846143b8565b93508360ff168151811061191e5761191e614387565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b81611949846143b8565b93508360ff168151811061195f5761195f614387565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b8161198a846143b8565b93508360ff16815181106119a0576119a0614387565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816119cb846143b8565b93508360ff16815181106119e1576119e1614387565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b81611a0c846143b8565b93508360ff1681518110611a2257611a22614387565b6001600160e01b03199092166020928302919091019091015260ff8216156106a25760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104fa565b6000806000611a9a81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe91906143d5565b506111e43385612e5a565b600054600160a01b900460ff16611b4f5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016104fa565b80611bbd57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611c0257611c02614422565b836061811115611c1457611c14614422565b60408051928352602083019190915260009082015260600160405180910390a182601181111561069f5761069f614422565b6000805460ff60a01b1916600160a01b179055806107c557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cae57600080fd5b505af1158015611cc2573d6000803e3d6000fd5b5050505050565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6191906143d5565b90508015611d7e57611d766003601d83613265565b9150506121ac565b846001600160a01b0316846001600160a01b03161415611da457611d766006601e611bcd565b611e09604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611e2c9085613307565b6020830181905282826003811115611e4657611e46614422565b6003811115611e5757611e57614422565b9052506000905081516003811115611e7157611e71614422565b14611ea157611e986009601c83600001516003811115611e9357611e93614422565b613265565b925050506121ac565b611ec0846040518060200160405280666379da05b60000815250613332565b6080820152604080516020810190915267016345785d8a00008152611ee6908590613332565b61014082018190526080820151611efd90866143ee565b611f0791906143ee565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e91906143d5565b60c082019081526040805160208101909152905181526080820151611f939190613355565b60a0820152604080516020810190915260c08201518152610140820151611fba9190613355565b61016082015260a0810151600c54611fd2919061436f565b60e08201526101408101516080820151600f54611fef91906143ee565b611ff991906143ee565b610120820152610160810151600e54612012919061436f565b6101008201526001600160a01b0386166000908152601060205260409020546060820151612040919061336d565b604083018190528282600381111561205a5761205a614422565b600381111561206b5761206b614422565b905250600090508151600381111561208557612085614422565b146120a757611e986009601b83600001516003811115611e9357611e93614422565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b16808252908490209290925560608501519251928352909290916000805160206144fa833981519152910160405180910390a3306001600160a01b0316856001600160a01b03166000805160206144fa833981519152836080015160405161215491815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b6000806121c081611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222491906143d5565b50610d933384613393565b60008061223b81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f91906143d5565b50610d9333846000612812565b60008060006122ba81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231e91906143d5565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561235f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238391906143d5565b506123903387878761372e565b9250925061239d81611c46565b50935093915050565b6013546000906123c0906001600160a01b03168484613beb565b8051909150156108c557808060200190518101906123de919061430f565b82906123fd5760405162461bcd60e51b81526004016104fa919061408a565b50505050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af1158015612471573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249591906143d5565b905080156124b6576124aa6003604383613265565b6000925092505061280a565b43600954146124cb576124aa600a6044611bcd565b6125146040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa15801561257e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a291906143d5565b60808201526000198514156125c057608081015160408201526125c8565b604081018590525b6125d68782604001516111f7565b60e0820181905260808201516125eb91613307565b60a083018190526020830182600381111561260857612608614422565b600381111561261957612619614422565b905250600090508160200151600381111561263657612636614422565b146126a95760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c454400000000000060648201526084016104fa565b6126b9600b548260e00151613307565b60c08301819052602083018260038111156126d6576126d6614422565b60038111156126e7576126e7614422565b905250600090508160200151600381111561270457612704614422565b1461276b5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b60648201526084016104fa565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b600082158061281f575081155b61286b5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e74000000000000000060448201526064016104fa565b6128ac6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290e91906143d5565b604082015283156129d15761138884600f5461292a91906143ee565b101561293657600f5493505b60608101849052604080516020810182529082015181526129579085613c7e565b608083018190526020830182600381111561297457612974614422565b600381111561298557612985614422565b90525060009050816020015160038111156129a2576129a2614422565b146129cc576129c46009602c83602001516003811115611e9357611e93614422565b9150506110de565b612b19565b600019831415612a5f57600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5c91906143d5565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac391906143d5565b90506103e8612ad285836143ee565b1015612adc578093505b612aea848360400151613cd0565b60608301819052600f546103e891612b01916143ee565b1015612b1057600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612b579130918b9190600401614438565b6020604051808303816000875af1158015612b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9a91906143d5565b90508015612bb857612baf6003602b83613265565b925050506110de565b4360095414612bcd57612baf600a602f611bcd565b612bdd600f548360600151613307565b60a0840181905260208401826003811115612bfa57612bfa614422565b6003811115612c0b57612c0b614422565b9052506000905082602001516003811115612c2857612c28614422565b14612c4a57612baf6009603184602001516003811115611e9357611e93614422565b6001600160a01b0386166000908152601060205260409020546060830151612c729190613307565b60c0840181905260208401826003811115612c8f57612c8f614422565b6003811115612ca057612ca0614422565b9052506000905082602001516003811115612cbd57612cbd614422565b14612cdf57612baf6009603084602001516003811115611e9357611e93614422565b8160800151612cec61145d565b1015612cfe57612baf600e6032611bcd565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612d349087906110e5565b306001600160a01b0316866001600160a01b03166000805160206144fa8339815191528460600151604051612d6b91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b5060009250612e50915050565b9695505050505050565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e190612e9890309089908990600401614438565b6020604051808303816000875af1158015612eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edb91906143d5565b90508015612efc57612ef06003602183613265565b6000925092505061325e565b4360095414612f1157612ef0600a6024611bcd565b612f526040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb491906143d5565b6040820152612fc386866111f7565b60c0820181905260408051602081018252908301518152612fe49190613d0b565b606083018190526020830182600381111561300157613001614422565b600381111561301257613012614422565b905250600090508160200151600381111561302f5761302f614422565b1461307c5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c454460448201526064016104fa565b60008160600151116130d05760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a454354454400000000000060448201526064016104fa565b8060600151600f546130e2919061436f565b608082015260608101516001600160a01b03871660009081526010602052604090205461310f919061436f565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b03166000805160206144fa83398151915283606001516040516131be91815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561323157600080fd5b505af1158015613245573d6000803e3d6000fd5b5060009250613252915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561329a5761329a614422565b8460618111156132ac576132ac614422565b604080519283526020830191909152810184905260600160405180910390a160038460118111156132df576132df614422565b146132fb578360118111156132f6576132f6614422565b6121ac565b6121ac826103e861436f565b60008083831161332657600061331d84866143ee565b9150915061325e565b5060039050600061325e565b6000670de0b6b3a764000061334b848460000151613d1b565b61069f9190614472565b6000806133628484613d5d565b90506121ac81613d8e565b6000808383018481106133855760009250905061325e565b60026000925092505061325e565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c906133d090309088908890600401614438565b6020604051808303816000875af11580156133ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341391906143d5565b90508015613430576134286003601083613265565b9150506106a2565b436009541461344557613428600a600c611bcd565b600061344f61145d565b90508381101561346e57613465600e600b611bcd565b925050506106a2565b61349a604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156134e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350791906143d5565b60208201819052613518908661336d565b604083018190528282600381111561353257613532614422565b600381111561354357613543614422565b905250600090508151600381111561355d5761355d614422565b146135895761357f6009600e83600001516003811115611e9357611e93614422565b93505050506106a2565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156135e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360691906143d5565b9250821561361b5761357f6003601085613265565b613627600b548661336d565b606083018190528282600381111561364157613641614422565b600381111561365257613652614422565b905250600090508151600381111561366c5761366c614422565b1461368e5761357f6009600d83600001516003811115611e9357611e93614422565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b556136ca86866110e5565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af11580156137a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c891906143d5565b905080156137e9576137dd6003601483613265565b60009250925050613be2565b43600954146137fe576137dd600a6018611bcd565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386191906143d5565b14613872576137dd600a6013611bcd565b866001600160a01b0316866001600160a01b03161415613898576137dd60066019611bcd565b846138a9576137dd60076017611bcd565b6000198514156138bf576137dd60076016611bcd565b6000806138cd898989612403565b90925090508115613902576138f48260118111156138ed576138ed614422565b601a611bcd565b600094509450505050613be2565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b9061393f9030908c908890600401614438565b6040805180830381865afa15801561395b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397f9190614486565b909250905081156139ee5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016104fa565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5b91906143d5565b1015613aa95760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016104fa565b60006001600160a01b038916301415613acf57613ac8308d8d85611cc9565b9050613b45565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613aff908f908f908790600401614438565b6020604051808303816000875af1158015613b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4291906143d5565b90505b8015613b7c5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b60448201526064016104fa565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b6060600080856001600160a01b031685604051613c0891906144aa565b6000604051808303816000865af19150503d8060008114613c45576040519150601f19603f3d011682016040523d82523d6000602084013e613c4a565b606091505b5091509150816113c157805115613c645780518082602001fd5b8360405162461bcd60e51b81526004016104fa919061408a565b600080600080613c8e8686613da6565b90925090506000826003811115613ca757613ca7614422565b14613cb8575091506000905061325e565b6000613cc382613d8e565b9350935050509250929050565b600081613ce584670de0b6b3a76400006144c6565b613cef9190614472565b9050613cfb82846144e5565b156106a25761069f60018261436f565b600080600080613c8e8686613e22565b600061069f83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613e95565b6040805160208101909152600081526040518060200160405280613d85856000015185613d1b565b90529392505050565b80516000906106a290670de0b6b3a764000090614472565b6000613dbe6040518060200160405280600081525090565b600080613dcf866000015186613ee8565b90925090506000826003811115613de857613de8614422565b14613e075750604080516020810190915260008152909250905061325e565b60408051602081019091529081526000969095509350505050565b6000613e3a6040518060200160405280600081525090565b600080613e4f670de0b6b3a764000087613ee8565b90925090506000826003811115613e6857613e68614422565b14613e875750604080516020810190915260008152909250905061325e565b613cc3818660000151613f27565b6000831580613ea2575082155b15613eaf575060006110de565b6000613ebb84866144c6565b905083613ec88683614472565b14839061075e5760405162461bcd60e51b81526004016104fa919061408a565b60008083613efb5750600090508061325e565b83830283613f098683614472565b14613f1c5760026000925092505061325e565b60009250905061325e565b6000613f3f6040518060200160405280600081525090565b600080613f5486670de0b6b3a7640000613ee8565b90925090506000826003811115613f6d57613f6d614422565b14613f8c5750604080516020810190915260008152909250905061325e565b600080613f998388613ff2565b90925090506000826003811115613fb257613fb2614422565b14613fd5578160405180602001604052806000815250955095505050505061325e565b604080516020810190915290815260009890975095505050505050565b60008082614006575060019050600061325e565b60006140128486614472565b915091509250929050565b6001600160a01b03811681146107c557600080fd5b6000806040838503121561404557600080fd5b82356140508161401d565b946020939093013593505050565b60005b83811015614079578181015183820152602001614061565b838111156123fd5750506000910152565b60208152600082518060208401526140a981604085016020870161405e565b601f01601f19169190910160400192915050565b6000602082840312156140cf57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156140fe57600080fd5b813567ffffffffffffffff8082111561411657600080fd5b818401915084601f83011261412a57600080fd5b81358181111561413c5761413c6140d6565b604051601f8201601f19908116603f01168101908382118183101715614164576141646140d6565b8160405282815287602084870101111561417d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156141b057600080fd5b82356141bb8161401d565b915060208301356141cb8161401d565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156142185783516001600160e01b031916835292840192918401916001016141f2565b50909695505050505050565b60008060006060848603121561423957600080fd5b83356142448161401d565b925060208401356142548161401d565b929592945050506040919091013590565b60008060006060848603121561427a57600080fd5b83356142858161401d565b925060208401359150604084013561429c8161401d565b809150509250925092565b600181811c908216806142bb57607f821691505b60208210811415610d9f57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561432157600080fd5b815180151581146110de57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561438257614382614359565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156143b1576143b1614359565b5060010190565b600060ff8216806143cb576143cb614359565b6000190192915050565b6000602082840312156143e757600080fd5b5051919050565b60008282101561440057614400614359565b500390565b60006020828403121561441757600080fd5b81516110de8161401d565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b6000826144815761448161445c565b500490565b6000806040838503121561449957600080fd5b505080516020909101519092909150565b600082516144bc81846020870161405e565b9190910192915050565b60008160001904831182151516156144e0576144e0614359565b500290565b6000826144f4576144f461445c565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "128:676:12:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106102325760003560e01c8063852a12e311610130578063b0d58e49116100b8578063c91a424f1161007c578063c91a424f1461044a578063cb2ef6f71461045d578063db006a751461048e578063f3fdb15a146104a1578063f5e3c462146104b457600080fd5b8063b0d58e49146103f9578063b2a02ff11461040c578063be99f1191461041f578063c3bf11cd1461042e578063c5ebeaec1461043757600080fd5b806395d89b41116100ff57806395d89b41146103b95780639826394b146103c1578063a0712d68146103ca578063a7b820df146103dd578063aa5af0fd146103f057600080fd5b8063852a12e31461037f57806389f8132e146103925780638d02d9a1146103a75780638f840ddd146103b057600080fd5b80633b1d21a2116101be57806361feacff1161018257806361feacff146103395780636752e702146103425780636c540baf146103505780636f307dc3146103595780637e5465ba1461036c57600080fd5b80633b1d21a2146102e557806347bd3718146102ed5780634e71d92d1461024a57806356e67728146102f65780635fe3b5671461030957600080fd5b8063173b990411610205578063173b99041461029e57806318160ddd146102a75780632608f818146102b05780632c436e5b146102c3578063313ce567146102d857600080fd5b8063067db1b31461023757806306fdde031461024c5780630e7527021461026a578063135f13341461028b575b600080fd5b61024a610245366004614032565b6104c7565b005b610254610511565b604051610261919061408a565b60405180910390f35b61027d6102783660046140bd565b61059f565b604051908152602001610261565b61027d610299366004614032565b61065c565b61027d60085481565b61027d600f5481565b61027d6102be366004614032565b6106a8565b60035b60405160ff9091168152602001610261565b6003546102c69060ff1681565b61027d610767565b61027d600b5481565b61024a6103043660046140ec565b610776565b6003546103219061010090046001600160a01b031681565b6040516001600160a01b039091168152602001610261565b61027d600d5481565b61027d666379da05b6000081565b61027d60095481565b601354610321906001600160a01b031681565b61024a61037a36600461419d565b6107c8565b61027d61038d3660046140bd565b6108ca565b61039a61097d565b60405161026191906141d6565b61027d60065481565b61027d600c5481565b610254610b85565b61027d600e5481565b61027d6103d83660046140bd565b610b92565b61027d6103eb3660046140bd565b610c47565b61027d600a5481565b61027d6104073660046140bd565b610da5565b61027d61041a366004614224565b610e98565b61027d67016345785d8a000081565b61027d60075481565b61027d6104453660046140bd565b610ebc565b600054610321906001600160a01b031681565b6040805180820190915260158152744345726332305265776172647344656c656761746560581b6020820152610254565b61027d61049c3660046140bd565b610f6f565b600454610321906001600160a01b031681565b61027d6104c2366004614265565b611022565b3330146105035760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064015b60405180910390fd5b61050d82826110e5565b5050565b6001805461051e906142a7565b80601f016020809104026020016040519081016040528092919081815260200182805461054a906142a7565b80156105975780601f1061056c57610100808354040283529160200191610597565b820191906000526020600020905b81548152906001019060200180831161057a57829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926105ec9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610609573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061062d919061430f565b6106495760405162461bcd60e51b81526004016104fa90614331565b600061065483611166565b509392505050565b60003330146106955760405162461bcd60e51b815260206004820152600560248201526410b9b2b63360d91b60448201526064016104fa565b61069f83836111f7565b90505b92915050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926106f59261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610712573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610736919061430f565b6107525760405162461bcd60e51b81526004016104fa90614331565b600061075e84846113ca565b50949350505050565b600061077161145d565b905090565b3330148061078757506107876114ca565b6107c55760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b60448201526064016104fa565b50565b6107d06114ca565b6108055760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016104fa565b6013546001600160a01b03838116911614156108515760405162461bcd60e51b815260206004820152600b60248201526a21756e6465726c79696e6760a81b60448201526064016104fa565b60405163095ea7b360e01b81526001600160a01b038281166004830152600019602483015283169063095ea7b3906044016020604051808303816000875af11580156108a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108c5919061430f565b505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926109179261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610934573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610958919061430f565b6109745760405162461bcd60e51b81526004016104fa90614331565b6106a282611647565b60606003600061098b6116c4565b90508160ff16815161099d919061436f565b67ffffffffffffffff8111156109b5576109b56140d6565b6040519080825280602002602001820160405280156109de578160200160208202803683370190505b50925060005b8151811015610a44578181815181106109ff576109ff614387565b6020026020010151848281518110610a1957610a19614387565b6001600160e01b03199092166020928302919091019091015280610a3c8161439d565b9150506109e4565b50805163cb2ef6f760e01b908490610a5b856143b8565b9450610a6a9060ff861661436f565b81518110610a7a57610a7a614387565b6001600160e01b0319909216602092830291909101909101528051632c436e5b60e01b908490610aa9856143b8565b9450610ab89060ff861661436f565b81518110610ac857610ac8614387565b6001600160e01b0319909216602092830291909101909101528051630adccee560e31b908490610af7856143b8565b9450610b069060ff861661436f565b81518110610b1657610b16614387565b6001600160e01b03199092166020928302919091019091015260ff821615610b805760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104fa565b505090565b6002805461051e906142a7565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610bdf9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610bfc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c20919061430f565b610c3c5760405162461bcd60e51b81526004016104fa90614331565b600061065483611a8c565b600080610c5381611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610c93573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cb791906143d5565b504360095414610cd457610ccd600a6039611bcd565b9150610d96565b82610cdd61145d565b1015610cef57610ccd600e6038611bcd565b600d54831115610d0557610ccd6002603a611bcd565b82600d54610d1391906143ee565b600d55600354604080516303e1469160e61b81529051610d909261010090046001600160a01b03169163f851a4409160048083019260209291908290030181865afa158015610d66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d8a9190614405565b846110e5565b60005b91505b610d9f81611c46565b50919050565b600080610db181611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610df1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e1591906143d5565b504360095414610e2b57610ccd600a6035611bcd565b82610e3461145d565b1015610e4657610ccd600e6034611bcd565b600e54831115610e5c57610ccd60026036611bcd565b600083600e54610e6c91906143ee565b600e819055600054909150610e8a906001600160a01b0316856110e5565b6000925050610d9f81611c46565b60006001610ea581611b09565b610eb133868686611cc9565b915061065481611c46565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610f099261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610f26573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f4a919061430f565b610f665760405162461bcd60e51b81526004016104fa90614331565b6106a2826121b4565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb892610fbc9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa158015610fd9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ffd919061430f565b6110195760405162461bcd60e51b81526004016104fa90614331565b6106a28261222f565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb89261106f9261010090910490911690339030906001600160e01b0319883516906004016142dc565b602060405180830381865afa15801561108c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110b0919061430f565b6110cc5760405162461bcd60e51b81526004016104fa90614331565b60006110d98585856122ac565b509150505b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091018252602080820180516001600160e01b031663a9059cbb60e01b1790528251808401909352601983527f544f4b454e5f5452414e534645525f4f55545f4641494c4544000000000000009083015261050d916123a6565b600080600061117481611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156111b4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111d891906143d5565b506111e4333386612403565b925092506111f181611c46565b50915091565b6013546040516370a0823160e01b815230600482015260009182916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126891906143d5565b90506112f86323b872dd60e01b85308660405160240161128a93929190614438565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280601881526020017f544f4b454e5f5452414e534645525f494e5f4641494c454400000000000000008152506123a6565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611341573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061136591906143d5565b9050818110156113b75760405162461bcd60e51b815260206004820152601a60248201527f544f4b454e5f5452414e534645525f494e5f4f564552464c4f5700000000000060448201526064016104fa565b6113c182826143ee565b95945050505050565b60008060006113d881611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143c91906143d5565b50611448338686612403565b9250925061145581611c46565b509250929050565b6013546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156114a6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077191906143d5565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015611523573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115479190614405565b6001600160a01b0316336001600160a01b03161480156115c45750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115a0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115c4919061430f565b8061164157506000546001600160a01b0316331480156116415750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561161d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611641919061430f565b91505090565b60008061165381611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611693573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116b791906143d5565b50610d9333600085612812565b60408051600d8082526101c082019092526060919060009082602082016101a08036833701905050905063140e25ad60e31b81611700846143b8565b93508360ff168151811061171657611716614387565b6001600160e01b03199092166020928302919091019091015263db006a7560e01b81611741846143b8565b93508360ff168151811061175757611757614387565b6001600160e01b03199092166020928302919091019091015263852a12e360e01b81611782846143b8565b93508360ff168151811061179857611798614387565b6001600160e01b03199092166020928302919091019091015263317afabb60e21b816117c3846143b8565b93508360ff16815181106117d9576117d9614387565b6001600160e01b03199092166020928302919091019091015263073a938160e11b81611804846143b8565b93508360ff168151811061181a5761181a614387565b6001600160e01b0319909216602092830291909101909101526304c11f0360e31b81611845846143b8565b93508360ff168151811061185b5761185b614387565b6001600160e01b031990921660209283029190910190910152637af1e23160e11b81611886846143b8565b93508360ff168151811061189c5761189c614387565b6001600160e01b031990921660209283029190910190910152631d8e90d160e11b816118c7846143b8565b93508360ff16815181106118dd576118dd614387565b6001600160e01b03199092166020928302919091019091015263b2a02ff160e01b81611908846143b8565b93508360ff168151811061191e5761191e614387565b6001600160e01b03199092166020928302919091019091015263067db1b360e01b81611949846143b8565b93508360ff168151811061195f5761195f614387565b6001600160e01b0319909216602092830291909101909101526304d7c4cd60e21b8161198a846143b8565b93508360ff16815181106119a0576119a0614387565b6001600160e01b03199092166020928302919091019091015263b0d58e4960e01b816119cb846143b8565b93508360ff16815181106119e1576119e1614387565b6001600160e01b03199092166020928302919091019091015263a7b820df60e01b81611a0c846143b8565b93508360ff1681518110611a2257611a22614387565b6001600160e01b03199092166020928302919091019091015260ff8216156106a25760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016104fa565b6000806000611a9a81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611ada573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611afe91906143d5565b506111e43385612e5a565b600054600160a01b900460ff16611b4f5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b60448201526064016104fa565b80611bbd57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611ba457600080fd5b505af1158015611bb8573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115611c0257611c02614422565b836061811115611c1457611c14614422565b60408051928352602083019190915260009082015260600160405180910390a182601181111561069f5761069f614422565b6000805460ff60a01b1916600160a01b179055806107c557600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611cae57600080fd5b505af1158015611cc2573d6000803e3d6000fd5b5050505050565b60035460405163d02f735160e01b81523060048201526001600160a01b038681166024830152858116604483015284811660648301526084820184905260009283926101009091049091169063d02f73519060a4016020604051808303816000875af1158015611d3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d6191906143d5565b90508015611d7e57611d766003601d83613265565b9150506121ac565b846001600160a01b0316846001600160a01b03161415611da457611d766006601e611bcd565b611e09604080516101808101909152806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038516600090815260106020526040902054611e2c9085613307565b6020830181905282826003811115611e4657611e46614422565b6003811115611e5757611e57614422565b9052506000905081516003811115611e7157611e71614422565b14611ea157611e986009601c83600001516003811115611e9357611e93614422565b613265565b925050506121ac565b611ec0846040518060200160405280666379da05b60000815250613332565b6080820152604080516020810190915267016345785d8a00008152611ee6908590613332565b61014082018190526080820151611efd90866143ee565b611f0791906143ee565b6060820152306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f6e91906143d5565b60c082019081526040805160208101909152905181526080820151611f939190613355565b60a0820152604080516020810190915260c08201518152610140820151611fba9190613355565b61016082015260a0810151600c54611fd2919061436f565b60e08201526101408101516080820151600f54611fef91906143ee565b611ff991906143ee565b610120820152610160810151600e54612012919061436f565b6101008201526001600160a01b0386166000908152601060205260409020546060820151612040919061336d565b604083018190528282600381111561205a5761205a614422565b600381111561206b5761206b614422565b905250600090508151600381111561208557612085614422565b146120a757611e986009601b83600001516003811115611e9357611e93614422565b60e0810151600c55610120810151600f55610100810151600e556020808201516001600160a01b0387811660008181526010855260408082209490945583860151928b16808252908490209290925560608501519251928352909290916000805160206144fa833981519152910160405180910390a3306001600160a01b0316856001600160a01b03166000805160206144fa833981519152836080015160405161215491815260200190565b60405180910390a360a081015160e08201516040805130815260208101939093528201527fa91e67c5ea634cd43a12c5a482724b03de01e85ca68702a53d0c2f45cb7c1dc59060600160405180910390a16000925050505b949350505050565b6000806121c081611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015612200573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061222491906143d5565b50610d933384613393565b60008061223b81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561227b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061229f91906143d5565b50610d9333846000612812565b60008060006122ba81611b09565b306001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061231e91906143d5565b50836001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af115801561235f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061238391906143d5565b506123903387878761372e565b9250925061239d81611c46565b50935093915050565b6013546000906123c0906001600160a01b03168484613beb565b8051909150156108c557808060200190518101906123de919061430f565b82906123fd5760405162461bcd60e51b81526004016104fa919061408a565b50505050565b600354604051631200453160e11b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283928392610100909204909116906324008a62906084016020604051808303816000875af1158015612471573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061249591906143d5565b905080156124b6576124aa6003604383613265565b6000925092505061280a565b43600954146124cb576124aa600a6044611bcd565b6125146040805161010081019091528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b0386166000908152601260205260409020600101546060820152306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa15801561257e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a291906143d5565b60808201526000198514156125c057608081015160408201526125c8565b604081018590525b6125d68782604001516111f7565b60e0820181905260808201516125eb91613307565b60a083018190526020830182600381111561260857612608614422565b600381111561261957612619614422565b905250600090508160200151600381111561263657612636614422565b146126a95760405162461bcd60e51b815260206004820152603a60248201527f52455041595f424f52524f575f4e45575f4143434f554e545f424f52524f575f60448201527f42414c414e43455f43414c43554c4154494f4e5f4641494c454400000000000060648201526084016104fa565b6126b9600b548260e00151613307565b60c08301819052602083018260038111156126d6576126d6614422565b60038111156126e7576126e7614422565b905250600090508160200151600381111561270457612704614422565b1461276b5760405162461bcd60e51b815260206004820152603160248201527f52455041595f424f52524f575f4e45575f544f54414c5f42414c414e43455f43604482015270105310d55310551253d397d19052531151607a1b60648201526084016104fa565b60a081810180516001600160a01b03898116600081815260126020908152604091829020948555600a5460019095019490945560c0870151600b81905560e088015195518251948f16855294840192909252820193909352606081019190915260808101919091527f1a2a22cb034d26d1854bdc6666a5b91fe25efbbb5dcad3b0355478d6f5c362a1910160405180910390a160e00151600093509150505b935093915050565b600082158061281f575081155b61286b5760405162461bcd60e51b815260206004820152601860248201527f2172656465656d20746f6b656e73206f7220616d6f756e74000000000000000060448201526064016104fa565b6128ac6040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290e91906143d5565b604082015283156129d15761138884600f5461292a91906143ee565b101561293657600f5493505b60608101849052604080516020810182529082015181526129579085613c7e565b608083018190526020830182600381111561297457612974614422565b600381111561298557612985614422565b90525060009050816020015160038111156129a2576129a2614422565b146129cc576129c46009602c83602001516003811115611e9357611e93614422565b9150506110de565b612b19565b600019831415612a5f57600354604051630cbb414760e11b81526001600160a01b0387811660048301523060248301526000604483015261010090920490911690631976828e90606401602060405180830381865afa158015612a38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a5c91906143d5565b92505b6000306001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac391906143d5565b90506103e8612ad285836143ee565b1015612adc578093505b612aea848360400151613cd0565b60608301819052600f546103e891612b01916143ee565b1015612b1057600f5460608301525b50608081018390525b600354606082015160405163eabe7d9160e01b815260009261010090046001600160a01b03169163eabe7d9191612b579130918b9190600401614438565b6020604051808303816000875af1158015612b76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9a91906143d5565b90508015612bb857612baf6003602b83613265565b925050506110de565b4360095414612bcd57612baf600a602f611bcd565b612bdd600f548360600151613307565b60a0840181905260208401826003811115612bfa57612bfa614422565b6003811115612c0b57612c0b614422565b9052506000905082602001516003811115612c2857612c28614422565b14612c4a57612baf6009603184602001516003811115611e9357611e93614422565b6001600160a01b0386166000908152601060205260409020546060830151612c729190613307565b60c0840181905260208401826003811115612c8f57612c8f614422565b6003811115612ca057612ca0614422565b9052506000905082602001516003811115612cbd57612cbd614422565b14612cdf57612baf6009603084602001516003811115611e9357611e93614422565b8160800151612cec61145d565b1015612cfe57612baf600e6032611bcd565b60a0820151600f5560c08201516001600160a01b0387166000908152601060205260409020556080820151612d349087906110e5565b306001600160a01b0316866001600160a01b03166000805160206144fa8339815191528460600151604051612d6b91815260200190565b60405180910390a36080820151606080840151604080516001600160a01b038b16815260208101949094528301527fe5b754fb1abb7f01b499791d0b820ae3b6af3424ac1c59768edb53f4ec31a929910160405180910390a1600354608083015160608401516040516351dff98960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906351dff98990608401600060405180830381600087803b158015612e2f57600080fd5b505af1158015612e43573d6000803e3d6000fd5b5060009250612e50915050565b9695505050505050565b600354604051634ef4c3e160e01b81526000918291829161010090046001600160a01b031690634ef4c3e190612e9890309089908990600401614438565b6020604051808303816000875af1158015612eb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612edb91906143d5565b90508015612efc57612ef06003602183613265565b6000925092505061325e565b4360095414612f1157612ef0600a6024611bcd565b612f526040805160e0810190915280600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b306001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612fb491906143d5565b6040820152612fc386866111f7565b60c0820181905260408051602081018252908301518152612fe49190613d0b565b606083018190526020830182600381111561300157613001614422565b600381111561301257613012614422565b905250600090508160200151600381111561302f5761302f614422565b1461307c5760405162461bcd60e51b815260206004820181905260248201527f4d494e545f45584348414e47455f43414c43554c4154494f4e5f4641494c454460448201526064016104fa565b60008160600151116130d05760405162461bcd60e51b815260206004820152601a60248201527f4d494e545f5a45524f5f43544f4b454e535f52454a454354454400000000000060448201526064016104fa565b8060600151600f546130e2919061436f565b608082015260608101516001600160a01b03871660009081526010602052604090205461310f919061436f565b60a082018190526080820151600f556001600160a01b0387166000818152601060209081526040918290209390935560c0840151606080860151835194855294840191909152908201929092527f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a1856001600160a01b0316306001600160a01b03166000805160206144fa83398151915283606001516040516131be91815260200190565b60405180910390a360035460c082015160608301516040516341c728b960e01b81523060048201526001600160a01b038a811660248301526044820193909352606481019190915261010090920416906341c728b990608401600060405180830381600087803b15801561323157600080fd5b505af1158015613245573d6000803e3d6000fd5b5060009250613252915050565b8160c001519350935050505b9250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa084601181111561329a5761329a614422565b8460618111156132ac576132ac614422565b604080519283526020830191909152810184905260600160405180910390a160038460118111156132df576132df614422565b146132fb578360118111156132f6576132f6614422565b6121ac565b6121ac826103e861436f565b60008083831161332657600061331d84866143ee565b9150915061325e565b5060039050600061325e565b6000670de0b6b3a764000061334b848460000151613d1b565b61069f9190614472565b6000806133628484613d5d565b90506121ac81613d8e565b6000808383018481106133855760009250905061325e565b60026000925092505061325e565b60035460405163368f515360e21b815260009182916101009091046001600160a01b03169063da3d454c906133d090309088908890600401614438565b6020604051808303816000875af11580156133ef573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061341391906143d5565b90508015613430576134286003601083613265565b9150506106a2565b436009541461344557613428600a600c611bcd565b600061344f61145d565b90508381101561346e57613465600e600b611bcd565b925050506106a2565b61349a604080516080810190915280600081526020016000815260200160008152602001600081525090565b306040516305eff7ef60e21b81526001600160a01b03888116600483015291909116906317bfdfbc90602401602060405180830381865afa1580156134e3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350791906143d5565b60208201819052613518908661336d565b604083018190528282600381111561353257613532614422565b600381111561354357613543614422565b905250600090508151600381111561355d5761355d614422565b146135895761357f6009600e83600001516003811115611e9357611e93614422565b93505050506106a2565b6003546040828101519051631de6c8a560e21b815230600482015260248101919091526101009091046001600160a01b03169063779b229490604401602060405180830381865afa1580156135e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360691906143d5565b9250821561361b5761357f6003601085613265565b613627600b548661336d565b606083018190528282600381111561364157613641614422565b600381111561365257613652614422565b905250600090508151600381111561366c5761366c614422565b1461368e5761357f6009600d83600001516003811115611e9357611e93614422565b6040808201516001600160a01b0388166000908152601260205291909120908155600a546001909101556060810151600b556136ca86866110e5565b60408082015160608084015183516001600160a01b038b168152602081018a9052938401929092528201527f13ed6866d4e1ee6da46f845c46d7e54120883d75c5ea9a2dacc1c4ca8984ab809060800160405180910390a160009695505050505050565b600354604051632fe3f38f60e11b81523060048201526001600160a01b03838116602483015286811660448301528581166064830152608482018590526000928392839261010090920490911690635fc7e71e9060a4016020604051808303816000875af11580156137a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137c891906143d5565b905080156137e9576137dd6003601483613265565b60009250925050613be2565b43600954146137fe576137dd600a6018611bcd565b43846001600160a01b0316636c540baf6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561383d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061386191906143d5565b14613872576137dd600a6013611bcd565b866001600160a01b0316866001600160a01b03161415613898576137dd60066019611bcd565b846138a9576137dd60076017611bcd565b6000198514156138bf576137dd60076016611bcd565b6000806138cd898989612403565b90925090508115613902576138f48260118111156138ed576138ed614422565b601a611bcd565b600094509450505050613be2565b60035460405163c488847b60e01b815260009182916101009091046001600160a01b03169063c488847b9061393f9030908c908890600401614438565b6040805180830381865afa15801561395b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061397f9190614486565b909250905081156139ee5760405162461bcd60e51b815260206004820152603360248201527f4c49515549444154455f434f4d5054524f4c4c45525f43414c43554c4154455f604482015272105353d5539517d4d152569157d19052531151606a1b60648201526084016104fa565b6040516370a0823160e01b81526001600160a01b038b811660048301528291908a16906370a0823190602401602060405180830381865afa158015613a37573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613a5b91906143d5565b1015613aa95760405162461bcd60e51b815260206004820152601860248201527f4c49515549444154455f5345495a455f544f4f5f4d554348000000000000000060448201526064016104fa565b60006001600160a01b038916301415613acf57613ac8308d8d85611cc9565b9050613b45565b60405163b2a02ff160e01b81526001600160a01b038a169063b2a02ff190613aff908f908f908790600401614438565b6020604051808303816000875af1158015613b1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b4291906143d5565b90505b8015613b7c5760405162461bcd60e51b8152602060048201526006602482015265217365697a6560d01b60448201526064016104fa565b604080516001600160a01b038e811682528d811660208301528183018790528b1660608201526080810184905290517f298637f684da70674f26509b10f07ec2fbc77a335ab1e7d6215a4b2484d8bb529181900360a00190a16000975092955050505050505b94509492505050565b6060600080856001600160a01b031685604051613c0891906144aa565b6000604051808303816000865af19150503d8060008114613c45576040519150601f19603f3d011682016040523d82523d6000602084013e613c4a565b606091505b5091509150816113c157805115613c645780518082602001fd5b8360405162461bcd60e51b81526004016104fa919061408a565b600080600080613c8e8686613da6565b90925090506000826003811115613ca757613ca7614422565b14613cb8575091506000905061325e565b6000613cc382613d8e565b9350935050509250929050565b600081613ce584670de0b6b3a76400006144c6565b613cef9190614472565b9050613cfb82846144e5565b156106a25761069f60018261436f565b600080600080613c8e8686613e22565b600061069f83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613e95565b6040805160208101909152600081526040518060200160405280613d85856000015185613d1b565b90529392505050565b80516000906106a290670de0b6b3a764000090614472565b6000613dbe6040518060200160405280600081525090565b600080613dcf866000015186613ee8565b90925090506000826003811115613de857613de8614422565b14613e075750604080516020810190915260008152909250905061325e565b60408051602081019091529081526000969095509350505050565b6000613e3a6040518060200160405280600081525090565b600080613e4f670de0b6b3a764000087613ee8565b90925090506000826003811115613e6857613e68614422565b14613e875750604080516020810190915260008152909250905061325e565b613cc3818660000151613f27565b6000831580613ea2575082155b15613eaf575060006110de565b6000613ebb84866144c6565b905083613ec88683614472565b14839061075e5760405162461bcd60e51b81526004016104fa919061408a565b60008083613efb5750600090508061325e565b83830283613f098683614472565b14613f1c5760026000925092505061325e565b60009250905061325e565b6000613f3f6040518060200160405280600081525090565b600080613f5486670de0b6b3a7640000613ee8565b90925090506000826003811115613f6d57613f6d614422565b14613f8c5750604080516020810190915260008152909250905061325e565b600080613f998388613ff2565b90925090506000826003811115613fb257613fb2614422565b14613fd5578160405180602001604052806000815250955095505050505061325e565b604080516020810190915290815260009890975095505050505050565b60008082614006575060019050600061325e565b60006140128486614472565b915091509250929050565b6001600160a01b03811681146107c557600080fd5b6000806040838503121561404557600080fd5b82356140508161401d565b946020939093013593505050565b60005b83811015614079578181015183820152602001614061565b838111156123fd5750506000910152565b60208152600082518060208401526140a981604085016020870161405e565b601f01601f19169190910160400192915050565b6000602082840312156140cf57600080fd5b5035919050565b634e487b7160e01b600052604160045260246000fd5b6000602082840312156140fe57600080fd5b813567ffffffffffffffff8082111561411657600080fd5b818401915084601f83011261412a57600080fd5b81358181111561413c5761413c6140d6565b604051601f8201601f19908116603f01168101908382118183101715614164576141646140d6565b8160405282815287602084870101111561417d57600080fd5b826020860160208301376000928101602001929092525095945050505050565b600080604083850312156141b057600080fd5b82356141bb8161401d565b915060208301356141cb8161401d565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b818110156142185783516001600160e01b031916835292840192918401916001016141f2565b50909695505050505050565b60008060006060848603121561423957600080fd5b83356142448161401d565b925060208401356142548161401d565b929592945050506040919091013590565b60008060006060848603121561427a57600080fd5b83356142858161401d565b925060208401359150604084013561429c8161401d565b809150509250925092565b600181811c908216806142bb57607f821691505b60208210811415610d9f57634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561432157600080fd5b815180151581146110de57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b634e487b7160e01b600052601160045260246000fd5b6000821982111561438257614382614359565b500190565b634e487b7160e01b600052603260045260246000fd5b60006000198214156143b1576143b1614359565b5060010190565b600060ff8216806143cb576143cb614359565b6000190192915050565b6000602082840312156143e757600080fd5b5051919050565b60008282101561440057614400614359565b500390565b60006020828403121561441757600080fd5b81516110de8161401d565b634e487b7160e01b600052602160045260246000fd5b6001600160a01b039384168152919092166020820152604081019190915260600190565b634e487b7160e01b600052601260045260246000fd5b6000826144815761448161445c565b500490565b6000806040838503121561449957600080fd5b505080516020909101519092909150565b600082516144bc81846020870161405e565b9190910192915050565b60008160001904831182151516156144e0576144e0614359565b500290565b6000826144f4576144f461445c565b50069056feddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3efa164736f6c634300080a000a", + "sourceMap": "128:676:12:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6703:158:13;;;;;;:::i;:::-;;:::i;:::-;;580:18:15;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4337:168:13;;;;;;:::i;:::-;;:::i;:::-;;;1452:25:504;;;1440:2;1425:18;4337:168:13;1306:177:504;6865:185:13;;;;;;:::i;:::-;;:::i;1783:36:15:-;;;;;;2626:26;;;;;;4771:208:13;;;;;;:::i;:::-;;:::i;598:88:12:-;680:1;598:88;;;1660:4:504;1648:17;;;1630:36;;1618:2;1603:18;598:88:12;1488:184:504;750:21:15;;;;;;;;;5851:95:13;;;:::i;2162:27:15:-;;;;;;1147:155:8;;;;;;:::i;:::-;;:::i;1148:35:15:-;;;;;;;;-1:-1:-1;;;;;1148:35:15;;;;;;-1:-1:-1;;;;;2925:32:504;;;2907:51;;2895:2;2880:18;1148:35:15;2735:229:504;2405:29:15;;;;;;3491:59;;3544:6;3491:59;;1896:33;;;;;;3740:25;;;;;-1:-1:-1;;;;;3740:25:15;;;372:222:12;;;;;;:::i;:::-;;:::i;3617:153:13:-;;;;;;:::i;:::-;;:::i;272:782:8:-;;;:::i;:::-;;;;;;;:::i;1551:31:15:-;;;;;;2282:28;;;;;;663:20;;;:::i;2529:29::-;;;;;;2669:152:13;;;;;;:::i;:::-;;:::i;8504:1035::-;;;;;;:::i;:::-;;:::i;2037:26:15:-;;;;;;7283:988:13;;;;;;:::i;:::-;;:::i;6476:223::-;;;;;;:::i;:::-;;:::i;3619:52:15:-;;3667:4;3619:52;;1668:31;;;;;;4015:133:13;;;;;;:::i;:::-;;:::i;336:33:15:-;;;;;-1:-1:-1;;;;;336:33:15;;;690:112:12;767:30;;;;;;;;;;;;-1:-1:-1;;;767:30:12;;;;690:112;;3150:133:13;;;;;;:::i;:::-;;:::i;1272:42:15:-;;;;;-1:-1:-1;;;;;1272:42:15;;;5433:264:13;;;;;;:::i;:::-;;:::i;6703:158::-;6788:10;6810:4;6788:27;6780:45;;;;-1:-1:-1;;;6780:45:13;;5815:2:504;6780:45:13;;;5797:21:504;5854:1;5834:18;;;5827:29;-1:-1:-1;;;5872:18:504;;;5865:35;5917:18;;6780:45:13;;;;;;;;;6831:25;6845:2;6849:6;6831:13;:25::i;:::-;6703:158;;:::o;580:18:15:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;4337:168:13:-;4419:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4435:11:::1;4452:32;4472:11;4452:19;:32::i;:::-;-1:-1:-1::0;4434:50:13;4337:168;-1:-1:-1;;;4337:168:13:o;6865:185::-;6946:7;6969:10;6991:4;6969:27;6961:45;;;;-1:-1:-1;;;6961:45:13;;5815:2:504;6961:45:13;;;5797:21:504;5854:1;5834:18;;;5827:29;-1:-1:-1;;;5872:18:504;;;5865:35;5917:18;;6961:45:13;5613:328:504;6961:45:13;7019:26;7032:4;7038:6;7019:12;:26::i;:::-;7012:33;;6865:185;;;;;:::o;4771:208::-;4877:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4893:11:::1;4910:48;4936:8;4946:11;4910:25;:48::i;:::-;-1:-1:-1::0;4892:66:13;4771:208;-1:-1:-1;;;;4771:208:13:o;5851:95::-;5902:7;5924:17;:15;:17::i;:::-;5917:24;;5851:95;:::o;1147:155:8:-;1230:10;1252:4;1230:27;;:47;;;1261:16;:14;:16::i;:::-;1222:75;;;;-1:-1:-1;;;1222:75:8;;7644:2:504;1222:75:8;;;7626:21:504;7683:2;7663:18;;;7656:30;-1:-1:-1;;;7702:18:504;;;7695:45;7757:18;;1222:75:8;7442:339:504;1222:75:8;1147:155;:::o;372:222:12:-;446:16;:14;:16::i;:::-;438:35;;;;-1:-1:-1;;;438:35:12;;7988:2:504;438:35:12;;;7970:21:504;8027:1;8007:18;;;8000:29;-1:-1:-1;;;8045:18:504;;;8038:36;8091:18;;438:35:12;7786:329:504;438:35:12;497:10;;-1:-1:-1;;;;;487:20:12;;;497:10;;487:20;;479:44;;;;-1:-1:-1;;;479:44:12;;8322:2:504;479:44:12;;;8304:21:504;8361:2;8341:18;;;8334:30;-1:-1:-1;;;8380:18:504;;;8373:41;8431:18;;479:44:12;8120:335:504;479:44:12;530:59;;-1:-1:-1;;;530:59:12;;-1:-1:-1;;;;;8652:32:504;;;530:59:12;;;8634:51:504;-1:-1:-1;;8701:18:504;;;8694:34;530:30:12;;;;;8607:18:504;;530:59:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;372:222;;:::o;3617:153:13:-;3705:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;3727:38:::1;3752:12;3727:24;:38::i;272:782:8:-:0;344:33;402:1;385:14;451:30;:28;:30::i;:::-;410:71;;552:8;520:40;;:22;:29;:40;;;;:::i;:::-;507:54;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;507:54:8;;487:74;;573:9;568:123;592:22;:29;588:1;:33;568:123;;;659:22;682:1;659:25;;;;;;;;:::i;:::-;;;;;;;636:17;654:1;636:20;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;636:48:8;;;:20;;;;;;;;;;;:48;623:3;;;;:::i;:::-;;;;568:123;;;-1:-1:-1;728:29:8;;-1:-1:-1;;;761:26:8;697:17;;715:10;;;:::i;:::-;;-1:-1:-1;715:42:8;;;;;;:::i;:::-;697:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;697:90:8;;;:61;;;;;;;;;;;:90;824:29;;-1:-1:-1;;;857:26:8;793:17;;811:10;;;:::i;:::-;;-1:-1:-1;811:42:8;;;;;;:::i;:::-;793:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;793:90:8;;;:61;;;;;;;;;;;:90;920:29;;-1:-1:-1;;;953:35:8;889:17;;907:10;;;:::i;:::-;;-1:-1:-1;907:42:8;;;;;;:::i;:::-;889:61;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;889:99:8;;;:61;;;;;;;;;;;:99;1003:13;;;;995:54;;;;-1:-1:-1;;;995:54:8;;9661:2:504;995:54:8;;;9643:21:504;9700:2;9680:18;;;9673:30;9739;9719:18;;;9712:58;9787:18;;995:54:8;9459:352:504;995:54:8;379:675;;272:782;:::o;663:20:15:-;;;;;;;:::i;2669:152:13:-;2743:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;2759:11:::1;2776:24;2789:10;2776:12;:24::i;8504:1035::-:0;8603:7;8587:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;8618:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;8687:12;8665:18;;:34;8661:135;;8716:73;8721:22;8745:43;8716:4;:73::i;:::-;8709:80;;;;8661:135;8894:14;8874:17;:15;:17::i;:::-;:34;8870:149;;;8925:87;8930:29;8961:50;8925:4;:87::i;8870:149::-;9046:14;;9029;:31;9025:124;;;9077:65;9082:15;9099:42;9077:4;:65::i;9025:124::-;9293:14;9276;;:31;;;;:::i;:::-;9259:14;:48:::0;9459:11:::1;::::0;9430:50:::1;::::0;;-1:-1:-1;;;9430:50:13;;;;9416:81:::1;::::0;9459:11:::1;::::0;::::1;-1:-1:-1::0;;;;;9459:11:13::1;::::0;9430:48:::1;::::0;:50:::1;::::0;;::::1;::::0;::::1;::::0;;;;;;;;9459:11;9430:50:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9482:14;9416:13;:81::i;:::-;9519:14;9511:23;9504:30;;41731:1;41738:29:::0;41757:9;41738:18;:29::i;:::-;8504:1035;;;;:::o;7283:988::-;7382:7;7366:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;7397:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;7466:12;7444:18;;:34;7440:135;;7495:73;7500:22;7524:43;7495:4;:73::i;7440:135::-;7605:14;7585:17;:15;:17::i;:::-;:34;7581:149;;;7636:87;7641:29;7672:50;7636:4;:87::i;7581:149::-;7757:14;;7740;:31;7736:124;;;7788:65;7793:15;7810:42;7788:4;:65::i;7736:124::-;7971:25;8016:14;7999;;:31;;;;:::i;:::-;8036:14;:34:::0;;;8201:10:::1;::::0;7971:59;;-1:-1:-1;8179:50:13::1;::::0;-1:-1:-1;;;;;8201:10:13::1;8214:14:::0;8179:13:::1;:50::i;:::-;8251:14;8236:30;;;41738:29:::0;41757:9;41738:18;:29::i;6476:223::-;6612:7;6597:4;41695:30;41715:9;41695:19;:30::i;:::-;6634:60:::1;6648:10;6660;6672:8;6682:11;6634:13;:60::i;:::-;6627:67;;41738:29:::0;41757:9;41738:18;:29::i;4015:133::-;4093:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;4115:28:::1;4130:12;4115:14;:28::i;3150:133::-:0;3228:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;3250:28:::1;3265:12;3250:14;:28::i;5433:264::-:0;5579:7;1080:10;;1108:11;;1064:93;;-1:-1:-1;;;1064:93:13;;-1:-1:-1;;;;;1080:10:13;;;;1064:35;;:93;;1080:10;1108:11;;;;;;;1122:10;;1142:4;;-1:-1:-1;;;;;;1149:7:13;;;;1064:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1049:138;;;;-1:-1:-1;;;1049:138:13;;;;;;;:::i;:::-;5595:11:::1;5612:64;5636:8;5646:11;5659:16;5612:23;:64::i;:::-;-1:-1:-1::0;5594:82:13;-1:-1:-1;;1193:1:13::1;5433:264:::0;;;;;:::o;11820:215::-;11921:68;;;-1:-1:-1;;;;;8652:32:504;;11921:68:13;;;8634:51:504;8701:18;;;;8694:34;;;11921:68:13;;;;;;;;;;8607:18:504;;;;11921:68:13;;;;;;;;-1:-1:-1;;;;;11921:68:13;-1:-1:-1;;;11921:68:13;;;11894:136;;;;;;;;;;;;;;;;;;:19;:136::i;27701:307::-;27789:7;27798;27773:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;27813:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;27950:53;27967:10;27979;27991:11;27950:16;:53::i;:::-;27943:60;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;27701:307;;;;:::o;10506:641::-;10638:10;;10623:51;;-1:-1:-1;;;10623:51:13;;10668:4;10623:51;;;2907::504;10584:7:13;;;;-1:-1:-1;;;;;10638:10:13;;;;10623:36;;2880:18:504;;10623:51:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10599:75;;10680:156;10730:36;;;10768:4;10782;10789:6;10707:89;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;-1:-1:-1;;;;;10707:89:13;;;;;;;-1:-1:-1;;;;;10707:89:13;;;;;;;;;;;10680:156;;;;;;;;;;;;;;;;;:19;:156::i;:::-;10941:10;;10926:51;;-1:-1:-1;;;10926:51:13;;10971:4;10926:51;;;2907::504;10903:20:13;;-1:-1:-1;;;;;10941:10:13;;10926:36;;2880:18:504;;10926:51:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10903:74;;11007:13;10991:12;:29;;10983:68;;;;-1:-1:-1;;;10983:68:13;;11105:2:504;10983:68:13;;;11087:21:504;11144:2;11124:18;;;11117:30;11183:28;11163:18;;;11156:56;11229:18;;10983:68:13;10903:350:504;10983:68:13;11064:28;11079:13;11064:12;:28;:::i;:::-;11057:35;10506:641;-1:-1:-1;;;;;10506:641:13:o;28319:343::-;28443:7;28452;28423:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;28469:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;28606:51;28623:10;28635:8;28645:11;28606:16;:51::i;:::-;28599:58;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;28319:343;;;;;;:::o;9784:136::-;9879:10;;9864:51;;-1:-1:-1;;;9864:51:13;;9909:4;9864:51;;;2907::504;9842:7:13;;-1:-1:-1;;;;;9879:10:13;;9864:36;;2880:18:504;;9864:51:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;10661:339:15:-;10710:4;10722:39;10793:11;;;;;;;;;-1:-1:-1;;;;;10793:11:15;10722:84;;10840:18;-1:-1:-1;;;;;10840:24:15;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10826:40:15;:10;-1:-1:-1;;;;;10826:40:15;;:79;;;;;10870:18;-1:-1:-1;;;;;10870:33:15;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10825:170;;;-1:-1:-1;10939:10:15;;-1:-1:-1;;;;;10939:10:15;10917;:33;:77;;;;;10954:18;-1:-1:-1;;;;;10954:38:15;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10812:183;;;10661:339;:::o;17924:280:13:-;18018:7;18002:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;18033:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;18159:40;18171:10;18183:1;18186:12;18159:11;:40::i;1203:1102::-:0;1359:22;;;1315:2;1359:22;;;;;;;;;1275:15;;1315:2;1298:14;;1315:2;1359:22;;;;;;;;;;-1:-1:-1;;1323:58:13;-1:-1:-1;;;;1323:58:13;1405:10;;;:::i;:::-;;;;1387:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1387:50:13;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;1443:17:13;1461:10;;;:::i;:::-;;;;1443:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1443:52:13;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1501:17:13;1519:10;;;:::i;:::-;;;;1501:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1501:62:13;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;1569:17:13;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:52:13;;;:29;;;;;;;;;;;:52;-1:-1:-1;;;1627:17:13;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:57:13;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;1690:17:13;1708:10;;;:::i;:::-;;;;1690:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1690:63:13;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1759:17:13;1777:10;;;:::i;:::-;;;;1759:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1759:61:13;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;1826:17:13;1844:10;;;:::i;:::-;;;;1826:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1826:53:13;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1885:17:13;1903:10;;;:::i;:::-;;;;1885:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1885:51:13;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;1942:17:13;1960:10;;;:::i;:::-;;;;1942:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1942:61:13;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2009:17:13;2027:10;;;:::i;:::-;;;;2009:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2009:60:13;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2075:17:13;2093:10;;;:::i;:::-;;;;2075:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2075:64:13;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2145:17:13;2163:10;;;:::i;:::-;;;;2145:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2145:64:13;;;:29;;;;;;;;;;;:64;2224:13;;;;2216:54;;;;-1:-1:-1;;;2216:54:13;;9661:2:504;2216:54:13;;;9643:21:504;9700:2;9680:18;;;9673:30;9739;9719:18;;;9712:58;9787:18;;2216:54:13;9459:352:504;13048:290:13;13128:7;13137;13112:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;13152:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;13300:33;13310:10;13322;13300:9;:33::i;42073:178::-:0;42140:11;;-1:-1:-1;;;42140:11:13;;;;42132:34;;;;-1:-1:-1;;;42132:34:13;;11460:2:504;42132:34:13;;;11442:21:504;11499:2;11479:18;;;11472:30;-1:-1:-1;;;11518:18:504;;;11511:40;11568:18;;42132:34:13;11258:334:504;42132:34:13;42177:9;42172:49;;42188:11;;;;;;;;;-1:-1:-1;;;;;42188:11:13;-1:-1:-1;;;;;42188:31:13;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42172:49;-1:-1:-1;42241:5:13;42227:19;;-1:-1:-1;;;;42227:19:13;;;42073:178::o;7757:151:23:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;11807:25:504;;;11863:2;11848:18;;11841:34;;;;7875:1:23;11891:18:504;;;11884:34;11795:2;11780:18;7838:39:23;;;;;;;7899:3;7891:12;;;;;;;;:::i;42551:169:13:-;42609:11;:18;;-1:-1:-1;;;;42609:18:13;-1:-1:-1;;;42609:18:13;;;42672:9;42667:48;;42683:11;;;;;;;;;-1:-1:-1;;;;;42683:11:13;-1:-1:-1;;;;;42683:30:13;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42551:169;:::o;38262:3163::-;38472:11;;:87;;-1:-1:-1;;;38472:87:13;;38505:4;38472:87;;;12226:34:504;-1:-1:-1;;;;;12296:15:504;;;12276:18;;;12269:43;12348:15;;;12328:18;;;12321:43;12400:15;;;12380:18;;;12373:43;12432:19;;;12425:35;;;38403:7:13;;;;38472:11;;;;;;;;:24;;12160:19:504;;38472:87:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38454:105;-1:-1:-1;38569:12:13;;38565:139;;38598:99;38609:27;38638:49;38689:7;38598:10;:99::i;:::-;38591:106;;;;;38565:139;38766:10;-1:-1:-1;;;;;38754:22:13;:8;-1:-1:-1;;;;;38754:22:13;;38750:134;;;38793:84;38798:26;38826:50;38793:4;:84::i;38750:134::-;38890:34;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38890:34:13;-1:-1:-1;;;;;39230:23:13;;;;;;:13;:23;;;;;;39222:45;;39255:11;39222:7;:45::i;:::-;39196:22;;;39181:86;;;39182:4;39181:86;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;39293:18:13;;-1:-1:-1;39277:12:13;;:34;;;;;;;;:::i;:::-;;39273:167;;39328:105;39339:16;39357:52;39419:4;:12;;;39411:21;;;;;;;;:::i;:::-;39328:10;:105::i;:::-;39321:112;;;;;;39273:167;39473:64;39478:11;39491:45;;;;;;;;3544:6:15;39491:45:13;;;39473:4;:64::i;:::-;39446:24;;;:91;39583:40;;;;;;;;;3667:4:15;39583:40:13;;39565:59;;39570:11;;39565:4;:59::i;:::-;39543:19;;;:81;;;39673:24;;;;39659:38;;:11;:38;:::i;:::-;:60;;;;:::i;:::-;39630:26;;;:89;41519:4;-1:-1:-1;;;;;39754:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39726:25;;;:69;;;39855:44;;;;;;;;;39871:25;;39855:44;;-1:-1:-1;;;39907:24:13;39829:108;;39855:44;39829:18;:108::i;:::-;39802:24;;;:135;39984:44;;;;;;;;;40000:25;;;;39984:44;;40030:19;;;;39965:85;;39984:44;39965:18;:85::i;:::-;39943:19;;;:107;40097:24;;;;40081:13;;:40;;40097:24;40081:40;:::i;:::-;40057:21;;;:64;40190:19;;;;40163:24;;;;40149:11;;:38;;40163:24;40149:38;:::i;:::-;:60;;;;:::i;:::-;40127:19;;;:82;40256:19;;;;40239:14;;:36;;40256:19;40239:36;:::i;:::-;40215:21;;;:60;-1:-1:-1;;;;;40333:25:13;;;;;;:13;:25;;;;;;40360:26;;;;40325:62;;40333:25;40325:7;:62::i;:::-;40297:24;;;40282:105;;;40283:4;40282:105;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;40413:18:13;;-1:-1:-1;40397:12:13;;:34;;;;;;;;:::i;:::-;;40393:167;;40448:105;40459:16;40477:52;40539:4;:12;;;40531:21;;;;;;;;:::i;40393:167::-;40752:21;;;;40736:13;:37;40793:19;;;;40779:11;:33;40835:21;;;;40818:14;:38;40889:22;;;;;-1:-1:-1;;;;;40863:23:13;;;-1:-1:-1;40863:23:13;;;:13;:23;;;;;;:48;;;;40945:24;;;;40917:25;;;;;;;;;;:52;;;;41044:26;;;;41013:58;;1452:25:504;;;40917::13;;40863:23;;-1:-1:-1;;;;;;;;;;;41013:58:13;1425:18:504;41013:58:13;;;;;;;41109:4;-1:-1:-1;;;;;41082:59:13;41091:8;-1:-1:-1;;;;;41082:59:13;-1:-1:-1;;;;;;;;;;;41116:4:13;:24;;;41082:59;;;;1452:25:504;;1440:2;1425:18;;1306:177;41082:59:13;;;;;;;;41181:24;;;;41207:21;;;;41152:77;;;41174:4;12673:51:504;;12755:2;12740:18;;12733:34;;;;12783:18;;12776:34;41152:77:13;;12661:2:504;12646:18;41152:77:13;;;;;;;41405:14;41390:30;;;;38262:3163;;;;;;;:::o;23833:267::-;23917:7;23901:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;23932:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24058:37;24070:10;24082:12;24058:11;:37::i;17296:270::-:0;17380:7;17364:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;17395:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;17521:40;17533:10;17545:12;17559:1;17521:11;:40::i;32809:437::-:0;32961:7;32970;32945:5;41695:30;41715:9;41695:19;:30::i;:::-;41519:4;-1:-1:-1;;;;;32985:34:13::1;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33035:16;-1:-1:-1::0;;;;;33027:40:13::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;33168:73;33189:10;33201:8;33211:11;33224:16;33168:20;:73::i;:::-;33161:80;;;;41738:29:::0;41757:9;41738:18;:29::i;:::-;32809:437;;;;;;;:::o;12419:253::-;12550:10;;12510:23;;12536:45;;-1:-1:-1;;;;;12550:10:13;12562:4;12568:12;12536:13;:45::i;:::-;12591:17;;12510:71;;-1:-1:-1;12591:21:13;12587:80;;12633:10;12622:30;;;;;;;;;;;;:::i;:::-;12654:12;12614:53;;;;;-1:-1:-1;;;12614:53:13;;;;;;;;:::i;:::-;;12504:168;12419:253;;:::o;29313:2997::-;29511:11;;:75;;-1:-1:-1;;;29511:75:13;;29550:4;29511:75;;;13090:34:504;-1:-1:-1;;;;;13160:15:504;;;13140:18;;;13133:43;13212:15;;;13192:18;;;13185:43;13244:18;;;13237:34;;;29427:7:13;;;;;;29511:11;;;;;;;;:30;;13024:19:504;;29511:75:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;29493:93;-1:-1:-1;29596:12:13;;29592:141;;29626:96;29637:27;29666:46;29714:7;29626:10;:96::i;:::-;29724:1;29618:108;;;;;;;29592:141;29832:12;29810:18;;:34;29806:137;;29862:70;29867:22;29891:40;29862:4;:70::i;29806:137::-;29949:32;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29949:32:13;-1:-1:-1;;;;;30084:24:13;;;;;;:14;:24;;;;;:38;;;30063:18;;;:59;41519:4;30226:50;;-1:-1:-1;;;30226:50:13;;-1:-1:-1;;;;;2925:32:504;;;30226:50:13;;;2907:51:504;30226:40:13;;;;;;;2880:18:504;;30226:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30204:19;;;:72;-1:-1:-1;;30348:32:13;;30344:142;;;30409:19;;;;30390:16;;;:38;30344:142;;;30449:16;;;:30;;;30344:142;31027:37;31040:5;31047:4;:16;;;31027:12;:37::i;:::-;31002:22;;;:62;;;31343:19;;;;31335:52;;:7;:52::i;:::-;31309:22;;;31294:93;;;31295:12;;;31294:93;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31417:18:13;;-1:-1:-1;31401:4:13;:12;;;:34;;;;;;;;:::i;:::-;;31393:105;;;;-1:-1:-1;;;31393:105:13;;13484:2:504;31393:105:13;;;13466:21:504;13523:2;13503:18;;;13496:30;13562:34;13542:18;;;13535:62;13633:28;13613:18;;;13606:56;13679:19;;31393:105:13;13282:422:504;31393:105:13;31544:45;31552:12;;31566:4;:22;;;31544:7;:45::i;:::-;31520:20;;;31505:84;;;31506:12;;;31505:84;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;31619:18:13;;-1:-1:-1;31603:4:13;:12;;;:34;;;;;;;;:::i;:::-;;31595:96;;;;-1:-1:-1;;;31595:96:13;;13911:2:504;31595:96:13;;;13893:21:504;13950:2;13930:18;;;13923:30;13989:34;13969:18;;;13962:62;-1:-1:-1;;;14040:18:504;;;14033:47;14097:19;;31595:96:13;13709:413:504;31595:96:13;31800:22;;;;;;-1:-1:-1;;;;;31763:24:13;;;;;;;:14;:24;;;;;;;;;:59;;;31869:11;;31828:38;;;;:52;;;;31901:20;;;;31886:12;:35;;;32000:22;;;;32024;;31971:98;;14442:15:504;;;14424:34;;14474:18;;;14467:43;;;;14526:18;;14519:34;;;;14584:2;14569:18;;14562:34;;;;14627:3;14612:19;;14605:35;;;;31971:98:13;;14358:19:504;31971:98:13;;;;;;;32282:22;;;32265:14;;-1:-1:-1;32282:22:13;-1:-1:-1;;29313:2997:13;;;;;;;:::o;19181:4407::-;19302:7;19325:19;;;:42;;-1:-1:-1;19348:19:13;;19325:42;19317:79;;;;-1:-1:-1;;;19317:79:13;;14853:2:504;19317:79:13;;;14835:21:504;14892:2;14872:18;;;14865:30;14931:26;14911:18;;;14904:54;14975:18;;19317:79:13;14651:348:504;19317:79:13;19403:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19403:27:13;41519:4;-1:-1:-1;;;;;19465:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19437:25;;;:69;19517:18;;19513:1634;;19637:4;19620:14;19606:11;;:28;;;;:::i;:::-;:35;19602:69;;;19660:11;;19643:28;;19602:69;19886:17;;;:34;;;19992:44;;;;;;;;20008:25;;;;19992:44;;19965:103;;19906:14;19965:17;:103::i;:::-;19944:17;;;19929:139;;;19930:12;;;19929:139;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;20096:18:13;;-1:-1:-1;20080:4:13;:12;;;:34;;;;;;;;:::i;:::-;;20076:182;;20143:106;20154:16;20172:53;20235:4;:12;;;20227:21;;;;;;;;:::i;20143:106::-;20126:123;;;;;20076:182;19513:1634;;;-1:-1:-1;;20282:14:13;:35;20278:150;;;20346:11;;:73;;-1:-1:-1;;;20346:73:13;;-1:-1:-1;;;;;15273:15:504;;;20346:73:13;;;15255:34:504;20405:4:13;15305:18:504;;;15298:43;20413:5:13;15357:18:504;;;15350:50;20346:11:13;;;;;;;;:32;;15190:18:504;;20346:73:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20329:90;;20278:150;20493:31;41519:4;-1:-1:-1;;;;;20527:46:13;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20493:82;-1:-1:-1;20630:4:13;20587:40;20613:14;20493:82;20587:40;:::i;:::-;:47;20583:93;;;20653:23;20636:40;;20583:93;20903:53;20914:14;20930:4;:25;;;20903:10;:53::i;:::-;20883:17;;;:73;;;21026:11;;21060:4;;21026:31;;;:::i;:::-;:38;21022:75;;;21086:11;;21066:17;;;:31;21022:75;-1:-1:-1;21106:17:13;;;:34;;;19513:1634;21208:11;;21259:17;;;;21208:69;;-1:-1:-1;;;21208:69:13;;21190:15;;21208:11;;;-1:-1:-1;;;;;21208:11:13;;:25;;:69;;21242:4;;21249:8;;21259:17;21208:69;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21190:87;-1:-1:-1;21287:12:13;;21283:130;;21316:90;21327:27;21356:40;21398:7;21316:10;:90::i;:::-;21309:97;;;;;;21283:130;21512:12;21490:18;;:34;21486:126;;21541:64;21546:22;21570:34;21541:4;:64::i;21486:126::-;21876:39;21884:11;;21897:4;:17;;;21876:7;:39::i;:::-;21853:19;;;21838:77;;;21839:12;;;21838:77;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;21941:18:13;;-1:-1:-1;21925:4:13;:12;;;:34;;;;;;;;:::i;:::-;;21921:177;;21984:107;21995:16;22013:54;22077:4;:12;;;22069:21;;;;;;;;:::i;21921:177::-;-1:-1:-1;;;;;22152:23:13;;;;;;:13;:23;;;;;;22177:17;;;;22144:51;;22152:23;22144:7;:51::i;:::-;22119:21;;;22104:91;;;22105:12;;;22104:91;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;22221:18:13;;-1:-1:-1;22205:4:13;:12;;;:34;;;;;;;;:::i;:::-;;22201:180;;22264:110;22275:16;22293:57;22360:4;:12;;;22352:21;;;;;;;;:::i;22201:180::-;22471:4;:17;;;22451;:15;:17::i;:::-;:37;22447:146;;;22505:81;22510:29;22541:44;22505:4;:81::i;22447:146::-;22779:19;;;;22765:11;:33;22830:21;;;;-1:-1:-1;;;;;22804:23:13;;;;;;:13;:23;;;;;:47;23215:17;;;;23191:42;;22818:8;;23191:13;:42::i;:::-;23327:4;-1:-1:-1;;;;;23300:52:13;23309:8;-1:-1:-1;;;;;23300:52:13;-1:-1:-1;;;;;;;;;;;23334:4:13;:17;;;23300:52;;;;1452:25:504;;1440:2;1425:18;;1306:177;23300:52:13;;;;;;;;23380:17;;;;23399;;;;;23363:54;;;-1:-1:-1;;;;;12691:32:504;;12673:51;;12755:2;12740:18;;12733:34;;;;12783:18;;12776:34;23363:54:13;;12646:18:504;23363:54:13;;;;;;;23459:11;;23509:17;;;;23528;;;;23459:87;;-1:-1:-1;;;23459:87:13;;23492:4;23459:87;;;15680:34:504;-1:-1:-1;;;;;15750:15:504;;;15730:18;;;15723:43;15782:18;;;15775:34;;;;15825:18;;;15818:34;;;;23459:11:13;;;;;;:24;;15614:19:504;;23459:87:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;23568:14:13;;-1:-1:-1;23560:23:13;;-1:-1:-1;;23560:23:13;;23553:30;19181:4407;-1:-1:-1;;;;;;19181:4407:13:o;13996:2971::-;14146:11;;:58;;-1:-1:-1;;;14146:58:13;;14069:7;;;;;;14146:11;;;-1:-1:-1;;;;;14146:11:13;;:23;;:58;;14178:4;;14185:6;;14193:10;;14146:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14128:76;-1:-1:-1;14214:12:13;;14210:133;;14244:88;14255:27;14284:38;14324:7;14244:10;:88::i;:::-;14334:1;14236:100;;;;;;;14210:133;14442:12;14420:18;;:34;14416:129;;14472:62;14477:22;14501:32;14472:4;:62::i;14416:129::-;14551:25;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14551:25:13;41519:4;-1:-1:-1;;;;;14611:39:13;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14583:25;;;:69;15550:32;15563:6;15571:10;15550:12;:32::i;:::-;15526:21;;;:56;;;15890:44;;;;;;;;15906:25;;;;15890:44;;15831:109;;15526:56;15831:22;:109::i;:::-;15812:15;;;15797:143;;;15798:12;;;15797:143;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;15970:18:13;;-1:-1:-1;15954:4:13;:12;;;:34;;;;;;;;:::i;:::-;;15946:79;;;;-1:-1:-1;;;15946:79:13;;16065:2:504;15946:79:13;;;16047:21:504;;;16084:18;;;16077:30;16143:34;16123:18;;;16116:62;16195:18;;15946:79:13;15863:356:504;15946:79:13;16057:1;16039:4;:15;;;:19;16031:58;;;;-1:-1:-1;;;16031:58:13;;16426:2:504;16031:58:13;;;16408:21:504;16465:2;16445:18;;;16438:30;16504:28;16484:18;;;16477:56;16550:18;;16031:58:13;16224:350:504;16031:58:13;16360:4;:15;;;16346:11;;:29;;;;:::i;:::-;16324:19;;;:51;16430:15;;;;-1:-1:-1;;;;;16406:21:13;;;;;;:13;:21;;;;;;:39;;16430:15;16406:39;:::i;:::-;16382:21;;;:63;;;16527:19;;;;16513:11;:33;-1:-1:-1;;;;;16552:21:13;;;;;;:13;:21;;;;;;;;;:45;;;;16675:21;;;;16698:15;;;;;16662:52;;12673:51:504;;;12740:18;;;12733:34;;;;12783:18;;;12776:34;;;;16662:52:13;;12646:18:504;16662:52:13;;;;;;;16749:6;-1:-1:-1;;;;;16725:48:13;16742:4;-1:-1:-1;;;;;16725:48:13;-1:-1:-1;;;;;;;;;;;16757:4:13;:15;;;16725:48;;;;1452:25:504;;1440:2;1425:18;;1306:177;16725:48:13;;;;;;;;16815:11;;16861:21;;;;16884:15;;;;16815:85;;-1:-1:-1;;;16815:85:13;;16846:4;16815:85;;;15680:34:504;-1:-1:-1;;;;;15750:15:504;;;15730:18;;;15723:43;15782:18;;;15775:34;;;;15825:18;;;15818:34;;;;16815:11:13;;;;;;:22;;15614:19:504;;16815:85:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16923:14:13;;-1:-1:-1;16915:23:13;;-1:-1:-1;;16915:23:13;;16940:4;:21;;;16907:55;;;;;;13996:2971;;;;;;:::o;8016:262:23:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;11807:25:504;;;11863:2;11848:18;;11841:34;;;;11891:18;;11884:34;;;11795:2;11780:18;8140:49:23;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1280:213:16:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:16;;-1:-1:-1;1480:1:16;1443:39;;4229:119:25;4291:7;450:4;4313:19;4318:1;4321;:10;;;4313:4;:19::i;:::-;:30;;;;:::i;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1567:263:16:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:16;-1:-1:-1;1730:30:16;;1710:116;1789:26;1817:1;1781:38;;;;;;;24486:2981:13;24635:11;;:64;;-1:-1:-1;;;24635:64:13;;24565:7;;;;24635:11;;;;-1:-1:-1;;;;;24635:11:13;;:25;;:64;;24669:4;;24676:8;;24686:12;;24635:64;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24617:82;-1:-1:-1;24709:12:13;;24705:130;;24738:90;24749:27;24778:40;24820:7;24738:10;:90::i;:::-;24731:97;;;;;24705:130;24934:12;24912:18;;:34;24908:126;;24963:64;24968:22;24992:34;24963:4;:64::i;24908:126::-;25111:17;25131;:15;:17::i;:::-;25111:37;;25171:12;25159:9;:24;25155:126;;;25200:74;25205:29;25236:37;25200:4;:74::i;:::-;25193:81;;;;;;25155:126;25287:27;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25287:27:13;41519:4;25555:50;;-1:-1:-1;;;25555:50:13;;-1:-1:-1;;;;;2925:32:504;;;25555:50:13;;;2907:51:504;25555:40:13;;;;;;;2880:18:504;;25555:50:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25533:19;;;:72;;;25653:42;;25682:12;25653:7;:42::i;:::-;25627:22;;;25612:83;;;25613:4;25612:83;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;25721:18:13;;-1:-1:-1;25705:12:13;;:34;;;;;;;;:::i;:::-;;25701:227;;25764:157;25786:16;25814:64;25898:4;:12;;;25890:21;;;;;;;;:::i;25764:157::-;25749:172;;;;;;;25701:227;25997:11;;26043:22;;;;;25997:69;;-1:-1:-1;;;25997:69:13;;26036:4;25997:69;;;8634:51:504;8701:18;;;8694:34;;;;25997:11:13;;;;-1:-1:-1;;;;;25997:11:13;;:30;;8607:18:504;;25997:69:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25987:79;-1:-1:-1;26076:12:13;;26072:130;;26105:90;26116:27;26145:40;26187:7;26105:10;:90::i;26072:130::-;26247:35;26255:12;;26269;26247:7;:35::i;:::-;26223:20;;;26208:74;;;26209:4;26208:74;;;;;;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;-1:-1:-1;26308:18:13;;-1:-1:-1;26292:12:13;;:34;;;;;;;;:::i;:::-;;26288:178;;26351:108;26362:16;26380:55;26445:4;:12;;;26437:21;;;;;;;;:::i;26288:178::-;26679:22;;;;;-1:-1:-1;;;;;26642:24:13;;;;;;:14;:24;;;;;;:59;;;26748:11;;26707:38;;;;:52;26780:20;;;;26765:12;:35;27136:37;26657:8;27160:12;27136:13;:37::i;:::-;27249:22;;;;;27273:20;;;;;27218:76;;-1:-1:-1;;;;;17409:32:504;;17391:51;;17473:2;17458:18;;17451:34;;;17501:18;;;17494:34;;;;17544:18;;17537:34;27218:76:13;;17378:3:504;17363:19;27218:76:13;;;;;;;27447:14;27432:30;24486:2981;-1:-1:-1;;;;;;24486:2981:13:o;33827:3389::-;34062:11;;:138;;-1:-1:-1;;;34062:138:13;;34112:4;34062:138;;;12226:34:504;-1:-1:-1;;;;;12296:15:504;;;12276:18;;;12269:43;12348:15;;;12328:18;;;12321:43;12400:15;;;12380:18;;;12373:43;12432:19;;;12425:35;;;33980:7:13;;;;;;34062:11;;;;;;;;:34;;12160:19:504;;34062:138:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34044:156;-1:-1:-1;34210:12:13;;34206:138;;34240:93;34251:27;34280:43;34325:7;34240:10;:93::i;:::-;34335:1;34232:105;;;;;;;34206:138;34443:12;34421:18;;:34;34417:134;;34473:67;34478:22;34502:37;34473:4;:67::i;34417:134::-;34694:12;34652:16;-1:-1:-1;;;;;34645:43:13;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:61;34641:172;;34724:78;34729:22;34753:48;34724:4;:78::i;34641:172::-;34875:10;-1:-1:-1;;;;;34863:22:13;:8;-1:-1:-1;;;;;34863:22:13;;34859:133;;;34903:78;34908:26;34936:44;34903:4;:78::i;34859:133::-;35036:16;35032:135;;35070:86;35075:36;35113:42;35070:4;:86::i;35032:135::-;-1:-1:-1;;35212:11:13;:32;35208:155;;;35262:90;35267:36;35305:46;35262:4;:90::i;35208:155::-;35406:24;35432:25;35461:51;35478:10;35490:8;35500:11;35461:16;:51::i;:::-;35405:107;;-1:-1:-1;35405:107:13;-1:-1:-1;35522:43:13;;35518:154;;35583:78;35594:16;35588:23;;;;;;;;:::i;:::-;35613:47;35583:4;:78::i;:::-;35663:1;35575:90;;;;;;;;;35518:154;35908:11;;:117;;-1:-1:-1;;;35908:117:13;;35859:24;;;;35908:11;;;;-1:-1:-1;;;;;35908:11:13;;:41;;:117;;35965:4;;35978:16;;36002:17;;35908:117;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35858:167;;-1:-1:-1;35858:167:13;-1:-1:-1;36039:43:13;;36031:107;;;;-1:-1:-1;;;36031:107:13;;18034:2:504;36031:107:13;;;18016:21:504;18073:2;18053:18;;;18046:30;18112:34;18092:18;;;18085:62;-1:-1:-1;;;18163:18:504;;;18156:49;18222:19;;36031:107:13;17832:415:504;36031:107:13;36221:45;;-1:-1:-1;;;36221:45:13;;-1:-1:-1;;;;;2925:32:504;;;36221:45:13;;;2907:51:504;36270:11:13;;36221:35;;;;;;2880:18:504;;36221:45:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;36213:97;;;;-1:-1:-1;;;36213:97:13;;18454:2:504;36213:97:13;;;18436:21:504;18493:2;18473:18;;;18466:30;18532:26;18512:18;;;18505:54;18576:18;;36213:97:13;18252:348:504;36213:97:13;36428:18;-1:-1:-1;;;;;36456:33:13;;36484:4;36456:33;36452:229;;;36512:63;36534:4;36541:10;36553:8;36563:11;36512:13;:63::i;:::-;36499:76;;36452:229;;;36609:65;;-1:-1:-1;;;36609:65:13;;-1:-1:-1;;;;;36609:30:13;;;;;:65;;36640:10;;36652:8;;36662:11;;36609:65;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36596:78;;36452:229;36776:37;;36768:56;;;;-1:-1:-1;;;36768:56:13;;18807:2:504;36768:56:13;;;18789:21:504;18846:1;18826:18;;;18819:29;-1:-1:-1;;;18864:18:504;;;18857:36;18910:18;;36768:56:13;18605:329:504;36768:56:13;36878:87;;;-1:-1:-1;;;;;19254:15:504;;;19236:34;;19306:15;;;19301:2;19286:18;;19279:43;19338:18;;;19331:34;;;19401:15;;19396:2;19381:18;;19374:43;19448:3;19433:19;;19426:35;;;36878:87:13;;;;;;;19185:3:504;36878:87:13;;;37176:14;37160:51;-1:-1:-1;37193:17:13;;-1:-1:-1;;;;;;33827:3389:13;;;;;;;;:::o;43409:679::-;43529:12;43550;43564:23;43591:6;-1:-1:-1;;;;;43591:11:13;43603:4;43591:17;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43549:59;;;;43620:7;43615:445;;43701:17;;:21;43697:357;;43925:10;43919:17;43975:15;43962:10;43958:2;43954:19;43947:44;43697:357;44032:12;44025:20;;-1:-1:-1;;;44025:20:13;;;;;;;;:::i;2379:288:24:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:24;-1:-1:-1;2560:18:24;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:24;-1:-1:-1;2601:1:24;;-1:-1:-1;2588:15:24;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;18422:139:13:-;18487:11;18525:1;18513:8;:1;18517:4;18513:8;:::i;:::-;18512:14;;;;:::i;:::-;18506:20;-1:-1:-1;18536:5:13;18540:1;18536;:5;:::i;:::-;:10;18532:24;;18548:8;18555:1;18548:8;;:::i;3834:312:24:-;3925:9;3936:7;3952:13;3967:19;3990:31;4005:6;4013:7;3990:14;:31::i;4796:123:25:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:25;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:25:o;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:24:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:24;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:24;-1:-1:-1;2136:18:24;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:24;;;;;;;;;-1:-1:-1;2178:20:24;;2172:4;;-1:-1:-1;2178:20:24;-1:-1:-1;2164:35:24;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:24;;-1:-1:-1;1947:332:24;-1:-1:-1;;;;1947:332:24:o;3151:585::-;3234:9;3245:10;-1:-1:-1;;;;;;;;;;;;;;3245:10:24;3534:14;3550:17;3571:25;450:4:25;3589:6:24;3571:7;:25::i;:::-;3533:63;;-1:-1:-1;3533:63:24;-1:-1:-1;3614:18:24;3606:4;:26;;;;;;;;:::i;:::-;;3602:82;;-1:-1:-1;3656:20:24;;;;;;;;;-1:-1:-1;3656:20:24;;3650:4;;-1:-1:-1;3656:20:24;-1:-1:-1;3642:35:24;;3602:82;3696:35;3703:9;3714:7;:16;;;3696:6;:35::i;4923:243:25:-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:25;;5045:16;5041:45;;;-1:-1:-1;5078:1:25;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:25;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:25;;;;;;;;:::i;544:330:16:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:16;;-1:-1:-1;660:18:16;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:16;-1:-1:-1;833:30:16;;799:479:24;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:24;896:14;912:23;939:22;947:3;450:4:25;939:7:24;:22::i;:::-;895:66;;-1:-1:-1;895:66:24;-1:-1:-1;979:18:24;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:24;;;;;;;;;-1:-1:-1;1021:20:24;;1015:4;;-1:-1:-1;1021:20:24;-1:-1:-1;1007:35:24;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:24;-1:-1:-1;1141:18:24;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:24;;-1:-1:-1;799:479:24;-1:-1:-1;;;;;;799:479:24:o;958:198:16:-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:16;;-1:-1:-1;1102:1:16;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;14:131:504:-;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:504:o;470:258::-;542:1;552:113;566:6;563:1;560:13;552:113;;;642:11;;;636:18;623:11;;;616:39;588:2;581:10;552:113;;;683:6;680:1;677:13;674:48;;;-1:-1:-1;;718:1:504;700:16;;693:27;470:258::o;733:383::-;882:2;871:9;864:21;845:4;914:6;908:13;957:6;952:2;941:9;937:18;930:34;973:66;1032:6;1027:2;1016:9;1012:18;1007:2;999:6;995:15;973:66;:::i;:::-;1100:2;1079:15;-1:-1:-1;;1075:29:504;1060:45;;;;1107:2;1056:54;;733:383;-1:-1:-1;;733:383:504:o;1121:180::-;1180:6;1233:2;1221:9;1212:7;1208:23;1204:32;1201:52;;;1249:1;1246;1239:12;1201:52;-1:-1:-1;1272:23:504;;1121:180;-1:-1:-1;1121:180:504:o;1677:127::-;1738:10;1733:3;1729:20;1726:1;1719:31;1769:4;1766:1;1759:15;1793:4;1790:1;1783:15;1809:921;1877:6;1930:2;1918:9;1909:7;1905:23;1901:32;1898:52;;;1946:1;1943;1936:12;1898:52;1986:9;1973:23;2015:18;2056:2;2048:6;2045:14;2042:34;;;2072:1;2069;2062:12;2042:34;2110:6;2099:9;2095:22;2085:32;;2155:7;2148:4;2144:2;2140:13;2136:27;2126:55;;2177:1;2174;2167:12;2126:55;2213:2;2200:16;2235:2;2231;2228:10;2225:36;;;2241:18;;:::i;:::-;2316:2;2310:9;2284:2;2370:13;;-1:-1:-1;;2366:22:504;;;2390:2;2362:31;2358:40;2346:53;;;2414:18;;;2434:22;;;2411:46;2408:72;;;2460:18;;:::i;:::-;2500:10;2496:2;2489:22;2535:2;2527:6;2520:18;2575:7;2570:2;2565;2561;2557:11;2553:20;2550:33;2547:53;;;2596:1;2593;2586:12;2547:53;2652:2;2647;2643;2639:11;2634:2;2626:6;2622:15;2609:46;2697:1;2675:15;;;2692:2;2671:24;2664:35;;;;-1:-1:-1;2679:6:504;1809:921;-1:-1:-1;;;;;1809:921:504:o;3177:388::-;3245:6;3253;3306:2;3294:9;3285:7;3281:23;3277:32;3274:52;;;3322:1;3319;3312:12;3274:52;3361:9;3348:23;3380:31;3405:5;3380:31;:::i;:::-;3430:5;-1:-1:-1;3487:2:504;3472:18;;3459:32;3500:33;3459:32;3500:33;:::i;:::-;3552:7;3542:17;;;3177:388;;;;;:::o;3570:657::-;3739:2;3791:21;;;3861:13;;3764:18;;;3883:22;;;3710:4;;3739:2;3962:15;;;;3936:2;3921:18;;;3710:4;4005:196;4019:6;4016:1;4013:13;4005:196;;;4084:13;;-1:-1:-1;;;;;;4080:40:504;4068:53;;4176:15;;;;4141:12;;;;4041:1;4034:9;4005:196;;;-1:-1:-1;4218:3:504;;3570:657;-1:-1:-1;;;;;;3570:657:504:o;4232:456::-;4309:6;4317;4325;4378:2;4366:9;4357:7;4353:23;4349:32;4346:52;;;4394:1;4391;4384:12;4346:52;4433:9;4420:23;4452:31;4477:5;4452:31;:::i;:::-;4502:5;-1:-1:-1;4559:2:504;4544:18;;4531:32;4572:33;4531:32;4572:33;:::i;:::-;4232:456;;4624:7;;-1:-1:-1;;;4678:2:504;4663:18;;;;4650:32;;4232:456::o;5152:::-;5229:6;5237;5245;5298:2;5286:9;5277:7;5273:23;5269:32;5266:52;;;5314:1;5311;5304:12;5266:52;5353:9;5340:23;5372:31;5397:5;5372:31;:::i;:::-;5422:5;-1:-1:-1;5474:2:504;5459:18;;5446:32;;-1:-1:-1;5530:2:504;5515:18;;5502:32;5543:33;5502:32;5543:33;:::i;:::-;5595:7;5585:17;;;5152:456;;;;;:::o;5946:380::-;6025:1;6021:12;;;;6068;;;6089:61;;6143:4;6135:6;6131:17;6121:27;;6089:61;6196:2;6188:6;6185:14;6165:18;6162:38;6159:161;;;6242:10;6237:3;6233:20;6230:1;6223:31;6277:4;6274:1;6267:15;6305:4;6302:1;6295:15;6331:481;-1:-1:-1;;;;;6616:15:504;;;6598:34;;6668:15;;;6663:2;6648:18;;6641:43;6720:15;;6715:2;6700:18;;6693:43;-1:-1:-1;;;;;;6772:33:504;;;6767:2;6752:18;;6745:61;6547:3;6532:19;;6331:481::o;6817:277::-;6884:6;6937:2;6925:9;6916:7;6912:23;6908:32;6905:52;;;6953:1;6950;6943:12;6905:52;6985:9;6979:16;7038:5;7031:13;7024:21;7017:5;7014:32;7004:60;;7060:1;7057;7050:12;7099:338;7301:2;7283:21;;;7340:2;7320:18;;;7313:30;-1:-1:-1;;;7374:2:504;7359:18;;7352:44;7428:2;7413:18;;7099:338::o;8739:127::-;8800:10;8795:3;8791:20;8788:1;8781:31;8831:4;8828:1;8821:15;8855:4;8852:1;8845:15;8871:128;8911:3;8942:1;8938:6;8935:1;8932:13;8929:39;;;8948:18;;:::i;:::-;-1:-1:-1;8984:9:504;;8871:128::o;9004:127::-;9065:10;9060:3;9056:20;9053:1;9046:31;9096:4;9093:1;9086:15;9120:4;9117:1;9110:15;9136:135;9175:3;-1:-1:-1;;9196:17:504;;9193:43;;;9216:18;;:::i;:::-;-1:-1:-1;9263:1:504;9252:13;;9136:135::o;9276:178::-;9313:3;9357:4;9350:5;9346:16;9381:7;9371:41;;9392:18;;:::i;:::-;-1:-1:-1;;9428:20:504;;9276:178;-1:-1:-1;;9276:178:504:o;9816:184::-;9886:6;9939:2;9927:9;9918:7;9914:23;9910:32;9907:52;;;9955:1;9952;9945:12;9907:52;-1:-1:-1;9978:16:504;;9816:184;-1:-1:-1;9816:184:504:o;10005:125::-;10045:4;10073:1;10070;10067:8;10064:34;;;10078:18;;:::i;:::-;-1:-1:-1;10115:9:504;;10005:125::o;10135:251::-;10205:6;10258:2;10246:9;10237:7;10233:23;10229:32;10226:52;;;10274:1;10271;10264:12;10226:52;10306:9;10300:16;10325:31;10350:5;10325:31;:::i;10391:127::-;10452:10;10447:3;10443:20;10440:1;10433:31;10483:4;10480:1;10473:15;10507:4;10504:1;10497:15;10523:375;-1:-1:-1;;;;;10781:15:504;;;10763:34;;10833:15;;;;10828:2;10813:18;;10806:43;10880:2;10865:18;;10858:34;;;;10713:2;10698:18;;10523:375::o;16903:127::-;16964:10;16959:3;16955:20;16952:1;16945:31;16995:4;16992:1;16985:15;17019:4;17016:1;17009:15;17035:120;17075:1;17101;17091:35;;17106:18;;:::i;:::-;-1:-1:-1;17140:9:504;;17035:120::o;17582:245::-;17661:6;17669;17722:2;17710:9;17701:7;17697:23;17693:32;17690:52;;;17738:1;17735;17728:12;17690:52;-1:-1:-1;;17761:16:504;;17817:2;17802:18;;;17796:25;17761:16;;17796:25;;-1:-1:-1;17582:245:504:o;19472:274::-;19601:3;19639:6;19633:13;19655:53;19701:6;19696:3;19689:4;19681:6;19677:17;19655:53;:::i;:::-;19724:16;;;;;19472:274;-1:-1:-1;;19472:274:504:o;19751:168::-;19791:7;19857:1;19853;19849:6;19845:14;19842:1;19839:21;19834:1;19827:9;19820:17;19816:45;19813:71;;;19864:18;;:::i;:::-;-1:-1:-1;19904:9:504;;19751:168::o;19924:112::-;19956:1;19982;19972:35;;19987:18;;:::i;:::-;-1:-1:-1;20021:9:504;;19924:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_becomeImplementation(bytes)": "56e67728", + "_getExtensionFunctions()": "89f8132e", + "_withdrawAdminFees(uint256)": "a7b820df", + "_withdrawIonicFees(uint256)": "b0d58e49", + "accrualBlockNumber()": "6c540baf", + "adminFeeMantissa()": "8d02d9a1", + "approve(address,address)": "7e5465ba", + "borrow(uint256)": "c5ebeaec", + "borrowIndex()": "aa5af0fd", + "claim()": "4e71d92d", + "comptroller()": "5fe3b567", + "contractType()": "cb2ef6f7", + "decimals()": "313ce567", + "delegateType()": "2c436e5b", + "feeSeizeShareMantissa()": "be99f119", + "getCash()": "3b1d21a2", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "liquidateBorrow(address,uint256,address)": "f5e3c462", + "mint(uint256)": "a0712d68", + "name()": "06fdde03", + "protocolSeizeShareMantissa()": "6752e702", + "redeem(uint256)": "db006a75", + "redeemUnderlying(uint256)": "852a12e3", + "repayBorrow(uint256)": "0e752702", + "repayBorrowBehalf(address,uint256)": "2608f818", + "reserveFactorMantissa()": "173b9904", + "seize(address,address,uint256)": "b2a02ff1", + "selfTransferIn(address,uint256)": "135f1334", + "selfTransferOut(address,uint256)": "067db1b3", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/CTokenFirstExtension.json b/packages/sdk/deployments/bob/CTokenFirstExtension.json new file mode 100644 index 000000000..1dde8024f --- /dev/null +++ b/packages/sdk/deployments/bob/CTokenFirstExtension.json @@ -0,0 +1,2473 @@ +{ + "address": "0xbEDA60c0ac487e3081e539c8074894AE64e282Ab", + "abi": [ + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "_setAdminFee", + "inputs": [ + { + "name": "newAdminFeeMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setInterestRateModel", + "inputs": [ + { + "name": "newInterestRateModel", + "type": "address", + "internalType": "contract InterestRateModel" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setNameAndSymbol", + "inputs": [ + { + "name": "_name", + "type": "string", + "internalType": "string" + }, + { + "name": "_symbol", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setReserveFactor", + "inputs": [ + { + "name": "newReserveFactorMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "accrualBlockNumber", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "accrueInterest", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "adminFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allowance", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "approve", + "inputs": [ + { + "name": "spender", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "balanceOf", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "balanceOfUnderlying", + "inputs": [ + { + "name": "owner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowBalanceCurrent", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowIndex", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowRatePerBlock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowRatePerBlockAfterBorrow", + "inputs": [ + { + "name": "borrowAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "comptroller", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "decimals", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "uint8" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "exchangeRateCurrent", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "feeSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "flash", + "inputs": [ + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getAccountSnapshot", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getTotalUnderlyingSupplied", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "interestRateModel", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract InterestRateModel" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address payable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicFeeMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "multicall", + "inputs": [ + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [ + { + "name": "results", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "payable" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "protocolSeizeShareMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerInSFS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reserveFactorMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supplyRatePerBlock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supplyRatePerBlockAfterDeposit", + "inputs": [ + { + "name": "mintAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supplyRatePerBlockAfterWithdraw", + "inputs": [ + { + "name": "withdrawAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalAdminFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBorrows", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalBorrowsCurrent", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalIonicFees", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalReserves", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "totalSupply", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transfer", + "inputs": [ + { + "name": "dst", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferFrom", + "inputs": [ + { + "name": "src", + "type": "address", + "internalType": "address" + }, + { + "name": "dst", + "type": "address", + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "underlying", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "AccrueInterest", + "inputs": [ + { + "name": "cashPrior", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "interestAccumulated", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "borrowIndex", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "totalBorrows", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Approval", + "inputs": [ + { + "name": "owner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "spender", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Failure", + "inputs": [ + { + "name": "error", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "info", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "detail", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Flash", + "inputs": [ + { + "name": "receiver", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAdminFee", + "inputs": [ + { + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewIonicFee", + "inputs": [ + { + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewMarketInterestRateModel", + "inputs": [ + { + "name": "oldInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + }, + { + "name": "newInterestRateModel", + "type": "address", + "indexed": false, + "internalType": "contract InterestRateModel" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewReserveFactor", + "inputs": [ + { + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Transfer", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "amount", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x27d15eba0b76f2f3456f8ea03ff1fe110893e8012360b8af32e21525991faac3", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xbEDA60c0ac487e3081e539c8074894AE64e282Ab", + "transactionIndex": 1, + "gasUsed": "3380686", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd107fa60f43cc26946203ebb54ded517a290c0125eddb8cb3ee4bcddb020cc97", + "transactionHash": "0x27d15eba0b76f2f3456f8ea03ff1fe110893e8012360b8af32e21525991faac3", + "logs": [], + "blockNumber": 3777789, + "cumulativeGasUsed": "3424513", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "cashPrior", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "interestAccumulated", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "borrowIndex", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "totalBorrows", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "AccrueInterest", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "spender", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Approval", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "receiver", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Flash", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldAdminFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewAdminFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldIonicFeeMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newIonicFeeMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewIonicFee", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "oldInterestRateModel", + "type": "address", + "indexed": false + }, + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewMarketInterestRateModel", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldReserveFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewReserveFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Transfer", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newAdminFeeMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setAdminFee", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract InterestRateModel", + "name": "newInterestRateModel", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setInterestRateModel", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setNameAndSymbol" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newReserveFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setReserveFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "accrualBlockNumber", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "accrueInterest", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "internalType": "address", + "name": "spender", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allowance", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "spender", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "approve", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "owner", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "balanceOfUnderlying", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowBalanceCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowIndex", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowRatePerBlockAfterBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "comptroller", + "outputs": [ + { + "internalType": "contract IonicComptroller", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "decimals", + "outputs": [ + { + "internalType": "uint8", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "exchangeRateCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "flash" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAccountSnapshot", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getTotalUnderlyingSupplied", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestRateModel", + "outputs": [ + { + "internalType": "contract InterestRateModel", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicFeeMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "stateMutability": "payable", + "type": "function", + "name": "multicall", + "outputs": [ + { + "internalType": "bytes[]", + "name": "results", + "type": "bytes[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "protocolSeizeShareMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerInSFS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "reserveFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "supplyRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supplyRatePerBlockAfterDeposit", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "withdrawAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supplyRatePerBlockAfterWithdraw", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalAdminFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalBorrowsCurrent", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalIonicFees", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalReserves", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "totalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transfer", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferFrom", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "underlying", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "_setAdminFee(uint256)": { + "details": "Admin function to accrue interest and set a new admin fee", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_setInterestRateModel(address)": { + "details": "Admin function to accrue interest and update the interest rate model", + "params": { + "newInterestRateModel": "the new interest rate model to use" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_setNameAndSymbol(string,string)": { + "details": "Admin function to update the cToken ERC20 name and symbol", + "params": { + "_name": "the new ERC20 token name to use", + "_symbol": "the new ERC20 token symbol to use" + } + }, + "_setReserveFactor(uint256)": { + "details": "Admin function to accrue interest and set a new reserve factor", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "accrueInterest()": { + "details": "This calculates interest accrued from the last checkpointed block up to the current block and writes new checkpoint to storage." + }, + "allowance(address,address)": { + "params": { + "owner": "The address of the account which owns the tokens to be spent", + "spender": "The address of the account which may transfer tokens" + }, + "returns": { + "_0": "The number of tokens allowed to be spent (-1 means infinite)" + } + }, + "approve(address,uint256)": { + "details": "This will overwrite the approval amount for `spender` and is subject to issues noted [here](https://eips.ethereum.org/EIPS/eip-20#approve)", + "params": { + "amount": "The number of tokens that are approved (-1 means infinite)", + "spender": "The address of the account which may transfer tokens" + }, + "returns": { + "_0": "Whether or not the approval succeeded" + } + }, + "balanceOf(address)": { + "params": { + "owner": "The address of the account to query" + }, + "returns": { + "_0": "The number of tokens owned by `owner`" + } + }, + "balanceOfUnderlying(address)": { + "params": { + "owner": "The address of the account to query" + }, + "returns": { + "_0": "The amount of underlying owned by `owner`" + } + }, + "borrowBalanceCurrent(address)": { + "params": { + "account": "The address whose balance should be calculated after recalculating the borrowIndex" + }, + "returns": { + "_0": "The calculated balance" + } + }, + "borrowRatePerBlock()": { + "returns": { + "_0": "The borrow interest rate per block, scaled by 1e18" + } + }, + "exchangeRateCurrent()": { + "returns": { + "_0": "Calculated exchange rate scaled by 1e18" + } + }, + "getAccountSnapshot(address)": { + "details": "This is used by comptroller to more efficiently perform liquidity checks.", + "params": { + "account": "Address of the account to snapshot" + }, + "returns": { + "_0": "(possible error, token balance, borrow balance, exchange rate mantissa)" + } + }, + "supplyRatePerBlock()": { + "returns": { + "_0": "The supply interest rate per block, scaled by 1e18" + } + }, + "totalBorrowsCurrent()": { + "returns": { + "_0": "The total borrows with interest" + } + }, + "transfer(address,uint256)": { + "params": { + "amount": "The number of tokens to transfer", + "dst": "The address of the destination account" + }, + "returns": { + "_0": "Whether or not the transfer succeeded" + } + }, + "transferFrom(address,address,uint256)": { + "params": { + "amount": "The number of tokens to transfer", + "dst": "The address of the destination account", + "src": "The address of the source account" + }, + "returns": { + "_0": "Whether or not the transfer succeeded" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_setAdminFee(uint256)": { + "notice": "accrues interest and sets a new admin fee for the protocol using _setAdminFeeFresh" + }, + "_setInterestRateModel(address)": { + "notice": "accrues interest and updates the interest rate model using _setInterestRateModelFresh" + }, + "_setNameAndSymbol(string,string)": { + "notice": "updates the cToken ERC20 name and symbol" + }, + "_setReserveFactor(uint256)": { + "notice": "accrues interest and sets a new reserve factor for the protocol using _setReserveFactorFresh" + }, + "accrualBlockNumber()": { + "notice": "Block number that interest was last accrued at" + }, + "accrueInterest()": { + "notice": "Applies accrued interest to total borrows and reserves" + }, + "adminFeeMantissa()": { + "notice": "Fraction of interest currently set aside for admin fees" + }, + "allowance(address,address)": { + "notice": "Get the current allowance from `owner` for `spender`" + }, + "approve(address,uint256)": { + "notice": "Approve `spender` to transfer up to `amount` from `src`" + }, + "balanceOf(address)": { + "notice": "Get the token balance of the `owner`" + }, + "balanceOfUnderlying(address)": { + "notice": "Get the underlying balance of the `owner`" + }, + "borrowBalanceCurrent(address)": { + "notice": "calculate the borrowIndex and the account's borrow balance using the fresh borrowIndex" + }, + "borrowIndex()": { + "notice": "Accumulator of the total earned interest rate since the opening of the market" + }, + "borrowRatePerBlock()": { + "notice": "Returns the current per-block borrow interest rate for this cToken" + }, + "comptroller()": { + "notice": "Contract which oversees inter-cToken operations" + }, + "decimals()": { + "notice": "EIP-20 token decimals for this token" + }, + "exchangeRateCurrent()": { + "notice": "Accrue interest then return the up-to-date exchange rate" + }, + "getAccountSnapshot(address)": { + "notice": "Get a snapshot of the account's balances, and the cached exchange rate" + }, + "interestRateModel()": { + "notice": "Model which tells what the current interest rate should be" + }, + "ionicFeeMantissa()": { + "notice": "Fraction of interest currently set aside for Ionic fees" + }, + "name()": { + "notice": "EIP-20 token name for this token" + }, + "reserveFactorMantissa()": { + "notice": "Fraction of interest currently set aside for reserves" + }, + "supplyRatePerBlock()": { + "notice": "Returns the current per-block supply interest rate for this cToken" + }, + "symbol()": { + "notice": "EIP-20 token symbol for this token" + }, + "totalAdminFees()": { + "notice": "Total amount of admin fees of the underlying held in this market" + }, + "totalBorrows()": { + "notice": "Total amount of outstanding borrows of the underlying in this market" + }, + "totalBorrowsCurrent()": { + "notice": "Returns the current total borrows plus accrued interest" + }, + "totalIonicFees()": { + "notice": "Total amount of Ionic fees of the underlying held in this market" + }, + "totalReserves()": { + "notice": "Total amount of reserves of the underlying held in this market" + }, + "totalSupply()": { + "notice": "Total number of tokens in circulation" + }, + "transfer(address,uint256)": { + "notice": "Transfer `amount` tokens from `msg.sender` to `dst`" + }, + "transferFrom(address,address,uint256)": { + "notice": "Transfer `amount` tokens from `src` to `dst`" + }, + "underlying()": { + "notice": "Underlying asset for this CToken" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/CTokenFirstExtension.sol": "CTokenFirstExtension" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenFirstExtension.sol": { + "keccak256": "0xe611cf33b084bde841cea4ce66fbb95ce38c70a38c46fce16ef146550e9a818d", + "urls": [ + "bzz-raw://8d532254dbc13f1a90f00cd0699faf15d991c226b39b9c2d221b7d30f0a3fbe4", + "dweb:/ipfs/QmapuKbJE7bTtF9kLmm62zgepAzU2UDWNaJ3X3SG376KyR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/IFlashLoanReceiver.sol": { + "keccak256": "0x3db1dbf3e47975f60cccc859740aa84665d9fd683079c7329285008502c454da", + "urls": [ + "bzz-raw://89727af88e6d376eced9a6ea97c3da80d6c801198f133d9d6b887894f7b8ab00", + "dweb:/ipfs/QmVS7Thpbkt3RGi4UsKev94BJdLstHiGHrGk1mPXadSqS2" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/utils/IMulticall.sol": { + "keccak256": "0x06d957a2af0a31212eea7fcaa5fe0f4e180bcddd9bc8e593fb6345339b2b2038", + "urls": [ + "bzz-raw://03fb492b53458b9d1091df7f554a20d9c061bc7a48f348b8d6bee77498c500ae", + "dweb:/ipfs/QmeFHKWQzDaM3fXnyigSYhDSqBs9HegCKKbPNa1WaHzpc5" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/utils/Multicall.sol": { + "keccak256": "0x019e3414dae3e29d4e210311bf82d94e34756b3b015ab352e7bb59a6380b8e9b", + "urls": [ + "bzz-raw://eaa54432b781393d0c31045498a6747d35952559dc92e6d724802fd3c088bdc8", + "dweb:/ipfs/QmXu5fSUgKoGv4t2Xe8P1ohVdM9qH3iuy1kMr7AJZUDMxG" + ], + "license": "GPL-2.0-or-later" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/IERC20.sol": { + "keccak256": "0x9750c6b834f7b43000631af5cc30001c5f547b3ceb3635488f140f60e897ea6b", + "urls": [ + "bzz-raw://5a7d5b1ef5d8d5889ad2ed89d8619c09383b80b72ab226e0fe7bde1636481e34", + "dweb:/ipfs/QmebXWgtEfumQGBdVeM6c71McLixYXQP5Bk6kKXuoY4Bmr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/extensions/draft-IERC20Permit.sol": { + "keccak256": "0xf41ca991f30855bf80ffd11e9347856a517b977f0a6c2d52e6421a99b7840329", + "urls": [ + "bzz-raw://b2717fd2bdac99daa960a6de500754ea1b932093c946388c381da48658234b95", + "dweb:/ipfs/QmP6QVMn6UeA3ByahyJbYQr5M6coHKBKsf3ySZSfbyA8R7" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/token/ERC20/utils/SafeERC20.sol": { + "keccak256": "0x8f211a9dd6bc7e4bc6c98a062d4729b821b7ff391a888215a48872b205117749", + "urls": [ + "bzz-raw://2c537063217d09afbe820ec9fd448835862209cc54b4f8ef3e8e33a1b3e25b71", + "dweb:/ipfs/QmeBegWuZR66Xbqzczhuoh9N11zBkyftXxYHNys3xHkC7P" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50613c2f806100206000396000f3fe6080604052600436106102675760003560e01c80638d02d9a111610144578063bd6d894d116100b6578063cfcd4c071161007a578063cfcd4c07146106fe578063dd62ed3e1461071e578063f2b3abbd14610764578063f3fdb15a14610784578063f8f9da28146107a4578063fca7820b146107b957600080fd5b8063bd6d894d14610657578063be99f1191461066c578063c37f68e214610688578063c3bf11cd146106c8578063c91a424f146106de57600080fd5b8063a6afed9511610108578063a6afed95146105b7578063a9059cbb146105cc578063aa5af0fd146105ec578063ac9650d814610602578063ae9d70b014610622578063b1e23dbb1461063757600080fd5b80638d02d9a1146105405780638f840ddd1461055657806391dd36c61461056c57806395d89b411461058c5780639826394b146105a157600080fd5b806347bd3718116101dd5780636c540baf116101a15780636c540baf146104885780636f307dc31461049e57806370a08231146104be57806373acee98146104f45780637f15e2161461050957806389f8132e1461051e57600080fd5b806347bd3718146103ef5780634aeb3d9a146104055780635fe3b5671461041a57806361feacff146104575780636752e7021461046d57600080fd5b806323b872dd1161022f57806323b872dd14610321578063313ce5671461034157806334154d4c1461036d57806335daea641461038f5780633af9e669146103af5780633c3b4b89146103cf57600080fd5b806306fdde031461026c578063095ea7b314610297578063173b9904146102c757806317bfdfbc146102eb57806318160ddd1461030b575b600080fd5b34801561027857600080fd5b506102816107d9565b60405161028e91906135d6565b60405180910390f35b3480156102a357600080fd5b506102b76102b23660046135fe565b610867565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60085481565b60405190815260200161028e565b3480156102f757600080fd5b506102dd61030636600461362a565b61097e565b34801561031757600080fd5b506102dd600f5481565b34801561032d57600080fd5b506102b761033c366004613647565b610b2e565b34801561034d57600080fd5b5060035461035b9060ff1681565b60405160ff909116815260200161028e565b34801561037957600080fd5b5061038d6103883660046136ca565b610c03565b005b34801561039b57600080fd5b506102dd6103aa366004613736565b610c60565b3480156103bb57600080fd5b506102dd6103ca36600461362a565b610de2565b3480156103db57600080fd5b5061038d6103ea36600461374f565b610e7d565b3480156103fb57600080fd5b506102dd600b5481565b34801561041157600080fd5b506102dd6110de565b34801561042657600080fd5b5060035461043f9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561046357600080fd5b506102dd600d5481565b34801561047957600080fd5b506102dd666379da05b6000081565b34801561049457600080fd5b506102dd60095481565b3480156104aa57600080fd5b5060135461043f906001600160a01b031681565b3480156104ca57600080fd5b506102dd6104d936600461362a565b6001600160a01b031660009081526010602052604090205490565b34801561050057600080fd5b506102dd61117b565b34801561051557600080fd5b506102dd61120b565b34801561052a57600080fd5b506105336112f5565b60405161028e919061379b565b34801561054c57600080fd5b506102dd60065481565b34801561056257600080fd5b506102dd600c5481565b34801561057857600080fd5b506102dd610587366004613736565b61198e565b34801561059857600080fd5b50610281611b4b565b3480156105ad57600080fd5b506102dd600e5481565b3480156105c357600080fd5b506102dd611b58565b3480156105d857600080fd5b506102b76105e73660046135fe565b611c69565b3480156105f857600080fd5b506102dd600a5481565b6106156106103660046137e9565b611d3d565b60405161028e919061385e565b34801561062e57600080fd5b506102dd611d49565b34801561064357600080fd5b506102dd610652366004613736565b611e6f565b34801561066357600080fd5b506102dd611f9f565b34801561067857600080fd5b506102dd67016345785d8a000081565b34801561069457600080fd5b506106a86106a336600461362a565b6120cd565b60408051948552602085019390935291830152606082015260800161028e565b3480156106d457600080fd5b506102dd60075481565b3480156106ea57600080fd5b5060005461043f906001600160a01b031681565b34801561070a57600080fd5b506102dd610719366004613736565b612113565b34801561072a57600080fd5b506102dd6107393660046138c0565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561077057600080fd5b506102dd61077f36600461362a565b61223a565b34801561079057600080fd5b5060045461043f906001600160a01b031681565b3480156107b057600080fd5b506102dd612379565b3480156107c557600080fd5b506102dd6107d4366004613736565b612440565b600180546107e6906138f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610812906138f9565b801561085f5780601f106108345761010080835404028352916020019161085f565b820191906000526020600020905b81548152906001019060200180831161084257829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926108b49261010090910490911690339030906001600160e01b03198835169060040161392e565b602060405180830381865afa1580156108d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f59190613961565b61091a5760405162461bcd60e51b815260040161091190613983565b60405180910390fd5b3360008181526011602090815260408083206001600160a01b038816808552908352928190208690555185815283917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000804360095414156109945750600a54610a0f565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f891906139ab565b90506000610a0643836124f6565b60200151925050505b6001600160a01b0383166000908152601260205260408120805482918291610a3e575060009695505050505050565b8054610a4a908661278b565b90945092506000846003811115610a6357610a636139c4565b14610ab05760405162461bcd60e51b815260206004820152601e60248201527f216d756c55496e74206f766572666c6f7720636865636b206661696c656400006044820152606401610911565b610abe8382600101546127cd565b90945091506000846003811115610ad757610ad76139c4565b14610b245760405162461bcd60e51b815260206004820152601e60248201527f2164697655496e74206f766572666c6f7720636865636b206661696c656400006044820152606401610911565b5095945050505050565b600080610b3a816127f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610b8493610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc59190613961565b610be15760405162461bcd60e51b815260040161091190613983565b6000610bef338787876128bc565b149150610bfb81612b73565b509392505050565b610c0b612bf2565b610c405760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610911565b610c4c600185856134e1565b50610c59600283836134e1565b5050505050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc591906139ab565b905082811015610d105760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b6044820152606401610911565b6004546001600160a01b031663b8168816610d2b85846139f0565b600b54600e54600d54600c54610d419190613a07565b610d4b9190613a07565b600654600754600854610d5e9190613a07565b610d689190613a07565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015610db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddb91906139ab565b9392505050565b6000806040518060200160405280610df8611f9f565b90526001600160a01b038416600090815260106020526040812054919250908190610e24908490612d69565b90925090506000826003811115610e3d57610e3d6139c4565b14610e755760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b6044820152606401610911565b949350505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610ec793610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015610ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f089190613961565b610f245760405162461bcd60e51b815260040161091190613983565b610f2c611b58565b5082600b6000828254610f3f9190613a07565b9091555030905060405163067db1b360e01b8152336004820152602481018590526001600160a01b03919091169063067db1b390604401600060405180830381600087803b158015610f9057600080fd5b505af1158015610fa4573d6000803e3d6000fd5b505060135460405163012b1f4560e71b815233935063958fa2809250610fdc916001600160a01b031690879087908790600401613a1f565b600060405180830381600087803b158015610ff657600080fd5b505af115801561100a573d6000803e3d6000fd5b505050506110153090565b6040516304d7c4cd60e21b8152336004820152602481018590526001600160a01b03919091169063135f1334906044016020604051808303816000875af1158015611064573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108891906139ab565b5082600b600082825461109b91906139f0565b909155505060408051338152602081018590527fe756d016d0e956882a6de9c72a2fe06d7d488ecbe6d76628713077ea7930cff8910160405180910390a1505050565b6000600d54600e54600c546110f39190613a07565b6110fd9190613a07565b600b54306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116291906139ab565b61116c9190613a07565b61117691906139f0565b905090565b600043600954141561118e5750600b5490565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f291906139ab565b9050600061120043836124f6565b606001519392505050565b6000611215612bf2565b8061122f575060035461010090046001600160a01b031633145b6112645760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610911565b604051632210724360e11b8152738fba84867ba458e7c6e2c024d2de3d0b5c3ea1c26004820152738680ceabcb9b56913c519c069add6bc3494b7020908190634420e486906024016020604051808303816000875af11580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef91906139ab565b91505090565b60408051601880825261032082019092526060919060009082602082016103008036833701905050905063a9059cbb60e01b8161133184613a7d565b93508360ff168151811061134757611347613a9a565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8161137284613a7d565b93508360ff168151811061138857611388613a9a565b6001600160e01b031990921660209283029190910190910152636eb1769f60e11b816113b384613a7d565b93508360ff16815181106113c9576113c9613a9a565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b816113f484613a7d565b93508360ff168151811061140a5761140a613a9a565b6001600160e01b0319909216602092830291909101909101526370a0823160e01b8161143584613a7d565b93508360ff168151811061144b5761144b613a9a565b6001600160e01b0319909216602092830291909101909101526348ee9b6360e11b8161147684613a7d565b93508360ff168151811061148c5761148c613a9a565b6001600160e01b03199092166020928302919091019091015263f2b3abbd60e01b816114b784613a7d565b93508360ff16815181106114cd576114cd613a9a565b6001600160e01b031990921660209283029190910190910152630d05535360e21b816114f884613a7d565b93508360ff168151811061150e5761150e613a9a565b6001600160e01b03199092166020928302919091019091015263fca7820b60e01b8161153984613a7d565b93508360ff168151811061154f5761154f613a9a565b6001600160e01b031990921660209283029190910190910152630ae9d70b60e41b8161157a84613a7d565b93508360ff168151811061159057611590613a9a565b6001600160e01b031990921660209283029190910190910152631f1f3b4560e31b816115bb84613a7d565b93508360ff16815181106115d1576115d1613a9a565b6001600160e01b03199092166020928302919091019091015263bd6d894d60e01b816115fc84613a7d565b93508360ff168151811061161257611612613a9a565b6001600160e01b03199092166020928302919091019091015263a6afed9560e01b8161163d84613a7d565b93508360ff168151811061165357611653613a9a565b6001600160e01b031990921660209283029190910190910152630e759dd360e31b8161167e84613a7d565b93508360ff168151811061169457611694613a9a565b6001600160e01b031990921660209283029190910190910152633af9e66960e01b816116bf84613a7d565b93508360ff16815181106116d5576116d5613a9a565b6001600160e01b031990921660209283029190910190910152631592ca1b60e31b8161170084613a7d565b93508360ff168151811061171657611716613a9a565b6001600160e01b03199092166020928302919091019091015263b1e23dbb60e01b8161174184613a7d565b93508360ff168151811061175757611757613a9a565b6001600160e01b031990921660209283029190910190910152630d76ba9960e21b8161178284613a7d565b93508360ff168151811061179857611798613a9a565b6001600160e01b03199092166020928302919091019091015263cfcd4c0760e01b816117c384613a7d565b93508360ff16815181106117d9576117d9613a9a565b6001600160e01b0319909216602092830291909101909101526325759ecd60e11b8161180484613a7d565b93508360ff168151811061181a5761181a613a9a565b6001600160e01b031990921660209283029190910190910152633c3b4b8960e01b8161184584613a7d565b93508360ff168151811061185b5761185b613a9a565b6001600160e01b0319909216602092830291909101909101526361bfb47160e11b8161188684613a7d565b93508360ff168151811061189c5761189c613a9a565b6001600160e01b0319909216602092830291909101909101526305eff7ef60e21b816118c784613a7d565b93508360ff16815181106118dd576118dd613a9a565b6001600160e01b031990921660209283029190910190910152633f8af10b60e11b8161190884613a7d565b93508360ff168151811061191e5761191e613a9a565b6001600160e01b03199092166020928302919091019091015260ff8216156119885760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610911565b92915050565b60008061199a816127f8565b6119a2611b58565b5043600954146119bf576119b8600a6052612dbb565b9150611b3c565b6000198314156119cf5760065492505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4791906139ab565b9050670de0b6b3a76400008185600854611a619190613a07565b611a6b9190613a07565b1115611a8557611a7d60026053612dbb565b925050611b3c565b8360065414611ae957611a96612bf2565b611aa657611a7d60016051612dbb565b600680549085905560408051828152602081018790527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a1505b8060075414611b3557600780549082905560408051828152602081018490527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1505b60005b9250505b611b4581612b73565b50919050565b600280546107e6906138f9565b6009546000904390811415611b6e5760006112ef565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd291906139ab565b90506000611be083836124f6565b6009849055602081810151600a819055606080840151600b819055608080860151600c5560a0860151600e5560c0860151600d5560e0860151604080518a815296870191909152850193909352908301529192507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04910160405180910390a16000935050505090565b600080611c75816127f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893611cbf93610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d009190613961565b611d1c5760405162461bcd60e51b815260040161091190613983565b6000611d2a333387876128bc565b149150611d3681612b73565b5092915050565b6060610ddb8383612e34565b6004546000906001600160a01b031663b8168816306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf91906139ab565b600b54600e54600d54600c54611dd59190613a07565b611ddf9190613a07565b600654600754600854611df29190613a07565b611dfc9190613a07565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611e4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117691906139ab565b6004546000906001600160a01b031663b816881683306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee691906139ab565b611ef09190613a07565b600b54600e54600d54600c54611f069190613a07565b611f109190613a07565b600654600754600854611f239190613a07565b611f2d9190613a07565b6040516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865afa158015611f7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198891906139ab565b600060095443141561202d57611176600f54600554611fbb3090565b6001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c91906139ab565b600b54600c54600d54600e54612f85565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209191906139ab565b9050600061209f43836124f6565b90506120c6816040015160055484846060015185608001518660c001518760a00151612f85565b9250505090565b6001600160a01b03811660009081526010602052604081205481908190819081806120f78861097e565b9150612101611f9f565b90506000989297509095509350915050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217891906139ab565b9050828110156121c35760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b6044820152606401610911565b6004546001600160a01b03166315f240536121de85846139f0565b85600b546121ec9190613a07565b600e54600d54600c546121ff9190613a07565b6122099190613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401610d9a565b600080612246816127f8565b61224e611b58565b50612257612bf2565b612267576119b86001604d612dbb565b436009541461227c576119b8600a604c612dbb565b826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190613961565b6123145760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b6044820152606401610911565b600480546001600160a01b038581166001600160a01b031983168117909355604080519190921680825260208201939093527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92691015b60405180910390a16000611b38565b6004546000906001600160a01b03166315f24053306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef91906139ab565b600b54600e54600d54600c546124059190613a07565b61240f9190613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401611e2e565b60008061244c816127f8565b612454611b58565b5061245d612bf2565b61246d576119b860016058612dbb565b4360095414612482576119b8600a6059612dbb565b670de0b6b3a76400006007546006548561249c9190613a07565b6124a69190613a07565b11156124b8576119b86002605a612dbb565b600880549084905560408051828152602081018690527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460910161236a565b61253e60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000600e54600d546125509190613a07565b600454600b54600c549293506000926001600160a01b03909216916315f2405391879161257e908790613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401602060405180830381865afa1580156125c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125eb91906139ab565b905065048c2739500081111561264257818411156126395760405162461bcd60e51b815260206004820152600b60248201526a21626f72726f775261746560a81b6044820152606401610911565b5065048c273950005b600080612651876009546130c4565b9092509050600082600381111561266a5761266a6139c4565b146126a55760405162461bcd60e51b815260206004820152600b60248201526a21626c6f636b44656c746160a81b6044820152606401610911565b868552600f546040808701919091528051602081019091528381526000906126cd90836130ef565b90506126db81600b54613120565b60e08701819052600b546126ee91613a07565b60608701526040805160208101909152600854815260e0870151600c54612716929190613138565b60808701526040805160208101909152600754815260e0870151600e5461273e929190613138565b60a08701526040805160208101909152600654815260e0870151600d54612766929190613138565b60c0870152600a5461277a90829080613138565b602087015250939695505050505050565b6000808361279e575060009050806127c6565b838302836127ac8683613ab0565b146127bf576002600092509250506127c6565b6000925090505b9250929050565b600080826127e157506001905060006127c6565b60006127ed8486613ab0565b915091509250929050565b600054600160a01b900460ff1661283e5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b6044820152606401610911565b806128ac57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561289357600080fd5b505af11580156128a7573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b6003546040516317b9b84b60e31b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283926101009091049091169063bdcdc258906084016020604051808303816000875af1158015612928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294c91906139ab565b90508015612969576129616003605b83613162565b915050610e75565b836001600160a01b0316856001600160a01b0316141561298f576129616002605c612dbb565b6000856001600160a01b0316876001600160a01b031614156129b457506000196129dc565b506001600160a01b038086166000908152601160209081526040808320938a16835292905220545b6000806000806129ec85896130c4565b90945092506000846003811115612a0557612a056139c4565b14612a2357612a166009605c612dbb565b9650505050505050610e75565b6001600160a01b038a16600090815260106020526040902054612a4690896130c4565b90945091506000846003811115612a5f57612a5f6139c4565b14612a7057612a166009605d612dbb565b6001600160a01b038916600090815260106020526040902054612a939089613204565b90945090506000846003811115612aac57612aac6139c4565b14612abd57612a166009605e612dbb565b6001600160a01b03808b16600090815260106020526040808220859055918b168152208190556000198514612b15576001600160a01b03808b166000908152601160209081526040808320938f168352929052208390555b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051612b5a91815260200190565b60405180910390a35060009a9950505050505050505050565b6000805460ff60a01b1916600160a01b17905580612bef57600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bdb57600080fd5b505af1158015610c59573d6000803e3d6000fd5b50565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6f9190613ad2565b6001600160a01b0316336001600160a01b0316148015612cec5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cec9190613961565b806112ef57506000546001600160a01b0316331480156112ef5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d45573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef9190613961565b600080600080612d79868661322a565b90925090506000826003811115612d9257612d926139c4565b14612da357509150600090506127c6565b6000612dae826132a6565b9350935050509250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115612df057612df06139c4565b836061811115612e0257612e026139c4565b60408051928352602083019190915260009082015260600160405180910390a1826011811115610ddb57610ddb6139c4565b60608167ffffffffffffffff811115612e4f57612e4f613a67565b604051908082528060200260200182016040528015612e8257816020015b6060815260200190600190039081612e6d5790505b50905060005b82811015611d365760008030868685818110612ea657612ea6613a9a565b9050602002810190612eb89190613aef565b604051612ec6929190613b36565b600060405180830381855af49150503d8060008114612f01576040519150601f19603f3d011682016040523d82523d6000602084013e612f06565b606091505b509150915081612f5257604481511015612f1f57600080fd5b60048101905080806020019051810190612f399190613b46565b60405162461bcd60e51b815260040161091191906135d6565b80848481518110612f6557612f65613a9a565b602002602001018190525050508080612f7d90613be8565b915050612e88565b600087612f935750856130b9565b6000612fab6040518060200160405280600081525090565b6000612fcc898987612fbd8a8c613a07565b612fc79190613a07565b6132be565b935090506000816003811115612fe457612fe46139c4565b1461303f5760405162461bcd60e51b815260206004820152602560248201527f216164645468656e53756255496e74206f766572666c6f7720636865636b2066604482015264185a5b195960da1b6064820152608401610911565b613049838c613311565b925090506000816003811115613061576130616139c4565b146130ae5760405162461bcd60e51b815260206004820152601d60248201527f21676574457870206f766572666c6f7720636865636b206661696c65640000006044820152606401610911565b505191506130b99050565b979650505050505050565b6000808383116130e35760006130da84866139f0565b915091506127c6565b506003905060006127c6565b60408051602081019091526000815260405180602001604052806131178560000151856133dc565b90529392505050565b60008061312d84846130ef565b9050610e75816132a6565b60008061314585856130ef565b9050613159613153826132a6565b8461341e565b95945050505050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846011811115613197576131976139c4565b8460618111156131a9576131a96139c4565b604080519283526020830191909152810184905260600160405180910390a160038460118111156131dc576131dc6139c4565b146131f8578360118111156131f3576131f36139c4565b610e75565b610e75826103e8613a07565b60008083830184811061321c576000925090506127c6565b6002600092509250506127c6565b60006132426040518060200160405280600081525090565b60008061325386600001518661278b565b9092509050600082600381111561326c5761326c6139c4565b1461328b575060408051602081019091526000815290925090506127c6565b60408051602081019091529081526000969095509350505050565b805160009061198890670de0b6b3a764000090613ab0565b6000806000806132ce8787613204565b909250905060008260038111156132e7576132e76139c4565b146132f85750915060009050613309565b61330281866130c4565b9350935050505b935093915050565b60006133296040518060200160405280600081525090565b60008061333e86670de0b6b3a764000061278b565b90925090506000826003811115613357576133576139c4565b14613376575060408051602081019091526000815290925090506127c6565b60008061338383886127cd565b9092509050600082600381111561339c5761339c6139c4565b146133bf57816040518060200160405280600081525095509550505050506127c6565b604080516020810190915290815260009890975095505050505050565b6000610ddb83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613454565b6000610ddb8383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506134b0565b6000831580613461575082155b1561346e57506000610ddb565b600061347a8486613c03565b9050836134878683613ab0565b1483906134a75760405162461bcd60e51b815260040161091191906135d6565b50949350505050565b6000806134bd8486613a07565b905082858210156134a75760405162461bcd60e51b815260040161091191906135d6565b8280546134ed906138f9565b90600052602060002090601f01602090048101928261350f5760008555613555565b82601f106135285782800160ff19823516178555613555565b82800160010185558215613555579182015b8281111561355557823582559160200191906001019061353a565b50613561929150613565565b5090565b5b808211156135615760008155600101613566565b60005b8381101561359557818101518382015260200161357d565b838111156135a4576000848401525b50505050565b600081518084526135c281602086016020860161357a565b601f01601f19169290920160200192915050565b602081526000610ddb60208301846135aa565b6001600160a01b0381168114612bef57600080fd5b6000806040838503121561361157600080fd5b823561361c816135e9565b946020939093013593505050565b60006020828403121561363c57600080fd5b8135610ddb816135e9565b60008060006060848603121561365c57600080fd5b8335613667816135e9565b92506020840135613677816135e9565b929592945050506040919091013590565b60008083601f84011261369a57600080fd5b50813567ffffffffffffffff8111156136b257600080fd5b6020830191508360208285010111156127c657600080fd5b600080600080604085870312156136e057600080fd5b843567ffffffffffffffff808211156136f857600080fd5b61370488838901613688565b9096509450602087013591508082111561371d57600080fd5b5061372a87828801613688565b95989497509550505050565b60006020828403121561374857600080fd5b5035919050565b60008060006040848603121561376457600080fd5b83359250602084013567ffffffffffffffff81111561378257600080fd5b61378e86828701613688565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156137dd5783516001600160e01b031916835292840192918401916001016137b7565b50909695505050505050565b600080602083850312156137fc57600080fd5b823567ffffffffffffffff8082111561381457600080fd5b818501915085601f83011261382857600080fd5b81358181111561383757600080fd5b8660208260051b850101111561384c57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156138b357603f198886030184526138a18583516135aa565b94509285019290850190600101613885565b5092979650505050505050565b600080604083850312156138d357600080fd5b82356138de816135e9565b915060208301356138ee816135e9565b809150509250929050565b600181811c9082168061390d57607f821691505b60208210811415611b4557634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561397357600080fd5b81518015158114610ddb57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156139bd57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613a0257613a026139da565b500390565b60008219821115613a1a57613a1a6139da565b500190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b600060ff821680613a9057613a906139da565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b600082613acd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ae457600080fd5b8151610ddb816135e9565b6000808335601e19843603018112613b0657600080fd5b83018035915067ffffffffffffffff821115613b2157600080fd5b6020019150368190038213156127c657600080fd5b8183823760009101908152919050565b600060208284031215613b5857600080fd5b815167ffffffffffffffff80821115613b7057600080fd5b818401915084601f830112613b8457600080fd5b815181811115613b9657613b96613a67565b604051601f8201601f19908116603f01168101908382118183101715613bbe57613bbe613a67565b81604052828152876020848701011115613bd757600080fd5b6130b983602083016020880161357a565b6000600019821415613bfc57613bfc6139da565b5060010190565b6000816000190483118215151615613c1d57613c1d6139da565b50029056fea164736f6c634300080a000a", + "sourceMap": "738:25607:14:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052600436106102675760003560e01c80638d02d9a111610144578063bd6d894d116100b6578063cfcd4c071161007a578063cfcd4c07146106fe578063dd62ed3e1461071e578063f2b3abbd14610764578063f3fdb15a14610784578063f8f9da28146107a4578063fca7820b146107b957600080fd5b8063bd6d894d14610657578063be99f1191461066c578063c37f68e214610688578063c3bf11cd146106c8578063c91a424f146106de57600080fd5b8063a6afed9511610108578063a6afed95146105b7578063a9059cbb146105cc578063aa5af0fd146105ec578063ac9650d814610602578063ae9d70b014610622578063b1e23dbb1461063757600080fd5b80638d02d9a1146105405780638f840ddd1461055657806391dd36c61461056c57806395d89b411461058c5780639826394b146105a157600080fd5b806347bd3718116101dd5780636c540baf116101a15780636c540baf146104885780636f307dc31461049e57806370a08231146104be57806373acee98146104f45780637f15e2161461050957806389f8132e1461051e57600080fd5b806347bd3718146103ef5780634aeb3d9a146104055780635fe3b5671461041a57806361feacff146104575780636752e7021461046d57600080fd5b806323b872dd1161022f57806323b872dd14610321578063313ce5671461034157806334154d4c1461036d57806335daea641461038f5780633af9e669146103af5780633c3b4b89146103cf57600080fd5b806306fdde031461026c578063095ea7b314610297578063173b9904146102c757806317bfdfbc146102eb57806318160ddd1461030b575b600080fd5b34801561027857600080fd5b506102816107d9565b60405161028e91906135d6565b60405180910390f35b3480156102a357600080fd5b506102b76102b23660046135fe565b610867565b604051901515815260200161028e565b3480156102d357600080fd5b506102dd60085481565b60405190815260200161028e565b3480156102f757600080fd5b506102dd61030636600461362a565b61097e565b34801561031757600080fd5b506102dd600f5481565b34801561032d57600080fd5b506102b761033c366004613647565b610b2e565b34801561034d57600080fd5b5060035461035b9060ff1681565b60405160ff909116815260200161028e565b34801561037957600080fd5b5061038d6103883660046136ca565b610c03565b005b34801561039b57600080fd5b506102dd6103aa366004613736565b610c60565b3480156103bb57600080fd5b506102dd6103ca36600461362a565b610de2565b3480156103db57600080fd5b5061038d6103ea36600461374f565b610e7d565b3480156103fb57600080fd5b506102dd600b5481565b34801561041157600080fd5b506102dd6110de565b34801561042657600080fd5b5060035461043f9061010090046001600160a01b031681565b6040516001600160a01b03909116815260200161028e565b34801561046357600080fd5b506102dd600d5481565b34801561047957600080fd5b506102dd666379da05b6000081565b34801561049457600080fd5b506102dd60095481565b3480156104aa57600080fd5b5060135461043f906001600160a01b031681565b3480156104ca57600080fd5b506102dd6104d936600461362a565b6001600160a01b031660009081526010602052604090205490565b34801561050057600080fd5b506102dd61117b565b34801561051557600080fd5b506102dd61120b565b34801561052a57600080fd5b506105336112f5565b60405161028e919061379b565b34801561054c57600080fd5b506102dd60065481565b34801561056257600080fd5b506102dd600c5481565b34801561057857600080fd5b506102dd610587366004613736565b61198e565b34801561059857600080fd5b50610281611b4b565b3480156105ad57600080fd5b506102dd600e5481565b3480156105c357600080fd5b506102dd611b58565b3480156105d857600080fd5b506102b76105e73660046135fe565b611c69565b3480156105f857600080fd5b506102dd600a5481565b6106156106103660046137e9565b611d3d565b60405161028e919061385e565b34801561062e57600080fd5b506102dd611d49565b34801561064357600080fd5b506102dd610652366004613736565b611e6f565b34801561066357600080fd5b506102dd611f9f565b34801561067857600080fd5b506102dd67016345785d8a000081565b34801561069457600080fd5b506106a86106a336600461362a565b6120cd565b60408051948552602085019390935291830152606082015260800161028e565b3480156106d457600080fd5b506102dd60075481565b3480156106ea57600080fd5b5060005461043f906001600160a01b031681565b34801561070a57600080fd5b506102dd610719366004613736565b612113565b34801561072a57600080fd5b506102dd6107393660046138c0565b6001600160a01b03918216600090815260116020908152604080832093909416825291909152205490565b34801561077057600080fd5b506102dd61077f36600461362a565b61223a565b34801561079057600080fd5b5060045461043f906001600160a01b031681565b3480156107b057600080fd5b506102dd612379565b3480156107c557600080fd5b506102dd6107d4366004613736565b612440565b600180546107e6906138f9565b80601f0160208091040260200160405190810160405280929190818152602001828054610812906138f9565b801561085f5780601f106108345761010080835404028352916020019161085f565b820191906000526020600020905b81548152906001019060200180831161084257829003601f168201915b505050505081565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169263df595cb8926108b49261010090910490911690339030906001600160e01b03198835169060040161392e565b602060405180830381865afa1580156108d1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108f59190613961565b61091a5760405162461bcd60e51b815260040161091190613983565b60405180910390fd5b3360008181526011602090815260408083206001600160a01b038816808552908352928190208690555185815283917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925910160405180910390a35060019392505050565b6000804360095414156109945750600a54610a0f565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109d4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109f891906139ab565b90506000610a0643836124f6565b60200151925050505b6001600160a01b0383166000908152601260205260408120805482918291610a3e575060009695505050505050565b8054610a4a908661278b565b90945092506000846003811115610a6357610a636139c4565b14610ab05760405162461bcd60e51b815260206004820152601e60248201527f216d756c55496e74206f766572666c6f7720636865636b206661696c656400006044820152606401610911565b610abe8382600101546127cd565b90945091506000846003811115610ad757610ad76139c4565b14610b245760405162461bcd60e51b815260206004820152601e60248201527f2164697655496e74206f766572666c6f7720636865636b206661696c656400006044820152606401610911565b5095945050505050565b600080610b3a816127f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610b8493610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015610ba1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bc59190613961565b610be15760405162461bcd60e51b815260040161091190613983565b6000610bef338787876128bc565b149150610bfb81612b73565b509392505050565b610c0b612bf2565b610c405760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610911565b610c4c600185856134e1565b50610c59600283836134e1565b5050505050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc591906139ab565b905082811015610d105760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b6044820152606401610911565b6004546001600160a01b031663b8168816610d2b85846139f0565b600b54600e54600d54600c54610d419190613a07565b610d4b9190613a07565b600654600754600854610d5e9190613a07565b610d689190613a07565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015610db7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ddb91906139ab565b9392505050565b6000806040518060200160405280610df8611f9f565b90526001600160a01b038416600090815260106020526040812054919250908190610e24908490612d69565b90925090506000826003811115610e3d57610e3d6139c4565b14610e755760405162461bcd60e51b81526020600482015260086024820152672162616c616e636560c01b6044820152606401610911565b949350505050565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893610ec793610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015610ee4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f089190613961565b610f245760405162461bcd60e51b815260040161091190613983565b610f2c611b58565b5082600b6000828254610f3f9190613a07565b9091555030905060405163067db1b360e01b8152336004820152602481018590526001600160a01b03919091169063067db1b390604401600060405180830381600087803b158015610f9057600080fd5b505af1158015610fa4573d6000803e3d6000fd5b505060135460405163012b1f4560e71b815233935063958fa2809250610fdc916001600160a01b031690879087908790600401613a1f565b600060405180830381600087803b158015610ff657600080fd5b505af115801561100a573d6000803e3d6000fd5b505050506110153090565b6040516304d7c4cd60e21b8152336004820152602481018590526001600160a01b03919091169063135f1334906044016020604051808303816000875af1158015611064573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108891906139ab565b5082600b600082825461109b91906139f0565b909155505060408051338152602081018590527fe756d016d0e956882a6de9c72a2fe06d7d488ecbe6d76628713077ea7930cff8910160405180910390a1505050565b6000600d54600e54600c546110f39190613a07565b6110fd9190613a07565b600b54306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561113e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116291906139ab565b61116c9190613a07565b61117691906139f0565b905090565b600043600954141561118e5750600b5490565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f291906139ab565b9050600061120043836124f6565b606001519392505050565b6000611215612bf2565b8061122f575060035461010090046001600160a01b031633145b6112645760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610911565b604051632210724360e11b8152738fba84867ba458e7c6e2c024d2de3d0b5c3ea1c26004820152738680ceabcb9b56913c519c069add6bc3494b7020908190634420e486906024016020604051808303816000875af11580156112cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef91906139ab565b91505090565b60408051601880825261032082019092526060919060009082602082016103008036833701905050905063a9059cbb60e01b8161133184613a7d565b93508360ff168151811061134757611347613a9a565b6001600160e01b0319909216602092830291909101909101526323b872dd60e01b8161137284613a7d565b93508360ff168151811061138857611388613a9a565b6001600160e01b031990921660209283029190910190910152636eb1769f60e11b816113b384613a7d565b93508360ff16815181106113c9576113c9613a9a565b6001600160e01b03199092166020928302919091019091015263095ea7b360e01b816113f484613a7d565b93508360ff168151811061140a5761140a613a9a565b6001600160e01b0319909216602092830291909101909101526370a0823160e01b8161143584613a7d565b93508360ff168151811061144b5761144b613a9a565b6001600160e01b0319909216602092830291909101909101526348ee9b6360e11b8161147684613a7d565b93508360ff168151811061148c5761148c613a9a565b6001600160e01b03199092166020928302919091019091015263f2b3abbd60e01b816114b784613a7d565b93508360ff16815181106114cd576114cd613a9a565b6001600160e01b031990921660209283029190910190910152630d05535360e21b816114f884613a7d565b93508360ff168151811061150e5761150e613a9a565b6001600160e01b03199092166020928302919091019091015263fca7820b60e01b8161153984613a7d565b93508360ff168151811061154f5761154f613a9a565b6001600160e01b031990921660209283029190910190910152630ae9d70b60e41b8161157a84613a7d565b93508360ff168151811061159057611590613a9a565b6001600160e01b031990921660209283029190910190910152631f1f3b4560e31b816115bb84613a7d565b93508360ff16815181106115d1576115d1613a9a565b6001600160e01b03199092166020928302919091019091015263bd6d894d60e01b816115fc84613a7d565b93508360ff168151811061161257611612613a9a565b6001600160e01b03199092166020928302919091019091015263a6afed9560e01b8161163d84613a7d565b93508360ff168151811061165357611653613a9a565b6001600160e01b031990921660209283029190910190910152630e759dd360e31b8161167e84613a7d565b93508360ff168151811061169457611694613a9a565b6001600160e01b031990921660209283029190910190910152633af9e66960e01b816116bf84613a7d565b93508360ff16815181106116d5576116d5613a9a565b6001600160e01b031990921660209283029190910190910152631592ca1b60e31b8161170084613a7d565b93508360ff168151811061171657611716613a9a565b6001600160e01b03199092166020928302919091019091015263b1e23dbb60e01b8161174184613a7d565b93508360ff168151811061175757611757613a9a565b6001600160e01b031990921660209283029190910190910152630d76ba9960e21b8161178284613a7d565b93508360ff168151811061179857611798613a9a565b6001600160e01b03199092166020928302919091019091015263cfcd4c0760e01b816117c384613a7d565b93508360ff16815181106117d9576117d9613a9a565b6001600160e01b0319909216602092830291909101909101526325759ecd60e11b8161180484613a7d565b93508360ff168151811061181a5761181a613a9a565b6001600160e01b031990921660209283029190910190910152633c3b4b8960e01b8161184584613a7d565b93508360ff168151811061185b5761185b613a9a565b6001600160e01b0319909216602092830291909101909101526361bfb47160e11b8161188684613a7d565b93508360ff168151811061189c5761189c613a9a565b6001600160e01b0319909216602092830291909101909101526305eff7ef60e21b816118c784613a7d565b93508360ff16815181106118dd576118dd613a9a565b6001600160e01b031990921660209283029190910190910152633f8af10b60e11b8161190884613a7d565b93508360ff168151811061191e5761191e613a9a565b6001600160e01b03199092166020928302919091019091015260ff8216156119885760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610911565b92915050565b60008061199a816127f8565b6119a2611b58565b5043600954146119bf576119b8600a6052612dbb565b9150611b3c565b6000198314156119cf5760065492505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4791906139ab565b9050670de0b6b3a76400008185600854611a619190613a07565b611a6b9190613a07565b1115611a8557611a7d60026053612dbb565b925050611b3c565b8360065414611ae957611a96612bf2565b611aa657611a7d60016051612dbb565b600680549085905560408051828152602081018790527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a1505b8060075414611b3557600780549082905560408051828152602081018490527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1505b60005b9250505b611b4581612b73565b50919050565b600280546107e6906138f9565b6009546000904390811415611b6e5760006112ef565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611bae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bd291906139ab565b90506000611be083836124f6565b6009849055602081810151600a819055606080840151600b819055608080860151600c5560a0860151600e5560c0860151600d5560e0860151604080518a815296870191909152850193909352908301529192507f4dec04e750ca11537cabcd8a9eab06494de08da3735bc8871cd41250e190bc04910160405180910390a16000935050505090565b600080611c75816127f8565b60008054600354604051631beb2b9760e31b81526001600160a01b039283169363df595cb893611cbf93610100900416913391309190356001600160e01b0319169060040161392e565b602060405180830381865afa158015611cdc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d009190613961565b611d1c5760405162461bcd60e51b815260040161091190613983565b6000611d2a333387876128bc565b149150611d3681612b73565b5092915050565b6060610ddb8383612e34565b6004546000906001600160a01b031663b8168816306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dbf91906139ab565b600b54600e54600d54600c54611dd59190613a07565b611ddf9190613a07565b600654600754600854611df29190613a07565b611dfc9190613a07565b6040516001600160e01b031960e087901b16815260048101949094526024840192909252604483015260648201526084015b602060405180830381865afa158015611e4b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061117691906139ab565b6004546000906001600160a01b031663b816881683306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ec2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ee691906139ab565b611ef09190613a07565b600b54600e54600d54600c54611f069190613a07565b611f109190613a07565b600654600754600854611f239190613a07565b611f2d9190613a07565b6040516001600160e01b031960e087901b1681526004810194909452602484019290925260448301526064820152608401602060405180830381865afa158015611f7b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061198891906139ab565b600060095443141561202d57611176600f54600554611fbb3090565b6001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ff8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201c91906139ab565b600b54600c54600d54600e54612f85565b6000306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa15801561206d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209191906139ab565b9050600061209f43836124f6565b90506120c6816040015160055484846060015185608001518660c001518760a00151612f85565b9250505090565b6001600160a01b03811660009081526010602052604081205481908190819081806120f78861097e565b9150612101611f9f565b90506000989297509095509350915050565b600080306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612154573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061217891906139ab565b9050828110156121c35760405162461bcd60e51b81526020600482015260166024820152750dac2e4d6cae840c6c2e6d040dcdee840cadcdeeaced60531b6044820152606401610911565b6004546001600160a01b03166315f240536121de85846139f0565b85600b546121ec9190613a07565b600e54600d54600c546121ff9190613a07565b6122099190613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401610d9a565b600080612246816127f8565b61224e611b58565b50612257612bf2565b612267576119b86001604d612dbb565b436009541461227c576119b8600a604c612dbb565b826001600160a01b0316632191f92a6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156122ba573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122de9190613961565b6123145760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b6044820152606401610911565b600480546001600160a01b038581166001600160a01b031983168117909355604080519190921680825260208201939093527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f92691015b60405180910390a16000611b38565b6004546000906001600160a01b03166315f24053306001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa1580156123cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123ef91906139ab565b600b54600e54600d54600c546124059190613a07565b61240f9190613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401611e2e565b60008061244c816127f8565b612454611b58565b5061245d612bf2565b61246d576119b860016058612dbb565b4360095414612482576119b8600a6059612dbb565b670de0b6b3a76400006007546006548561249c9190613a07565b6124a69190613a07565b11156124b8576119b86002605a612dbb565b600880549084905560408051828152602081018690527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460910161236a565b61253e60405180610100016040528060008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6000600e54600d546125509190613a07565b600454600b54600c549293506000926001600160a01b03909216916315f2405391879161257e908790613a07565b6040516001600160e01b031960e086901b168152600481019390935260248301919091526044820152606401602060405180830381865afa1580156125c7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125eb91906139ab565b905065048c2739500081111561264257818411156126395760405162461bcd60e51b815260206004820152600b60248201526a21626f72726f775261746560a81b6044820152606401610911565b5065048c273950005b600080612651876009546130c4565b9092509050600082600381111561266a5761266a6139c4565b146126a55760405162461bcd60e51b815260206004820152600b60248201526a21626c6f636b44656c746160a81b6044820152606401610911565b868552600f546040808701919091528051602081019091528381526000906126cd90836130ef565b90506126db81600b54613120565b60e08701819052600b546126ee91613a07565b60608701526040805160208101909152600854815260e0870151600c54612716929190613138565b60808701526040805160208101909152600754815260e0870151600e5461273e929190613138565b60a08701526040805160208101909152600654815260e0870151600d54612766929190613138565b60c0870152600a5461277a90829080613138565b602087015250939695505050505050565b6000808361279e575060009050806127c6565b838302836127ac8683613ab0565b146127bf576002600092509250506127c6565b6000925090505b9250929050565b600080826127e157506001905060006127c6565b60006127ed8486613ab0565b915091509250929050565b600054600160a01b900460ff1661283e5760405162461bcd60e51b815260206004820152600a6024820152691c994b595b9d195c995960b21b6044820152606401610911565b806128ac57600360019054906101000a90046001600160a01b03166001600160a01b031663c90c20b16040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561289357600080fd5b505af11580156128a7573d6000803e3d6000fd5b505050505b506000805460ff60a01b19169055565b6003546040516317b9b84b60e31b81523060048201526001600160a01b03858116602483015284811660448301526064820184905260009283926101009091049091169063bdcdc258906084016020604051808303816000875af1158015612928573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061294c91906139ab565b90508015612969576129616003605b83613162565b915050610e75565b836001600160a01b0316856001600160a01b0316141561298f576129616002605c612dbb565b6000856001600160a01b0316876001600160a01b031614156129b457506000196129dc565b506001600160a01b038086166000908152601160209081526040808320938a16835292905220545b6000806000806129ec85896130c4565b90945092506000846003811115612a0557612a056139c4565b14612a2357612a166009605c612dbb565b9650505050505050610e75565b6001600160a01b038a16600090815260106020526040902054612a4690896130c4565b90945091506000846003811115612a5f57612a5f6139c4565b14612a7057612a166009605d612dbb565b6001600160a01b038916600090815260106020526040902054612a939089613204565b90945090506000846003811115612aac57612aac6139c4565b14612abd57612a166009605e612dbb565b6001600160a01b03808b16600090815260106020526040808220859055918b168152208190556000198514612b15576001600160a01b03808b166000908152601160209081526040808320938f168352929052208390555b886001600160a01b03168a6001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8a604051612b5a91815260200190565b60405180910390a35060009a9950505050505050505050565b6000805460ff60a01b1916600160a01b17905580612bef57600360019054906101000a90046001600160a01b03166001600160a01b031663632e51426040518163ffffffff1660e01b8152600401600060405180830381600087803b158015612bdb57600080fd5b505af1158015610c59573d6000803e3d6000fd5b50565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c6f9190613ad2565b6001600160a01b0316336001600160a01b0316148015612cec5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612cc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cec9190613961565b806112ef57506000546001600160a01b0316331480156112ef5750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d45573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112ef9190613961565b600080600080612d79868661322a565b90925090506000826003811115612d9257612d926139c4565b14612da357509150600090506127c6565b6000612dae826132a6565b9350935050509250929050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836011811115612df057612df06139c4565b836061811115612e0257612e026139c4565b60408051928352602083019190915260009082015260600160405180910390a1826011811115610ddb57610ddb6139c4565b60608167ffffffffffffffff811115612e4f57612e4f613a67565b604051908082528060200260200182016040528015612e8257816020015b6060815260200190600190039081612e6d5790505b50905060005b82811015611d365760008030868685818110612ea657612ea6613a9a565b9050602002810190612eb89190613aef565b604051612ec6929190613b36565b600060405180830381855af49150503d8060008114612f01576040519150601f19603f3d011682016040523d82523d6000602084013e612f06565b606091505b509150915081612f5257604481511015612f1f57600080fd5b60048101905080806020019051810190612f399190613b46565b60405162461bcd60e51b815260040161091191906135d6565b80848481518110612f6557612f65613a9a565b602002602001018190525050508080612f7d90613be8565b915050612e88565b600087612f935750856130b9565b6000612fab6040518060200160405280600081525090565b6000612fcc898987612fbd8a8c613a07565b612fc79190613a07565b6132be565b935090506000816003811115612fe457612fe46139c4565b1461303f5760405162461bcd60e51b815260206004820152602560248201527f216164645468656e53756255496e74206f766572666c6f7720636865636b2066604482015264185a5b195960da1b6064820152608401610911565b613049838c613311565b925090506000816003811115613061576130616139c4565b146130ae5760405162461bcd60e51b815260206004820152601d60248201527f21676574457870206f766572666c6f7720636865636b206661696c65640000006044820152606401610911565b505191506130b99050565b979650505050505050565b6000808383116130e35760006130da84866139f0565b915091506127c6565b506003905060006127c6565b60408051602081019091526000815260405180602001604052806131178560000151856133dc565b90529392505050565b60008061312d84846130ef565b9050610e75816132a6565b60008061314585856130ef565b9050613159613153826132a6565b8461341e565b95945050505050565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0846011811115613197576131976139c4565b8460618111156131a9576131a96139c4565b604080519283526020830191909152810184905260600160405180910390a160038460118111156131dc576131dc6139c4565b146131f8578360118111156131f3576131f36139c4565b610e75565b610e75826103e8613a07565b60008083830184811061321c576000925090506127c6565b6002600092509250506127c6565b60006132426040518060200160405280600081525090565b60008061325386600001518661278b565b9092509050600082600381111561326c5761326c6139c4565b1461328b575060408051602081019091526000815290925090506127c6565b60408051602081019091529081526000969095509350505050565b805160009061198890670de0b6b3a764000090613ab0565b6000806000806132ce8787613204565b909250905060008260038111156132e7576132e76139c4565b146132f85750915060009050613309565b61330281866130c4565b9350935050505b935093915050565b60006133296040518060200160405280600081525090565b60008061333e86670de0b6b3a764000061278b565b90925090506000826003811115613357576133576139c4565b14613376575060408051602081019091526000815290925090506127c6565b60008061338383886127cd565b9092509050600082600381111561339c5761339c6139c4565b146133bf57816040518060200160405280600081525095509550505050506127c6565b604080516020810190915290815260009890975095505050505050565b6000610ddb83836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250613454565b6000610ddb8383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b8152506134b0565b6000831580613461575082155b1561346e57506000610ddb565b600061347a8486613c03565b9050836134878683613ab0565b1483906134a75760405162461bcd60e51b815260040161091191906135d6565b50949350505050565b6000806134bd8486613a07565b905082858210156134a75760405162461bcd60e51b815260040161091191906135d6565b8280546134ed906138f9565b90600052602060002090601f01602090048101928261350f5760008555613555565b82601f106135285782800160ff19823516178555613555565b82800160010185558215613555579182015b8281111561355557823582559160200191906001019061353a565b50613561929150613565565b5090565b5b808211156135615760008155600101613566565b60005b8381101561359557818101518382015260200161357d565b838111156135a4576000848401525b50505050565b600081518084526135c281602086016020860161357a565b601f01601f19169290920160200192915050565b602081526000610ddb60208301846135aa565b6001600160a01b0381168114612bef57600080fd5b6000806040838503121561361157600080fd5b823561361c816135e9565b946020939093013593505050565b60006020828403121561363c57600080fd5b8135610ddb816135e9565b60008060006060848603121561365c57600080fd5b8335613667816135e9565b92506020840135613677816135e9565b929592945050506040919091013590565b60008083601f84011261369a57600080fd5b50813567ffffffffffffffff8111156136b257600080fd5b6020830191508360208285010111156127c657600080fd5b600080600080604085870312156136e057600080fd5b843567ffffffffffffffff808211156136f857600080fd5b61370488838901613688565b9096509450602087013591508082111561371d57600080fd5b5061372a87828801613688565b95989497509550505050565b60006020828403121561374857600080fd5b5035919050565b60008060006040848603121561376457600080fd5b83359250602084013567ffffffffffffffff81111561378257600080fd5b61378e86828701613688565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156137dd5783516001600160e01b031916835292840192918401916001016137b7565b50909695505050505050565b600080602083850312156137fc57600080fd5b823567ffffffffffffffff8082111561381457600080fd5b818501915085601f83011261382857600080fd5b81358181111561383757600080fd5b8660208260051b850101111561384c57600080fd5b60209290920196919550909350505050565b6000602080830181845280855180835260408601915060408160051b870101925083870160005b828110156138b357603f198886030184526138a18583516135aa565b94509285019290850190600101613885565b5092979650505050505050565b600080604083850312156138d357600080fd5b82356138de816135e9565b915060208301356138ee816135e9565b809150509250929050565b600181811c9082168061390d57607f821691505b60208210811415611b4557634e487b7160e01b600052602260045260246000fd5b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b60006020828403121561397357600080fd5b81518015158114610ddb57600080fd5b6020808252600e908201526d1b9bdd08185d5d1a1bdc9a5e995960921b604082015260600190565b6000602082840312156139bd57600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600082821015613a0257613a026139da565b500390565b60008219821115613a1a57613a1a6139da565b500190565b6001600160a01b0385168152602081018490526060604082018190528101829052818360808301376000818301608090810191909152601f909201601f191601019392505050565b634e487b7160e01b600052604160045260246000fd5b600060ff821680613a9057613a906139da565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b600082613acd57634e487b7160e01b600052601260045260246000fd5b500490565b600060208284031215613ae457600080fd5b8151610ddb816135e9565b6000808335601e19843603018112613b0657600080fd5b83018035915067ffffffffffffffff821115613b2157600080fd5b6020019150368190038213156127c657600080fd5b8183823760009101908152919050565b600060208284031215613b5857600080fd5b815167ffffffffffffffff80821115613b7057600080fd5b818401915084601f830112613b8457600080fd5b815181811115613b9657613b96613a67565b604051601f8201601f19908116603f01168101908382118183101715613bbe57613bbe613a67565b81604052828152876020848701011115613bd757600080fd5b6130b983602083016020880161357a565b6000600019821415613bfc57613bfc6139da565b5060010190565b6000816000190483118215151615613c1d57613c1d6139da565b50029056fea164736f6c634300080a000a", + "sourceMap": "738:25607:14:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;580:18:15;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7183:234:14;;;;;;;;;;-1:-1:-1;7183:234:14;;;;;:::i;:::-;;:::i;:::-;;;1386:14:504;;1379:22;1361:41;;1349:2;1334:18;7183:234:14;1221:187:504;1783:36:15;;;;;;;;;;;;;;;;;;;1559:25:504;;;1547:2;1532:18;1783:36:15;1413:177:504;22241:1406:14;;;;;;;;;;-1:-1:-1;22241:1406:14;;;;;:::i;:::-;;:::i;2626:26:15:-;;;;;;;;;;;;;;;;6508:233:14;;;;;;;;;;-1:-1:-1;6508:233:14;;;;;:::i;:::-;;:::i;750:21:15:-;;;;;;;;;;-1:-1:-1;750:21:15;;;;;;;;;;;2480:4:504;2468:17;;;2450:36;;2438:2;2423:18;750:21:15;2308:184:504;8420:233:14;;;;;;;;;;-1:-1:-1;8420:233:14;;;;;:::i;:::-;;:::i;:::-;;14523:443;;;;;;;;;;-1:-1:-1;14523:443:14;;;;;:::i;:::-;;:::i;23827:330::-;;;;;;;;;;-1:-1:-1;23827:330:14;;;;;:::i;:::-;;:::i;24161:386::-;;;;;;;;;;-1:-1:-1;24161:386:14;;;;;:::i;:::-;;:::i;2162:27:15:-;;;;;;;;;;;;;;;;2984:268:14;;;;;;;;;;;;;:::i;1148:35:15:-;;;;;;;;;;-1:-1:-1;1148:35:15;;;;;;;-1:-1:-1;;;;;1148:35:15;;;;;;-1:-1:-1;;;;;4434:32:504;;;4416:51;;4404:2;4389:18;1148:35:15;4244:229:504;2405:29:15;;;;;;;;;;;;;;;;3491:59;;;;;;;;;;;;3544:6;3491:59;;1896:33;;;;;;;;;;;;;;;;3740:25;;;;;;;;;;-1:-1:-1;3740:25:15;;;;-1:-1:-1;;;;;3740:25:15;;;8038:111:14;;;;;;;;;;-1:-1:-1;8038:111:14;;;;;:::i;:::-;-1:-1:-1;;;;;8124:20:14;8102:7;8124:20;;;:13;:20;;;;;;;8038:111;20844:345;;;;;;;;;;;;;:::i;26043:300::-;;;;;;;;;;;;;:::i;1056:1924::-;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;1551:31:15:-;;;;;;;;;;;;;;;;2282:28;;;;;;;;;;;;;;;;10173:1658:14;;;;;;;;;;-1:-1:-1;10173:1658:14;;;;;:::i;:::-;;:::i;663:20:15:-;;;;;;;;;;;;;:::i;2529:29::-;;;;;;;;;;;;;;;;19778:936:14;;;;;;;;;;;;;:::i;6019:207::-;;;;;;;;;;-1:-1:-1;6019:207:14;;;;;:::i;:::-;;:::i;2037:26:15:-;;;;;;;;;;;;;;;;25837:202:14;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;13859:310::-;;;;;;;;;;;;;:::i;14173:346::-;;;;;;;;;;-1:-1:-1;14173:346:14;;;;;:::i;:::-;;:::i;15105:817::-;;;;;;;;;;;;;:::i;3619:52:15:-;;;;;;;;;;;;3667:4;3619:52;;21513:473:14;;;;;;;;;;-1:-1:-1;21513:473:14;;;;;:::i;:::-;;:::i;:::-;;;;7016:25:504;;;7072:2;7057:18;;7050:34;;;;7100:18;;;7093:34;7158:2;7143:18;;7136:34;7003:3;6988:19;21513:473:14;6785:391:504;1668:31:15;;;;;;;;;;;;;;;;336:33;;;;;;;;;;-1:-1:-1;336:33:15;;;;-1:-1:-1;;;;;336:33:15;;;13319:380:14;;;;;;;;;;-1:-1:-1;13319:380:14;;;;;:::i;:::-;;:::i;7725:142::-;;;;;;;;;;-1:-1:-1;7725:142:14;;;;;:::i;:::-;-1:-1:-1;;;;;7828:25:14;;;7806:7;7828:25;;;:18;:25;;;;;;;;:34;;;;;;;;;;;;;7725:142;12178:736;;;;;;;;;;-1:-1:-1;12178:736:14;;;;;:::i;:::-;;:::i;1272:42:15:-;;;;;;;;;;-1:-1:-1;1272:42:15;;;;-1:-1:-1;;;;;1272:42:15;;;13074:241:14;;;;;;;;;;;;;:::i;8933:975::-;;;;;;;;;;-1:-1:-1;8933:975:14;;;;;:::i;:::-;;:::i;580:18:15:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;7183:234:14:-;7271:4;933:10;;961:11;;917:93;;-1:-1:-1;;;917:93:14;;-1:-1:-1;;;;;933:10:14;;;;917:35;;:93;;933:10;961:11;;;;;;;975:10;;995:4;;-1:-1:-1;;;;;;1002:7:14;;;;917:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;902:138;;;;-1:-1:-1;;;902:138:14;;;;;;;:::i;:::-;;;;;;;;;7297:10:::1;7283:11;7313:23:::0;;;:18:::1;:23;::::0;;;;;;;-1:-1:-1;;;;;7313:32:14;::::1;::::0;;;;;;;;;;:41;;;7365:30;1559:25:504;;;7297:10:14;;7365:30:::1;::::0;1532:18:504;7365:30:14::1;;;;;;;-1:-1:-1::0;7408:4:14::1;::::0;7183:234;-1:-1:-1;;;7183:234:14:o;22241:1406::-;22318:7;22333:20;22385:12;22363:18;;:34;22359:277;;;-1:-1:-1;22422:11:14;;22359:277;;;22454:17;25822:4;-1:-1:-1;;;;;22474:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22454:40;;22502:30;22535:52;22563:12;22577:9;22535:27;:52::i;:::-;22610:19;;;;-1:-1:-1;;;22359:277:14;-1:-1:-1;;;;;22866:23:14;;22705:17;22866:23;;;:14;:23;;;;;23074:24;;22705:17;;;;23070:58;;-1:-1:-1;23120:1:14;;22241:1406;-1:-1:-1;;;;;;22241:1406:14:o;23070:58::-;23342:24;;23334:47;;23368:12;23334:7;:47::i;:::-;23301:80;;-1:-1:-1;23301:80:14;-1:-1:-1;23406:18:14;23395:7;:29;;;;;;;;:::i;:::-;;23387:72;;;;-1:-1:-1;;;23387:72:14;;10331:2:504;23387:72:14;;;10313:21:504;10370:2;10350:18;;;10343:30;10409:32;10389:18;;;10382:60;10459:18;;23387:72:14;10129:354:504;23387:72:14;23486:58;23494:19;23515:14;:28;;;23486:7;:58::i;:::-;23466:78;;-1:-1:-1;23466:78:14;-1:-1:-1;23569:18:14;23558:7;:29;;;;;;;;:::i;:::-;;23550:72;;;;-1:-1:-1;;;23550:72:14;;10690:2:504;23550:72:14;;;10672:21:504;10729:2;10709:18;;;10702:30;10768:32;10748:18;;;10741:60;10818:18;;23550:72:14;10488:354:504;23550:72:14;-1:-1:-1;23636:6:14;22241:1406;-1:-1:-1;;;;;22241:1406:14:o;6508:233::-;6646:4;6617:5;24712:30;24732:9;24712:19;:30::i;:::-;933:10:::1;::::0;;961:11:::1;::::0;917:93:::1;::::0;-1:-1:-1;;;917:93:14;;-1:-1:-1;;;;;933:10:14;;::::1;::::0;917:35:::1;::::0;:93:::1;::::0;933:10:::1;961:11:::0;::::1;;::::0;975:10:::1;::::0;995:4:::1;::::0;1002:7;::::1;-1:-1:-1::0;;;;;;1002:7:14::1;::::0;917:93:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;902:138;;;;-1:-1:-1::0;;;902:138:14::1;;;;;;;:::i;:::-;6721:14:::2;6665:44;6680:10;6692:3;6697;6702:6;6665:14;:44::i;:::-;:71;6658:78;;24755:29:::0;24774:9;24755:18;:29::i;:::-;6508:233;;;;;;:::o;8420:::-;8547:16;:14;:16::i;:::-;8539:35;;;;-1:-1:-1;;;8539:35:14;;11049:2:504;8539:35:14;;;11031:21:504;11088:1;11068:18;;;11061:29;-1:-1:-1;;;11106:18:504;;;11099:36;11152:18;;8539:35:14;10847:329:504;8539:35:14;8614:12;:4;8621:5;;8614:12;:::i;:::-;-1:-1:-1;8632:16:14;:6;8641:7;;8632:16;:::i;:::-;;8420:233;;;;:::o;14523:443::-;14611:7;;25822:4;-1:-1:-1;;;;;14641:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14626:35;;14683:14;14675:4;:22;;14667:57;;;;-1:-1:-1;;;14667:57:14;;11383:2:504;14667:57:14;;;11365:21:504;11422:2;11402:18;;;11395:30;-1:-1:-1;;;11441:18:504;;;11434:52;11503:18;;14667:57:14;11181:346:504;14667:57:14;14743:17;;-1:-1:-1;;;;;14743:17:14;:31;14784:21;14791:14;14784:4;:21;:::i;:::-;14815:12;;14870:14;;14853;;14837:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;14937:16;;14918;;14894:21;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;14743:218;;-1:-1:-1;;;;;;14743:218:14;;;;;;;;;;7016:25:504;;;;7057:18;;;7050:34;;;;7100:18;;;7093:34;7143:18;;;7136:34;6988:19;;14743:218:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14730:231;14523:443;-1:-1:-1;;;14523:443:14:o;23827:330::-;23903:7;23918:23;23944:40;;;;;;;;23960:21;:19;:21::i;:::-;23944:40;;-1:-1:-1;;;;;24058:20:14;;23991:14;24058:20;;;:13;:20;;;;;;23918:66;;-1:-1:-1;23991:14:14;;;24026:53;;23918:66;;24026:17;:53::i;:::-;23990:89;;-1:-1:-1;23990:89:14;-1:-1:-1;24101:18:14;24093:4;:26;;;;;;;;:::i;:::-;;24085:47;;;;-1:-1:-1;;;24085:47:14;;12129:2:504;24085:47:14;;;12111:21:504;12168:1;12148:18;;;12141:29;-1:-1:-1;;;12186:18:504;;;12179:38;12234:18;;24085:47:14;11927:331:504;24085:47:14;24145:7;23827:330;-1:-1:-1;;;;23827:330:14:o;24161:386::-;933:10;;;961:11;;917:93;;-1:-1:-1;;;917:93:14;;-1:-1:-1;;;;;933:10:14;;;;917:35;;:93;;933:10;961:11;;;;975:10;;995:4;;1002:7;;-1:-1:-1;;;;;;1002:7:14;;917:93;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;902:138;;;;-1:-1:-1;;;902:138:14;;;;;;;:::i;:::-;24248:16:::1;:14;:16::i;:::-;;24287:6;24271:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;25822:4:14;;-1:-1:-1;24299:46:14::1;::::0;-1:-1:-1;;;24299:46:14;;24326:10:::1;24299:46;::::0;::::1;12437:51:504::0;12504:18;;;12497:34;;;-1:-1:-1;;;;;24299:26:14;;;::::1;::::0;::::1;::::0;12410:18:504;;24299:46:14::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;-1:-1:-1::0;;24400:10:14::1;::::0;24352:73:::1;::::0;-1:-1:-1;;;24352:73:14;;24371:10:::1;::::0;-1:-1:-1;24352:47:14::1;::::0;-1:-1:-1;24352:73:14::1;::::0;-1:-1:-1;;;;;24400:10:14::1;::::0;24412:6;;24420:4;;;;24352:73:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;24432:10;25822:4:::0;;25741:92;24432:10:::1;:45;::::0;-1:-1:-1;;;24432:45:14;;24458:10:::1;24432:45;::::0;::::1;12437:51:504::0;12504:18;;;12497:34;;;-1:-1:-1;;;;;24432:25:14;;;::::1;::::0;::::1;::::0;12410:18:504;;24432:45:14::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24499:6;24483:12;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;24517:25:14::1;::::0;;24523:10:::1;12437:51:504::0;;12519:2;12504:18;;12497:34;;;24517:25:14::1;::::0;12410:18:504;24517:25:14::1;;;;;;;24161:386:::0;;;:::o;2984:268::-;3052:7;3232:14;;3215;;3199:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;3183:12;;25822:4;-1:-1:-1;;;;;3160:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:35;;;;:::i;:::-;:87;;;;:::i;:::-;3153:94;;2984:268;:::o;20844:345::-;20907:7;20948:12;20926:18;;:34;20922:263;;;-1:-1:-1;20977:12:14;;;20844:345::o;20922:263::-;21010:17;25822:4;-1:-1:-1;;;;;21030:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21010:40;;21058:30;21091:52;21119:12;21133:9;21091:27;:52::i;:::-;21158:20;;;;20844:345;-1:-1:-1;;;20844:345:14:o;26043:300::-;26086:7;26109:16;:14;:16::i;:::-;:54;;;-1:-1:-1;26151:11:14;;;;;-1:-1:-1;;;;;26151:11:14;26129:10;:34;26109:54;26101:73;;;;-1:-1:-1;;;26101:73:14;;11049:2:504;26101:73:14;;;11031:21:504;11088:1;11068:18;;;11061:29;-1:-1:-1;;;11106:18:504;;;11099:36;11152:18;;26101:73:14;10847:329:504;26101:73:14;26274:64;;-1:-1:-1;;;26274:64:14;;26295:42;26274:64;;;4416:51:504;26218:42:14;;;;26274:20;;4389:18:504;;26274:64:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;26267:71;;;26043:300;:::o;1056:1924::-;1214:22;;;1170:2;1214:22;;;;;;;;;1130:15;;1170:2;1153:14;;1170:2;1214:22;;;;;;;;;;-1:-1:-1;;1178:58:14;-1:-1:-1;;;;1178:58:14;1260:10;;;:::i;:::-;;;;1242:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1242:54:14;;;:29;;;;;;;;;;;:54;-1:-1:-1;;;1302:17:14;1320:10;;;:::i;:::-;;;;1302:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1302:58:14;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;1366:17:14;1384:10;;;:::i;:::-;;;;1366:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1366:55:14;;;:29;;;;;;;;;;;:55;-1:-1:-1;;;1427:17:14;1445:10;;;:::i;:::-;;;;1427:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1427:53:14;;;:29;;;;;;;;;;;:53;-1:-1:-1;;;1486:17:14;1504:10;;;:::i;:::-;;;;1486:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1486:55:14;;;:29;;;;;;;;;;;:55;-1:-1:-1;;;1547:17:14;1565:10;;;:::i;:::-;;;;1547:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1547:58:14;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;1611:17:14;1629:10;;;:::i;:::-;;;;1611:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1611:67:14;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;1684:17:14;1702:10;;;:::i;:::-;;;;1684:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1684:63:14;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1753:17:14;1771:10;;;:::i;:::-;;;;1753:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1753:63:14;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;1822:17:14;1840:10;;;:::i;:::-;;;;1822:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1822:64:14;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;1892:17:14;1910:10;;;:::i;:::-;;;;1892:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1892:64:14;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;1962:17:14;1980:10;;;:::i;:::-;;;;1962:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1962:65:14;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2033:17:14;2051:10;;;:::i;:::-;;;;2033:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2033:60:14;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2099:17:14;2117:10;;;:::i;:::-;;;;2099:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2099:65:14;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2170:17:14;2188:10;;;:::i;:::-;;;;2170:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2170:65:14;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2241:17:14;2259:10;;;:::i;:::-;;;;2241:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2241:55:14;;;:29;;;;;;;;;;;:55;-1:-1:-1;;;2302:17:14;2320:10;;;:::i;:::-;;;;2302:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2302:76:14;;;:29;;;;;;;;;;;:76;-1:-1:-1;;;2384:17:14;2402:10;;;:::i;:::-;;;;2384:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2384:77:14;;;:29;;;;;;;;;;;:77;-1:-1:-1;;;2467:17:14;2485:10;;;:::i;:::-;;;;2467:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2467:75:14;;;:29;;;;;;;;;;;:75;-1:-1:-1;;;2548:17:14;2566:10;;;:::i;:::-;;;;2548:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2548:72:14;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;2626:17:14;2644:10;;;:::i;:::-;;;;2626:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2626:51:14;;;:29;;;;;;;;;;;:51;-1:-1:-1;;;2683:17:14;2701:10;;;:::i;:::-;;;;2683:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2683:64:14;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2753:17:14;2771:10;;;:::i;:::-;;;;2753:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2753:66:14;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;2825:17:14;2843:10;;;:::i;:::-;;;;2825:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2825:59:14;;;:29;;;;;;;;;;;:59;2899:13;;;;2891:54;;;;-1:-1:-1;;;2891:54:14;;13755:2:504;2891:54:14;;;13737:21:504;13794:2;13774:18;;;13767:30;13833;13813:18;;;13806:58;13881:18;;2891:54:14;13553:352:504;2891:54:14;2958:17;1056:1924;-1:-1:-1;;1056:1924:14:o;10173:1658::-;10269:7;10253:5;24712:30;24732:9;24712:19;:30::i;:::-;10284:16:::1;:14;:16::i;:::-;;10396:12;10374:18;;:34;10370:129;;10425:67;10430:22;10454:37;10425:4;:67::i;:::-;10418:74;;;;10370:129;-1:-1:-1::0;;10545:19:14::1;:40;10541:84;;;10609:16;;10587:38;;10541:84;10660:27;10706:10:::0;::::1;;;;;;;;-1:-1:-1::0;;;;;10706:10:14::1;-1:-1:-1::0;;;;;10690:43:14::1;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10660:75;;1066:4:15;10908:19:14;10886;10862:21;;:43;;;;:::i;:::-;:65;;;;:::i;:::-;:100;10858:189;;;10979:61;10984:15;11001:38;10979:4;:61::i;:::-;10972:68;;;;;10858:189;11105:19;11085:16;;:39;11081:413;;11170:16;:14;:16::i;:::-;11165:112;;11205:63;11210:18;11230:37;11205:4;:63::i;11165:112::-;11338:16;::::0;;11362:38;;;;11434:53:::1;::::0;;14084:25:504;;;14140:2;14125:18;;14118:34;;;11434:53:14::1;::::0;14057:18:504;11434:53:14::1;;;;;;;11126:368;11081:413;11552:19;11532:16;;:39;11528:262;;11634:16;::::0;;11658:38;;;;11730:53:::1;::::0;;14084:25:504;;;14140:2;14125:18;;14118:34;;;11730:53:14::1;::::0;14057:18:504;11730:53:14::1;;;;;;;11573:217;11528:262;11811:14;11803:23;11796:30;;;24748:1;24755:29:::0;24774:9;24755:18;:29::i;:::-;10173:1658;;;;:::o;663:20:15:-;;;;;;;:::i;19778:936:14:-;19988:18;;19829:7;;19917:12;;19988:40;;19984:91;;;20053:14;20045:23;;19984:91;20081:17;25822:4;-1:-1:-1;;;;;20101:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20081:40;;20127:30;20160:58;20188:18;20208:9;20160:27;:58::i;:::-;20329:18;:39;;;20388:19;;;;;20374:11;:33;;;20428:20;;;;;20413:12;:35;;;20470:21;;;;;20454:13;:37;20514:22;;;;20497:14;:39;20559:22;;;;20542:14;:39;20618:27;;;;20592:81;;;7016:25:504;;;7057:18;;;7050:34;;;;7100:18;;7093:34;;;;7143:18;;;7136:34;20388:19:14;;-1:-1:-1;20592:81:14;;6988:19:504;20592:81:14;;;;;;;20694:14;20679:30;;;;;19778:936;:::o;6019:207::-;6124:4;6095:5;24712:30;24732:9;24712:19;:30::i;:::-;933:10:::1;::::0;;961:11:::1;::::0;917:93:::1;::::0;-1:-1:-1;;;917:93:14;;-1:-1:-1;;;;;933:10:14;;::::1;::::0;917:35:::1;::::0;:93:::1;::::0;933:10:::1;961:11:::0;::::1;;::::0;975:10:::1;::::0;995:4:::1;::::0;1002:7;::::1;-1:-1:-1::0;;;;;;1002:7:14::1;::::0;917:93:::1;;;:::i;:::-;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;902:138;;;;-1:-1:-1::0;;;902:138:14::1;;;;;;;:::i;:::-;6206:14:::2;6143:51;6158:10;6170;6182:3;6187:6;6143:14;:51::i;:::-;:78;6136:85;;24755:29:::0;24774:9;24755:18;:29::i;:::-;6019:207;;;;;:::o;25837:202::-;25970:22;26009:25;26029:4;;26009:19;:25::i;13859:310::-;13947:17;;13919:7;;-1:-1:-1;;;;;13947:17:14;:31;25822:4;-1:-1:-1;;;;;13988:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14018:12;;14073:14;;14056;;14040:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;14140:16;;14121;;14097:21;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;13947:217;;-1:-1:-1;;;;;;13947:217:14;;;;;;;;;;7016:25:504;;;;7057:18;;;7050:34;;;;7100:18;;;7093:34;7143:18;;;7136:34;6988:19;;13947:217:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;14173:346::-;14284:17;;14256:7;;-1:-1:-1;;;;;14284:17:14;:31;14348:10;25822:4;-1:-1:-1;;;;;14325:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:33;;;;:::i;:::-;14368:12;;14423:14;;14406;;14390:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;14490:16;;14471;;14447:21;;:40;;;;:::i;:::-;:59;;;;:::i;:::-;14284:230;;-1:-1:-1;;;;;;14284:230:14;;;;;;;;;;7016:25:504;;;;7057:18;;;7050:34;;;;7100:18;;;7093:34;7143:18;;;7136:34;6988:19;;14284:230:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;15105:817::-;15166:7;15201:18;;15185:12;:34;15181:737;;;15244:230;15281:11;;15304:27;;15343:10;25822:4;;25741:92;15343:10;-1:-1:-1;;;;;15343:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15375:12;;15399:13;;15424:14;;15450;;15244:25;:230::i;15181:737::-;15495:17;25822:4;-1:-1:-1;;;;;15515:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15495:40;;15543:30;15576:52;15604:12;15618:9;15576:27;:52::i;:::-;15543:85;;15652:259;15689:7;:19;;;15720:27;;15759:9;15780:7;:20;;;15812:7;:21;;;15845:7;:22;;;15879:7;:22;;;15652:25;:259::i;:::-;15637:274;;;;15105:817;:::o;21513:473::-;-1:-1:-1;;;;;21704:22:14;;21613:7;21704:22;;;:13;:22;;;;;;21613:7;;;;;;;;21810:29;21718:7;21810:20;:29::i;:::-;21794:45;;21869:21;:19;:21::i;:::-;21846:44;-1:-1:-1;21913:14:14;21897:84;21930:13;;-1:-1:-1;21945:13:14;;-1:-1:-1;21930:13:14;-1:-1:-1;21513:473:14;-1:-1:-1;;21513:473:14:o;13319:380::-;13401:7;;25822:4;-1:-1:-1;;;;;13431:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13416:35;;13473:12;13465:4;:20;;13457:55;;;;-1:-1:-1;;;13457:55:14;;11383:2:504;13457:55:14;;;11365:21:504;11422:2;11402:18;;;11395:30;-1:-1:-1;;;11441:18:504;;;11434:52;11503:18;;13457:55:14;11181:346:504;13457:55:14;13532:17;;-1:-1:-1;;;;;13532:17:14;:31;13573:19;13580:12;13573:4;:19;:::i;:::-;13617:12;13602;;:27;;;;:::i;:::-;13672:14;;13655;;13639:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;13532:162;;-1:-1:-1;;;;;;13532:162:14;;;;;;;;;;14365:25:504;;;;14406:18;;;14399:34;;;;14449:18;;;14442:34;14338:18;;13532:162:14;14163:319:504;12178:736:14;12310:7;12290:5;24712:30;24732:9;24712:19;:30::i;:::-;12327:16:::1;:14;:16::i;:::-;;12354;:14;:16::i;:::-;12349:118;;12387:73;12392:18;12412:47;12387:4;:73::i;12349:118::-;12499:12;12477:18;;:34;12473:139;;12528:77;12533:22;12557:47;12528:4;:77::i;12473:139::-;12626:20;-1:-1:-1::0;;;;;12626:40:14::1;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12618:62;;;::::0;-1:-1:-1;;;12618:62:14;;14689:2:504;12618:62:14::1;::::0;::::1;14671:21:504::0;14728:1;14708:18;;;14701:29;-1:-1:-1;;;14746:18:504;;;14739:37;14793:18;;12618:62:14::1;14487:330:504::0;12618:62:14::1;12728:17;::::0;;-1:-1:-1;;;;;12751:40:14;;::::1;-1:-1:-1::0;;;;;;12751:40:14;::::1;::::0;::::1;::::0;;;12802:70:::1;::::0;;12728:17;;;::::1;15088:34:504::0;;;15153:2;15138:18;;15131:43;;;;12802:70:14::1;::::0;15023:18:504;12802:70:14::1;;;;;;;;12894:14;12886:23;::::0;13074:241;13162:17;;13134:7;;-1:-1:-1;;;;;13162:17:14;:31;25822:4;-1:-1:-1;;;;;13203:18:14;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13233:12;;13288:14;;13271;;13255:13;;:30;;;;:::i;:::-;:47;;;;:::i;:::-;13162:148;;-1:-1:-1;;;;;;13162:148:14;;;;;;;;;;14365:25:504;;;;14406:18;;;14399:34;;;;14449:18;;;14442:34;14338:18;;13162:148:14;14163:319:504;8933:975:14;9039:7;9023:5;24712:30;24732:9;24712:19;:30::i;:::-;9054:16:::1;:14;:16::i;:::-;;9110;:14;:16::i;:::-;9105:113;;9143:68;9148:18;9168:42;9143:4;:68::i;9105:113::-;9314:12;9292:18;;:34;9288:134;;9343:72;9348:22;9372:42;9343:4;:72::i;9288:134::-;1066:4:15;9529:16:14;;9510;;9483:24;:43;;;;:::i;:::-;:62;;;;:::i;:::-;:97;9479:191;;;9597:66;9602:15;9619:43;9597:4;:66::i;9479:191::-;9711:21;::::0;;9738:48;;;;9798:68:::1;::::0;;14084:25:504;;;14140:2;14125:18;;14118:34;;;9798:68:14::1;::::0;14057:18:504;9798:68:14::1;13910:248:504::0;17383:2166:14;17495:30;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17495:30:14;17535:17;17572:14;;17555;;:31;;;;:::i;:::-;17621:17;;17664:12;;17678:13;;17535:51;;-1:-1:-1;17592:26:14;;-1:-1:-1;;;;;17621:17:14;;;;:31;;17653:9;;17678:25;;17535:51;;17678:25;:::i;:::-;17621:83;;-1:-1:-1;;;;;;17621:83:14;;;;;;;;;;14365:25:504;;;;14406:18;;;14399:34;;;;14449:18;;;14442:34;14338:18;;17621:83:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17592:112;;904:9:15;17714:18:14;:42;17710:166;;;17782:9;17770;:21;17766:103;;;17793:21;;-1:-1:-1;;;17793:21:14;;15387:2:504;17793:21:14;;;15369::504;15426:2;15406:18;;;15399:30;-1:-1:-1;;;15445:18:504;;;15438:41;15496:18;;17793:21:14;15185:335:504;17766:103:14;-1:-1:-1;904:9:15;17766:103:14;17882:17;17901:18;17923:40;17931:11;17944:18;;17923:7;:40::i;:::-;17881:82;;-1:-1:-1;17881:82:14;-1:-1:-1;17988:18:14;17977:7;:29;;;;;;;;:::i;:::-;;17969:53;;;;-1:-1:-1;;;17969:53:14;;15727:2:504;17969:53:14;;;15709:21:504;15766:2;15746:18;;;15739:30;-1:-1:-1;;;15785:18:504;;;15778:41;15836:18;;17969:53:14;15525:335:504;17969:53:14;18619:40;;;18687:11;;18665:19;;;;:33;;;;18743:37;;;;;;;;;;;18619:26;;18738:55;;18782:10;18738:4;:55::i;:::-;18704:89;;18829:54;18848:20;18870:12;;18829:18;:54::i;:::-;18799:27;;;:84;;;18942:12;;18912:42;;;:::i;:::-;18889:20;;;:65;19017:40;;;;;;;;;19033:21;;19017:40;;19065:27;;;;19100:13;;18984:135;;19017:40;19065:27;18984:25;:135::i;:::-;18960:21;;;:159;19183:35;;;;;;;;;19199:16;;19183:35;;19226:27;;;;19261:14;;19150:131;;19183:35;19226:27;19150:25;:131::i;:::-;19125:22;;;:156;19345:35;;;;;;;;;19361:16;;19345:35;;19388:27;;;;19423:14;;19312:131;;19345:35;19388:27;19312:25;:131::i;:::-;19287:22;;;:156;19519:11;;19471:73;;19497:20;;19519:11;19471:25;:73::i;:::-;19449:19;;;:95;-1:-1:-1;19449:7:14;;17383:2166;-1:-1:-1;;;;;;17383:2166:14:o;544:330:16:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:16;;-1:-1:-1;660:18:16;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:16;-1:-1:-1;544:330:16;;;;;;:::o;958:198::-;1020:9;;1050:6;1046:65;;-1:-1:-1;1074:26:16;;-1:-1:-1;1102:1:16;1066:38;;1046:65;1125:18;1145:5;1149:1;1145;:5;:::i;:::-;1117:34;;;;958:198;;;;;:::o;25090:178:14:-;25157:11;;-1:-1:-1;;;25157:11:14;;;;25149:34;;;;-1:-1:-1;;;25149:34:14;;16289:2:504;25149:34:14;;;16271:21:504;16328:2;16308:18;;;16301:30;-1:-1:-1;;;16347:18:504;;;16340:40;16397:18;;25149:34:14;16087:334:504;25149:34:14;25194:9;25189:49;;25205:11;;;;;;;;;-1:-1:-1;;;;;25205:11:14;-1:-1:-1;;;;;25205:31:14;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25189:49;-1:-1:-1;25258:5:14;25244:19;;-1:-1:-1;;;;25244:19:14;;;25090:178::o;3702:2078::-;3895:11;;:60;;-1:-1:-1;;;3895:60:14;;3931:4;3895:60;;;16695:34:504;-1:-1:-1;;;;;16765:15:504;;;16745:18;;;16738:43;16817:15;;;16797:18;;;16790:43;16849:18;;;16842:34;;;3823:7:14;;;;3895:11;;;;;;;;:27;;16629:19:504;;3895:60:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3877:78;-1:-1:-1;3965:12:14;;3961:132;;3994:92;4005:27;4034:42;4078:7;3994:10;:92::i;:::-;3987:99;;;;;3961:132;4148:3;-1:-1:-1;;;;;4141:10:14;:3;-1:-1:-1;;;;;4141:10:14;;4137:93;;;4168:55;4173:15;4190:32;4168:4;:55::i;4137:93::-;4296:25;4346:3;-1:-1:-1;;;;;4335:14:14;:7;-1:-1:-1;;;;;4335:14:14;;4331:145;;;-1:-1:-1;;;4331:145:14;;;-1:-1:-1;;;;;;4437:23:14;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;;4331:145;4543:17;4566:20;4592;4618;4671:34;4679:17;4698:6;4671:7;:34::i;:::-;4645:60;;-1:-1:-1;4645:60:14;-1:-1:-1;4726:18:14;4715:7;:29;;;;;;;;:::i;:::-;;4711:113;;4761:56;4766:16;4784:32;4761:4;:56::i;:::-;4754:63;;;;;;;;;;4711:113;-1:-1:-1;;;;;4864:18:14;;;;;;:13;:18;;;;;;4856:35;;4884:6;4856:7;:35::i;:::-;4830:61;;-1:-1:-1;4830:61:14;-1:-1:-1;4912:18:14;4901:7;:29;;;;;;;;:::i;:::-;;4897:112;;4947:55;4952:16;4970:31;4947:4;:55::i;4897:112::-;-1:-1:-1;;;;;5049:18:14;;;;;;:13;:18;;;;;;5041:35;;5069:6;5041:7;:35::i;:::-;5015:61;;-1:-1:-1;5015:61:14;-1:-1:-1;5097:18:14;5086:7;:29;;;;;;;;:::i;:::-;;5082:110;;5132:53;5137:16;5155:29;5132:4;:53::i;5082:110::-;-1:-1:-1;;;;;5303:18:14;;;;;;;:13;:18;;;;;;:33;;;5342:18;;;;;;:33;;;-1:-1:-1;;5437:38:14;;5433:106;;-1:-1:-1;;;;;5485:23:14;;;;;;;:18;:23;;;;;;;;:32;;;;;;;;;:47;;;5433:106;5599:3;-1:-1:-1;;;;;5585:26:14;5594:3;-1:-1:-1;;;;;5585:26:14;;5604:6;5585:26;;;;1559:25:504;;1547:2;1532:18;;1413:177;5585:26:14;;;;;;;;-1:-1:-1;5760:14:14;;3702:2078;-1:-1:-1;;;;;;;;;;3702:2078:14:o;25568:169::-;25626:11;:18;;-1:-1:-1;;;;25626:18:14;-1:-1:-1;;;25626:18:14;;;25689:9;25684:48;;25700:11;;;;;;;;;-1:-1:-1;;;;;25700:11:14;-1:-1:-1;;;;;25700:30:14;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25684:48;25568:169;:::o;10661:339:15:-;10710:4;10722:39;10793:11;;;;;;;;;-1:-1:-1;;;;;10793:11:15;10722:84;;10840:18;-1:-1:-1;;;;;10840:24:15;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;10826:40:15;:10;-1:-1:-1;;;;;10826:40:15;;:79;;;;;10870:18;-1:-1:-1;;;;;10870:33:15;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10825:170;;;-1:-1:-1;10939:10:15;;-1:-1:-1;;;;;10939:10:15;10917;:33;:77;;;;;10954:18;-1:-1:-1;;;;;10954:38:15;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;2379:288:24:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:24;-1:-1:-1;2560:18:24;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:24;-1:-1:-1;2601:1:24;;-1:-1:-1;2588:15:24;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;:::o;7757:151:23:-;7818:7;7838:39;7854:3;7846:12;;;;;;;;:::i;:::-;7868:4;7860:13;;;;;;;;:::i;:::-;7838:39;;;14365:25:504;;;14421:2;14406:18;;14399:34;;;;7875:1:23;14449:18:504;;;14442:34;14353:2;14338:18;7838:39:23;;;;;;;7899:3;7891:12;;;;;;;;:::i;273:573:425:-;356:22;408:4;396:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;386:34;;431:9;426:416;446:15;;;426:416;;;477:12;;522:4;541;;546:1;541:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;514:35;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;476:73;;;;563:7;558:250;;674:2;658:6;:13;:18;654:32;;;678:8;;;654:32;739:4;731:6;727:17;717:27;;781:6;770:28;;;;;;;;;;;;:::i;:::-;763:36;;-1:-1:-1;;;763:36:425;;;;;;;;:::i;558:250::-;829:6;816:7;824:1;816:10;;;;;;;;:::i;:::-;;;;;;:19;;;;468:374;;463:3;;;;;:::i;:::-;;;;426:416;;15926:1197:14;16193:7;16212:17;16208:911;;-1:-1:-1;16350:28:14;16343:35;;16208:911;16556:36;16600:23;-1:-1:-1;;;;;;;;;;;;;;16600:23:14;16631:17;16699:125;16723:10;16743:13;16801:15;16766:32;16783:15;16766:14;:32;:::i;:::-;:50;;;;:::i;:::-;16699:14;:125::i;:::-;16657:167;-1:-1:-1;16657:167:14;-1:-1:-1;16851:18:14;16840:7;:29;;;;;;;;:::i;:::-;;16832:79;;;;-1:-1:-1;;;16832:79:14;;19508:2:504;16832:79:14;;;19490:21:504;19547:2;19527:18;;;19520:30;19586:34;19566:18;;;19559:62;-1:-1:-1;;;19637:18:504;;;19630:35;19682:19;;16832:79:14;19306:401:504;16832:79:14;16946:50;16953:28;16983:12;16946:6;:50::i;:::-;16920:76;-1:-1:-1;16920:76:14;-1:-1:-1;17023:18:14;17012:7;:29;;;;;;;;:::i;:::-;;17004:71;;;;-1:-1:-1;;;17004:71:14;;19914:2:504;17004:71:14;;;19896:21:504;19953:2;19933:18;;;19926:30;19992:31;19972:18;;;19965:59;20041:18;;17004:71:14;19712:353:504;17004:71:14;-1:-1:-1;17091:21:14;;-1:-1:-1;17084:28:14;;-1:-1:-1;17084:28:14;16208:911;15926:1197;;;;;;;;;:::o;1280:213:16:-;1342:9;1353:7;1377:1;1372;:6;1368:121;;1396:18;1416:5;1420:1;1416;:5;:::i;:::-;1388:34;;;;;;1368:121;-1:-1:-1;1451:27:16;;-1:-1:-1;1480:1:16;1443:39;;4095:130:25;-1:-1:-1;;;;;;;;;;;;4182:38:25;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;:::-;4182:38;;4175:45;4095:130;-1:-1:-1;;;4095:130:25:o;1117:167::-;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;1416:220::-;1536:7;1551:18;1572:15;1577:1;1580:6;1572:4;:15::i;:::-;1551:36;;1600:31;1605:17;1614:7;1605:8;:17::i;:::-;1624:6;1600:4;:31::i;:::-;1593:38;1416:220;-1:-1:-1;;;;;1416:220:25:o;8016:262:23:-;8120:7;8140:49;8156:3;8148:12;;;;;;;;:::i;:::-;8170:4;8162:13;;;;;;;;:::i;:::-;8140:49;;;14365:25:504;;;14421:2;14406:18;;14399:34;;;;14449:18;;14442:34;;;14353:2;14338:18;8140:49:23;;;;;;;8210:27;8203:3;:34;;;;;;;;:::i;:::-;;:70;;8269:3;8261:12;;;;;;;;:::i;:::-;8203:70;;;8240:18;8247:11;8240:4;:18;:::i;1567:263:16:-;1629:9;;1692:5;;;1714:6;;;1710:116;;1738:18;;-1:-1:-1;1758:1:16;-1:-1:-1;1730:30:16;;1710:116;1789:26;1817:1;1781:38;;;;;;;1947:332:24;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:24;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:24;-1:-1:-1;2136:18:24;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:24;;;;;;;;;-1:-1:-1;2178:20:24;;2172:4;;-1:-1:-1;2178:20:24;-1:-1:-1;2164:35:24;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:24;;-1:-1:-1;1947:332:24;-1:-1:-1;;;;1947:332:24:o;814:203:25:-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1888:270:16:-;1984:9;1995:7;2011:14;2027:11;2042:13;2050:1;2053;2042:7;:13::i;:::-;2010:45;;-1:-1:-1;2010:45:16;-1:-1:-1;2074:18:16;2066:4;:26;;;;;;;;:::i;:::-;;2062:63;;-1:-1:-1;2110:4:16;-1:-1:-1;2116:1:16;;-1:-1:-1;2102:16:16;;2062:63;2138:15;2146:3;2151:1;2138:7;:15::i;:::-;2131:22;;;;;;1888:270;;;;;;;:::o;799:479:24:-;866:9;877:10;-1:-1:-1;;;;;;;;;;;;;;877:10:24;896:14;912:23;939:22;947:3;450:4:25;939:7:24;:22::i;:::-;895:66;;-1:-1:-1;895:66:24;-1:-1:-1;979:18:24;971:4;:26;;;;;;;;:::i;:::-;;967:82;;-1:-1:-1;1021:20:24;;;;;;;;;-1:-1:-1;1021:20:24;;1015:4;;-1:-1:-1;1021:20:24;-1:-1:-1;1007:35:24;;967:82;1056:14;1072:16;1092:31;1100:15;1117:5;1092:7;:31::i;:::-;1055:68;;-1:-1:-1;1055:68:24;-1:-1:-1;1141:18:24;1133:4;:26;;;;;;;;:::i;:::-;;1129:82;;1177:4;1183:20;;;;;;;;1199:1;1183:20;;;1169:35;;;;;;;;;;1129:82;1245:27;;;;;;;;;;;;-1:-1:-1;;1245:27:24;;-1:-1:-1;799:479:24;-1:-1:-1;;;;;;799:479:24:o;4796:123:25:-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;3021:117::-;3080:7;3102:31;3107:1;3110;3102:31;;;;;;;;;;;;;-1:-1:-1;;;3102:31:25;;;:4;:31::i;4923:243::-;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:25;;5045:16;5041:45;;;-1:-1:-1;5078:1:25;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:25;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:25;;;;;;;;:::i;:::-;-1:-1:-1;5160:1:25;4923:243;-1:-1:-1;;;;4923:243:25:o;3142:189::-;3245:7;;3272:5;3276:1;3272;:5;:::i;:::-;3260:17;-1:-1:-1;3299:12:25;3291:6;;;;3283:29;;;;-1:-1:-1;;;3283:29:25;;;;;;;;:::i;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;14:258:504;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;262:1;253:6;248:3;244:16;237:27;218:48;;14:258;;;:::o;277:::-;319:3;357:5;351:12;384:6;379:3;372:19;400:63;456:6;449:4;444:3;440:14;433:4;426:5;422:16;400:63;:::i;:::-;517:2;496:15;-1:-1:-1;;492:29:504;483:39;;;;524:4;479:50;;277:258;-1:-1:-1;;277:258:504:o;540:220::-;689:2;678:9;671:21;652:4;709:45;750:2;739:9;735:18;727:6;709:45;:::i;765:131::-;-1:-1:-1;;;;;840:31:504;;830:42;;820:70;;886:1;883;876:12;901:315;969:6;977;1030:2;1018:9;1009:7;1005:23;1001:32;998:52;;;1046:1;1043;1036:12;998:52;1085:9;1072:23;1104:31;1129:5;1104:31;:::i;:::-;1154:5;1206:2;1191:18;;;;1178:32;;-1:-1:-1;;;901:315:504:o;1595:247::-;1654:6;1707:2;1695:9;1686:7;1682:23;1678:32;1675:52;;;1723:1;1720;1713:12;1675:52;1762:9;1749:23;1781:31;1806:5;1781:31;:::i;1847:456::-;1924:6;1932;1940;1993:2;1981:9;1972:7;1968:23;1964:32;1961:52;;;2009:1;2006;1999:12;1961:52;2048:9;2035:23;2067:31;2092:5;2067:31;:::i;:::-;2117:5;-1:-1:-1;2174:2:504;2159:18;;2146:32;2187:33;2146:32;2187:33;:::i;:::-;1847:456;;2239:7;;-1:-1:-1;;;2293:2:504;2278:18;;;;2265:32;;1847:456::o;2497:348::-;2549:8;2559:6;2613:3;2606:4;2598:6;2594:17;2590:27;2580:55;;2631:1;2628;2621:12;2580:55;-1:-1:-1;2654:20:504;;2697:18;2686:30;;2683:50;;;2729:1;2726;2719:12;2683:50;2766:4;2758:6;2754:17;2742:29;;2818:3;2811:4;2802:6;2794;2790:19;2786:30;2783:39;2780:59;;;2835:1;2832;2825:12;2850:721;2942:6;2950;2958;2966;3019:2;3007:9;2998:7;2994:23;2990:32;2987:52;;;3035:1;3032;3025:12;2987:52;3075:9;3062:23;3104:18;3145:2;3137:6;3134:14;3131:34;;;3161:1;3158;3151:12;3131:34;3200:59;3251:7;3242:6;3231:9;3227:22;3200:59;:::i;:::-;3278:8;;-1:-1:-1;3174:85:504;-1:-1:-1;3366:2:504;3351:18;;3338:32;;-1:-1:-1;3382:16:504;;;3379:36;;;3411:1;3408;3401:12;3379:36;;3450:61;3503:7;3492:8;3481:9;3477:24;3450:61;:::i;:::-;2850:721;;;;-1:-1:-1;3530:8:504;-1:-1:-1;;;;2850:721:504:o;3576:180::-;3635:6;3688:2;3676:9;3667:7;3663:23;3659:32;3656:52;;;3704:1;3701;3694:12;3656:52;-1:-1:-1;3727:23:504;;3576:180;-1:-1:-1;3576:180:504:o;3761:478::-;3840:6;3848;3856;3909:2;3897:9;3888:7;3884:23;3880:32;3877:52;;;3925:1;3922;3915:12;3877:52;3961:9;3948:23;3938:33;;4022:2;4011:9;4007:18;3994:32;4049:18;4041:6;4038:30;4035:50;;;4081:1;4078;4071:12;4035:50;4120:59;4171:7;4162:6;4151:9;4147:22;4120:59;:::i;:::-;3761:478;;4198:8;;-1:-1:-1;4094:85:504;;-1:-1:-1;;;;3761:478:504:o;4686:657::-;4855:2;4907:21;;;4977:13;;4880:18;;;4999:22;;;4826:4;;4855:2;5078:15;;;;5052:2;5037:18;;;4826:4;5121:196;5135:6;5132:1;5129:13;5121:196;;;5200:13;;-1:-1:-1;;;;;;5196:40:504;5184:53;;5292:15;;;;5257:12;;;;5157:1;5150:9;5121:196;;;-1:-1:-1;5334:3:504;;4686:657;-1:-1:-1;;;;;;4686:657:504:o;5348:626::-;5445:6;5453;5506:2;5494:9;5485:7;5481:23;5477:32;5474:52;;;5522:1;5519;5512:12;5474:52;5562:9;5549:23;5591:18;5632:2;5624:6;5621:14;5618:34;;;5648:1;5645;5638:12;5618:34;5686:6;5675:9;5671:22;5661:32;;5731:7;5724:4;5720:2;5716:13;5712:27;5702:55;;5753:1;5750;5743:12;5702:55;5793:2;5780:16;5819:2;5811:6;5808:14;5805:34;;;5835:1;5832;5825:12;5805:34;5888:7;5883:2;5873:6;5870:1;5866:14;5862:2;5858:23;5854:32;5851:45;5848:65;;;5909:1;5906;5899:12;5848:65;5940:2;5932:11;;;;;5962:6;;-1:-1:-1;5348:626:504;;-1:-1:-1;;;;5348:626:504:o;5979:801::-;6139:4;6168:2;6208;6197:9;6193:18;6238:2;6227:9;6220:21;6261:6;6296;6290:13;6327:6;6319;6312:22;6365:2;6354:9;6350:18;6343:25;;6427:2;6417:6;6414:1;6410:14;6399:9;6395:30;6391:39;6377:53;;6465:2;6457:6;6453:15;6486:1;6496:255;6510:6;6507:1;6504:13;6496:255;;;6603:2;6599:7;6587:9;6579:6;6575:22;6571:36;6566:3;6559:49;6631:40;6664:6;6655;6649:13;6631:40;:::i;:::-;6621:50;-1:-1:-1;6729:12:504;;;;6694:15;;;;6532:1;6525:9;6496:255;;;-1:-1:-1;6768:6:504;;5979:801;-1:-1:-1;;;;;;;5979:801:504:o;7405:388::-;7473:6;7481;7534:2;7522:9;7513:7;7509:23;7505:32;7502:52;;;7550:1;7547;7540:12;7502:52;7589:9;7576:23;7608:31;7633:5;7608:31;:::i;:::-;7658:5;-1:-1:-1;7715:2:504;7700:18;;7687:32;7728:33;7687:32;7728:33;:::i;:::-;7780:7;7770:17;;;7405:388;;;;;:::o;8312:380::-;8391:1;8387:12;;;;8434;;;8455:61;;8509:4;8501:6;8497:17;8487:27;;8455:61;8562:2;8554:6;8551:14;8531:18;8528:38;8525:161;;;8608:10;8603:3;8599:20;8596:1;8589:31;8643:4;8640:1;8633:15;8671:4;8668:1;8661:15;8697:481;-1:-1:-1;;;;;8982:15:504;;;8964:34;;9034:15;;;9029:2;9014:18;;9007:43;9086:15;;9081:2;9066:18;;9059:43;-1:-1:-1;;;;;;9138:33:504;;;9133:2;9118:18;;9111:61;8913:3;8898:19;;8697:481::o;9183:277::-;9250:6;9303:2;9291:9;9282:7;9278:23;9274:32;9271:52;;;9319:1;9316;9309:12;9271:52;9351:9;9345:16;9404:5;9397:13;9390:21;9383:5;9380:32;9370:60;;9426:1;9423;9416:12;9465:338;9667:2;9649:21;;;9706:2;9686:18;;;9679:30;-1:-1:-1;;;9740:2:504;9725:18;;9718:44;9794:2;9779:18;;9465:338::o;9808:184::-;9878:6;9931:2;9919:9;9910:7;9906:23;9902:32;9899:52;;;9947:1;9944;9937:12;9899:52;-1:-1:-1;9970:16:504;;9808:184;-1:-1:-1;9808:184:504:o;9997:127::-;10058:10;10053:3;10049:20;10046:1;10039:31;10089:4;10086:1;10079:15;10113:4;10110:1;10103:15;11532:127;11593:10;11588:3;11584:20;11581:1;11574:31;11624:4;11621:1;11614:15;11648:4;11645:1;11638:15;11664:125;11704:4;11732:1;11729;11726:8;11723:34;;;11737:18;;:::i;:::-;-1:-1:-1;11774:9:504;;11664:125::o;11794:128::-;11834:3;11865:1;11861:6;11858:1;11855:13;11852:39;;;11871:18;;:::i;:::-;-1:-1:-1;11907:9:504;;11794:128::o;12542:559::-;-1:-1:-1;;;;;12755:32:504;;12737:51;;12819:2;12804:18;;12797:34;;;12867:2;12862;12847:18;;12840:30;;;12886:18;;12879:34;;;12906:6;12956;12950:3;12935:19;;12922:49;13021:1;12991:22;;;13015:3;12987:32;;;12980:43;;;;13084:2;13063:15;;;-1:-1:-1;;13059:29:504;13044:45;13040:55;;12542:559;-1:-1:-1;;;12542:559:504:o;13106:127::-;13167:10;13162:3;13158:20;13155:1;13148:31;13198:4;13195:1;13188:15;13222:4;13219:1;13212:15;13238:178;13275:3;13319:4;13312:5;13308:16;13343:7;13333:41;;13354:18;;:::i;:::-;-1:-1:-1;;13390:20:504;;13238:178;-1:-1:-1;;13238:178:504:o;13421:127::-;13482:10;13477:3;13473:20;13470:1;13463:31;13513:4;13510:1;13503:15;13537:4;13534:1;13527:15;15865:217;15905:1;15931;15921:132;;15975:10;15970:3;15966:20;15963:1;15956:31;16010:4;16007:1;16000:15;16038:4;16035:1;16028:15;15921:132;-1:-1:-1;16067:9:504;;15865:217::o;16887:251::-;16957:6;17010:2;16998:9;16989:7;16985:23;16981:32;16978:52;;;17026:1;17023;17016:12;16978:52;17058:9;17052:16;17077:31;17102:5;17077:31;:::i;17475:521::-;17552:4;17558:6;17618:11;17605:25;17712:2;17708:7;17697:8;17681:14;17677:29;17673:43;17653:18;17649:68;17639:96;;17731:1;17728;17721:12;17639:96;17758:33;;17810:20;;;-1:-1:-1;17853:18:504;17842:30;;17839:50;;;17885:1;17882;17875:12;17839:50;17918:4;17906:17;;-1:-1:-1;17949:14:504;17945:27;;;17935:38;;17932:58;;;17986:1;17983;17976:12;18001:271;18184:6;18176;18171:3;18158:33;18140:3;18210:16;;18235:13;;;18210:16;18001:271;-1:-1:-1;18001:271:504:o;18277:884::-;18357:6;18410:2;18398:9;18389:7;18385:23;18381:32;18378:52;;;18426:1;18423;18416:12;18378:52;18459:9;18453:16;18488:18;18529:2;18521:6;18518:14;18515:34;;;18545:1;18542;18535:12;18515:34;18583:6;18572:9;18568:22;18558:32;;18628:7;18621:4;18617:2;18613:13;18609:27;18599:55;;18650:1;18647;18640:12;18599:55;18679:2;18673:9;18701:2;18697;18694:10;18691:36;;;18707:18;;:::i;:::-;18782:2;18776:9;18750:2;18836:13;;-1:-1:-1;;18832:22:504;;;18856:2;18828:31;18824:40;18812:53;;;18880:18;;;18900:22;;;18877:46;18874:72;;;18926:18;;:::i;:::-;18966:10;18962:2;18955:22;19001:2;18993:6;18986:18;19041:7;19036:2;19031;19027;19023:11;19019:20;19016:33;19013:53;;;19062:1;19059;19052:12;19013:53;19075:55;19127:2;19122;19114:6;19110:15;19105:2;19101;19097:11;19075:55;:::i;19166:135::-;19205:3;-1:-1:-1;;19226:17:504;;19223:43;;;19246:18;;:::i;:::-;-1:-1:-1;19293:1:504;19282:13;;19166:135::o;20070:168::-;20110:7;20176:1;20172;20168:6;20164:14;20161:1;20158:21;20153:1;20146:9;20139:17;20135:45;20132:71;;;20183:18;;:::i;:::-;-1:-1:-1;20223:9:504;;20070:168::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_getExtensionFunctions()": "89f8132e", + "_setAdminFee(uint256)": "91dd36c6", + "_setInterestRateModel(address)": "f2b3abbd", + "_setNameAndSymbol(string,string)": "34154d4c", + "_setReserveFactor(uint256)": "fca7820b", + "accrualBlockNumber()": "6c540baf", + "accrueInterest()": "a6afed95", + "adminFeeMantissa()": "8d02d9a1", + "allowance(address,address)": "dd62ed3e", + "approve(address,uint256)": "095ea7b3", + "balanceOf(address)": "70a08231", + "balanceOfUnderlying(address)": "3af9e669", + "borrowBalanceCurrent(address)": "17bfdfbc", + "borrowIndex()": "aa5af0fd", + "borrowRatePerBlock()": "f8f9da28", + "borrowRatePerBlockAfterBorrow(uint256)": "cfcd4c07", + "comptroller()": "5fe3b567", + "decimals()": "313ce567", + "exchangeRateCurrent()": "bd6d894d", + "feeSeizeShareMantissa()": "be99f119", + "flash(uint256,bytes)": "3c3b4b89", + "getAccountSnapshot(address)": "c37f68e2", + "getTotalUnderlyingSupplied()": "4aeb3d9a", + "interestRateModel()": "f3fdb15a", + "ionicAdmin()": "c91a424f", + "ionicFeeMantissa()": "c3bf11cd", + "multicall(bytes[])": "ac9650d8", + "name()": "06fdde03", + "protocolSeizeShareMantissa()": "6752e702", + "registerInSFS()": "7f15e216", + "reserveFactorMantissa()": "173b9904", + "supplyRatePerBlock()": "ae9d70b0", + "supplyRatePerBlockAfterDeposit(uint256)": "b1e23dbb", + "supplyRatePerBlockAfterWithdraw(uint256)": "35daea64", + "symbol()": "95d89b41", + "totalAdminFees()": "61feacff", + "totalBorrows()": "47bd3718", + "totalBorrowsCurrent()": "73acee98", + "totalIonicFees()": "9826394b", + "totalReserves()": "8f840ddd", + "totalSupply()": "18160ddd", + "transfer(address,uint256)": "a9059cbb", + "transferFrom(address,address,uint256)": "23b872dd", + "underlying()": "6f307dc3" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/ChainlinkPriceOracleV2.json b/packages/sdk/deployments/bob/ChainlinkPriceOracleV2.json new file mode 100644 index 000000000..0d8544ea7 --- /dev/null +++ b/packages/sdk/deployments/bob/ChainlinkPriceOracleV2.json @@ -0,0 +1,562 @@ +{ + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "NATIVE_TOKEN_USD_PRICE_FEED", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "USD_TOKEN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "feedBaseCurrencies", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum ChainlinkPriceOracleV2.FeedBaseCurrency" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_usdToken", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenUsd", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "priceFeeds", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract AggregatorV3Interface" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPriceFeeds", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "feeds", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "baseCurrency", + "type": "uint8", + "internalType": "enum ChainlinkPriceOracleV2.FeedBaseCurrency" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "transactionIndex": 2, + "gasUsed": "817599", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000002000001000000000000000100000000100000000000020000000000000000000800000010800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000004400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000008000000000000000000000", + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978", + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000515b45c30da768482d3ec8a9e1e73edf14047a2d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + }, + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + }, + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + }, + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 4, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + }, + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 5, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + } + ], + "blockNumber": 3781593, + "cumulativeGasUsed": "907993", + "status": 1, + "byzantium": true + }, + "args": [ + "0x515B45c30dA768482d3ec8A9E1E73eDf14047a2d", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0x485cc955000000000000000000000000e75d0fb2c24a55ca1e3f96781a2bcc7bdba058f000000000000000000000000097cb85eb5f892dd02866672eab137b3c34501b7b" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0xe75D0fB2C24A55cA1e3F96781a2bCC7bdba058F0", + "0x97CB85Eb5F892Dd02866672EAB137b3C34501b7b" + ] + }, + "implementation": "0x515B45c30dA768482d3ec8A9E1E73eDf14047a2d", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/ChainlinkPriceOracleV2_Implementation.json b/packages/sdk/deployments/bob/ChainlinkPriceOracleV2_Implementation.json new file mode 100644 index 000000000..1f51bf295 --- /dev/null +++ b/packages/sdk/deployments/bob/ChainlinkPriceOracleV2_Implementation.json @@ -0,0 +1,958 @@ +{ + "address": "0x515B45c30dA768482d3ec8A9E1E73eDf14047a2d", + "abi": [ + { + "type": "function", + "name": "NATIVE_TOKEN_USD_PRICE_FEED", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "USD_TOKEN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "feedBaseCurrencies", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint8", + "internalType": "enum ChainlinkPriceOracleV2.FeedBaseCurrency" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_usdToken", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenUsd", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "priceFeeds", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract AggregatorV3Interface" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPriceFeeds", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "feeds", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "baseCurrency", + "type": "uint8", + "internalType": "enum ChainlinkPriceOracleV2.FeedBaseCurrency" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x2e9bccf4e2ff79ee1c642f584ff9a231435b3980c866af87da59211e6ca116e9", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x515B45c30dA768482d3ec8A9E1E73eDf14047a2d", + "transactionIndex": 1, + "gasUsed": "1113555", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x14207b4ef46e0f8c0b604613e86690c8d1bb30e771d55f82674c7fef04630c92", + "transactionHash": "0x2e9bccf4e2ff79ee1c642f584ff9a231435b3980c866af87da59211e6ca116e9", + "logs": [], + "blockNumber": 3781589, + "cumulativeGasUsed": "1157394", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "NATIVE_TOKEN_USD_PRICE_FEED", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "USD_TOKEN", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "feedBaseCurrencies", + "outputs": [ + { + "internalType": "enum ChainlinkPriceOracleV2.FeedBaseCurrency", + "name": "", + "type": "uint8" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_usdToken", + "type": "address" + }, + { + "internalType": "address", + "name": "nativeTokenUsd", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "priceFeeds", + "outputs": [ + { + "internalType": "contract AggregatorV3Interface", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "feeds", + "type": "address[]" + }, + { + "internalType": "enum ChainlinkPriceOracleV2.FeedBaseCurrency", + "name": "baseCurrency", + "type": "uint8" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPriceFeeds" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "getUnderlyingPrice(address)": { + "details": "Implements the `PriceOracle` interface for Ionic pools (and Compound v2).", + "returns": { + "_0": "Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`." + } + }, + "initialize(address,address)": { + "details": "Constructor to set admin and canAdminOverwrite, wtoken address and native token USD price feed address", + "params": { + "_usdToken": "The Wrapped native asset address", + "nativeTokenUsd": "Will this oracle return prices denominated in USD or in the native token." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "price(address)": { + "details": "If the oracle got constructed with `nativeTokenUsd` = TRUE this will return a price denominated in USD otherwise in the native token" + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setPriceFeeds(address[],address[],uint8)": { + "details": "Admin-only function to set price feeds.", + "params": { + "baseCurrency": "The currency in which `feeds` are based.", + "feeds": "The Chainlink price feed contract addresses for each of `underlyings`.", + "underlyings": "Underlying token addresses for which to set price feeds." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "NATIVE_TOKEN_USD_PRICE_FEED()": { + "notice": "Chainlink NATIVE/USD price feed contracts." + }, + "USD_TOKEN()": { + "notice": "The USD Token of the chain" + }, + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "feedBaseCurrencies(address)": { + "notice": "Maps ERC20 token addresses to enums indicating the base currency of the feed." + }, + "getUnderlyingPrice(address)": { + "notice": "Returns the price in ETH of the token underlying `cToken`." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + }, + "price(address)": { + "notice": "Returns the price in of `underlying` either in USD or the native token (implements `BasePriceOracle`)." + }, + "priceFeeds(address)": { + "notice": "Maps ERC20 token addresses to ETH-based Chainlink price feed contracts." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/default/ChainlinkPriceOracleV2.sol": "ChainlinkPriceOracleV2" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/chainlink/AggregatorV3Interface.sol": { + "keccak256": "0xafe004bd85ba51057a005e1c809250e411ab19968e91e88c20ce0ebcb9bc017d", + "urls": [ + "bzz-raw://636f7626328f587642bc0a19bac4367aa5528e30ee6c9919ac9cbbfe0b7528aa", + "dweb:/ipfs/QmXp8yR7FSr8dp6uukTHN21oreTfbCWBhNvW11uGgq2mkE" + ], + "license": "MIT" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/ChainlinkPriceOracleV2.sol": { + "keccak256": "0xa28d65e536325bf116adf43a9c15d080ef3ce3bf6a57e352051ea620a8dd8965", + "urls": [ + "bzz-raw://55dedfff7ade2b571d62d0ab4c9a4a502f4b05b329beaaaa6f4be27a9bb9277b", + "dweb:/ipfs/QmWuN3jbGwjnm1TBJwXpf8TYiobSJ1p11yCkVLYbzzyYqm" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5061132e806100206000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639dcb511a1161008c578063e30c397811610066578063e30c397814610200578063f2fde38b14610213578063fc4d33f914610226578063fc57d4df1461022e57600080fd5b80639dcb511a14610186578063aea91078146101af578063cebae71d146101d057600080fd5b8063715018a6116100c8578063715018a61461014757806371f3245a1461014f5780638da5cb5b146101625780639d23c8121461017357600080fd5b80633a750685146100ef578063485cc9551461011f5780636e96dfd714610134575b600080fd5b606854610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61013261012d366004610ec0565b610241565b005b610132610142366004610ef9565b61038a565b6101326103f4565b61013261015d366004610fca565b610437565b6033546001600160a01b0316610102565b606954610102906001600160a01b031681565b610102610194366004610ef9565b6066602052600090815260409020546001600160a01b031681565b6101c26101bd366004610ef9565b61057c565b604051908152602001610116565b6101f36101de366004610ef9565b60676020526000908152604090205460ff1681565b604051610116919061105c565b606554610102906001600160a01b031681565b610132610221366004610ef9565b61058d565b6101326105fe565b6101c261023c366004610ef9565b610712565b600054610100900460ff16158080156102615750600054600160ff909116105b8061027b5750303b15801561027b575060005460ff166001145b6102e35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610306576000805461ff0019166101001790555b61030f33610846565b606980546001600160a01b038086166001600160a01b03199283161790925560688054928516929091169190911790558015610385576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610392610881565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6103fc610881565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016102da565b61043f610881565b60008351118015610451575081518351145b6104c35760405162461bcd60e51b815260206004820152603860248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201527f7175616c20616e642067726561746572207468616e20302e000000000000000060648201526084016102da565b60005b83518110156105765760008482815181106104e3576104e3611084565b602002602001015190508382815181106104ff576104ff611084565b6020908102919091018101516001600160a01b03838116600090815260668452604080822080546001600160a01b0319169390941692909217909255606790925220805484919060ff19166001838181111561055d5761055d611046565b021790555050808061056e906110b0565b9150506104c6565b50505050565b6000610587826108dd565b92915050565b610595610881565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146106505760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016102da565b60006106646033546001600160a01b031690565b6065549091506001600160a01b031661067c81610def565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91016103e8565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610753573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077791906110cb565b90506000610784826108dd565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906110e8565b60ff169050601281111561081d5761080360128261110b565b61080e90600a611206565b6108189083611212565b61083d565b61082881601261110b565b61083390600a611206565b61083d9083611234565b95945050505050565b600054610100900460ff1661086d5760405162461bcd60e51b81526004016102da90611253565b610875610e41565b61087e81610def565b50565b6033546001600160a01b031633146108db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102da565b565b6001600160a01b038082166000908152606660205260408120549091168061096d5760405162461bcd60e51b815260206004820152603e60248201527f4e6f20436861696e6c696e6b207072696365206665656420666f756e6420666f60448201527f72207468697320756e6465726c79696e6720455243323020746f6b656e2e000060648201526084016102da565b6001600160a01b03831660009081526067602052604081205460ff169081600181111561099c5761099c611046565b1415610aa8576000826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0691906112b8565b5050509150506000811215610a1c57600061083d565b826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7e91906110e8565b610a8c9060ff16600a611206565b610a9e82670de0b6b3a7640000611234565b61083d9190611212565b6001816001811115610abc57610abc611046565b1415610daf5760685460009081906001600160a01b0316610b6d576069546040516315d5220f60e31b81526001600160a01b039091166004820152600090339063aea9107890602401602060405180830381865afa158015610b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b469190611308565b9050610b61816ec097ce7bc90715b34b9f1000000000611212565b92506012915050610c7b565b606860009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610bc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be491906112b8565b5091945050600084139150610c0190505750600095945050505050565b606860009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7891906110e8565b90505b6000846001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf91906112b8565b5050509150506000811215610cf5576000610da4565b82856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5891906110e8565b610d669060ff16600a611206565b610d7460ff8516600a611206565b610d8684670de0b6b3a7640000611234565b610d909190611234565b610d9a9190611212565b610da49190611212565b979650505050505050565b60405162461bcd60e51b8152602060048201526015602482015274756e6b6e6f776e20626173652063757272656e637960581b60448201526064016102da565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610e685760405162461bcd60e51b81526004016102da90611253565b6108db600054610100900460ff16610e925760405162461bcd60e51b81526004016102da90611253565b6108db33610def565b6001600160a01b038116811461087e57600080fd5b8035610ebb81610e9b565b919050565b60008060408385031215610ed357600080fd5b8235610ede81610e9b565b91506020830135610eee81610e9b565b809150509250929050565b600060208284031215610f0b57600080fd5b8135610f1681610e9b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610f4457600080fd5b8135602067ffffffffffffffff80831115610f6157610f61610f1d565b8260051b604051601f19603f83011681018181108482111715610f8657610f86610f1d565b604052938452858101830193838101925087851115610fa457600080fd5b83870191505b84821015610da457610fbb82610eb0565b83529183019190830190610faa565b600080600060608486031215610fdf57600080fd5b833567ffffffffffffffff80821115610ff757600080fd5b61100387838801610f33565b9450602086013591508082111561101957600080fd5b5061102686828701610f33565b92505060408401356002811061103b57600080fd5b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b602081016002831061107e57634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156110c4576110c461109a565b5060010190565b6000602082840312156110dd57600080fd5b8151610f1681610e9b565b6000602082840312156110fa57600080fd5b815160ff81168114610f1657600080fd5b60008282101561111d5761111d61109a565b500390565b600181815b8085111561115d5781600019048211156111435761114361109a565b8085161561115057918102915b93841c9390800290611127565b509250929050565b60008261117457506001610587565b8161118157506000610587565b816001811461119757600281146111a1576111bd565b6001915050610587565b60ff8411156111b2576111b261109a565b50506001821b610587565b5060208310610133831016604e8410600b84101617156111e0575081810a610587565b6111ea8383611122565b80600019048211156111fe576111fe61109a565b029392505050565b6000610f168383611165565b60008261122f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561124e5761124e61109a565b500290565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b805169ffffffffffffffffffff81168114610ebb57600080fd5b600080600080600060a086880312156112d057600080fd5b6112d98661129e565b94506020860151935060408601519250606086015191506112fc6080870161129e565b90509295509295909350565b60006020828403121561131a57600080fd5b505191905056fea164736f6c634300080a000a", + "sourceMap": "524:5120:254:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80639dcb511a1161008c578063e30c397811610066578063e30c397814610200578063f2fde38b14610213578063fc4d33f914610226578063fc57d4df1461022e57600080fd5b80639dcb511a14610186578063aea91078146101af578063cebae71d146101d057600080fd5b8063715018a6116100c8578063715018a61461014757806371f3245a1461014f5780638da5cb5b146101625780639d23c8121461017357600080fd5b80633a750685146100ef578063485cc9551461011f5780636e96dfd714610134575b600080fd5b606854610102906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61013261012d366004610ec0565b610241565b005b610132610142366004610ef9565b61038a565b6101326103f4565b61013261015d366004610fca565b610437565b6033546001600160a01b0316610102565b606954610102906001600160a01b031681565b610102610194366004610ef9565b6066602052600090815260409020546001600160a01b031681565b6101c26101bd366004610ef9565b61057c565b604051908152602001610116565b6101f36101de366004610ef9565b60676020526000908152604090205460ff1681565b604051610116919061105c565b606554610102906001600160a01b031681565b610132610221366004610ef9565b61058d565b6101326105fe565b6101c261023c366004610ef9565b610712565b600054610100900460ff16158080156102615750600054600160ff909116105b8061027b5750303b15801561027b575060005460ff166001145b6102e35760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015610306576000805461ff0019166101001790555b61030f33610846565b606980546001600160a01b038086166001600160a01b03199283161790925560688054928516929091169190911790558015610385576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b505050565b610392610881565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6103fc610881565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016102da565b61043f610881565b60008351118015610451575081518351145b6104c35760405162461bcd60e51b815260206004820152603860248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201527f7175616c20616e642067726561746572207468616e20302e000000000000000060648201526084016102da565b60005b83518110156105765760008482815181106104e3576104e3611084565b602002602001015190508382815181106104ff576104ff611084565b6020908102919091018101516001600160a01b03838116600090815260668452604080822080546001600160a01b0319169390941692909217909255606790925220805484919060ff19166001838181111561055d5761055d611046565b021790555050808061056e906110b0565b9150506104c6565b50505050565b6000610587826108dd565b92915050565b610595610881565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146106505760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016102da565b60006106646033546001600160a01b031690565b6065549091506001600160a01b031661067c81610def565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91016103e8565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610753573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061077791906110cb565b90506000610784826108dd565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107ea91906110e8565b60ff169050601281111561081d5761080360128261110b565b61080e90600a611206565b6108189083611212565b61083d565b61082881601261110b565b61083390600a611206565b61083d9083611234565b95945050505050565b600054610100900460ff1661086d5760405162461bcd60e51b81526004016102da90611253565b610875610e41565b61087e81610def565b50565b6033546001600160a01b031633146108db5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102da565b565b6001600160a01b038082166000908152606660205260408120549091168061096d5760405162461bcd60e51b815260206004820152603e60248201527f4e6f20436861696e6c696e6b207072696365206665656420666f756e6420666f60448201527f72207468697320756e6465726c79696e6720455243323020746f6b656e2e000060648201526084016102da565b6001600160a01b03831660009081526067602052604081205460ff169081600181111561099c5761099c611046565b1415610aa8576000826001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa1580156109e2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a0691906112b8565b5050509150506000811215610a1c57600061083d565b826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610a5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a7e91906110e8565b610a8c9060ff16600a611206565b610a9e82670de0b6b3a7640000611234565b61083d9190611212565b6001816001811115610abc57610abc611046565b1415610daf5760685460009081906001600160a01b0316610b6d576069546040516315d5220f60e31b81526001600160a01b039091166004820152600090339063aea9107890602401602060405180830381865afa158015610b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b469190611308565b9050610b61816ec097ce7bc90715b34b9f1000000000611212565b92506012915050610c7b565b606860009054906101000a90046001600160a01b03166001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610bc0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610be491906112b8565b5091945050600084139150610c0190505750600095945050505050565b606860009054906101000a90046001600160a01b03166001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c7891906110e8565b90505b6000846001600160a01b031663feaf968c6040518163ffffffff1660e01b815260040160a060405180830381865afa158015610cbb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cdf91906112b8565b5050509150506000811215610cf5576000610da4565b82856001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d34573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5891906110e8565b610d669060ff16600a611206565b610d7460ff8516600a611206565b610d8684670de0b6b3a7640000611234565b610d909190611234565b610d9a9190611212565b610da49190611212565b979650505050505050565b60405162461bcd60e51b8152602060048201526015602482015274756e6b6e6f776e20626173652063757272656e637960581b60448201526064016102da565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610e685760405162461bcd60e51b81526004016102da90611253565b6108db600054610100900460ff16610e925760405162461bcd60e51b81526004016102da90611253565b6108db33610def565b6001600160a01b038116811461087e57600080fd5b8035610ebb81610e9b565b919050565b60008060408385031215610ed357600080fd5b8235610ede81610e9b565b91506020830135610eee81610e9b565b809150509250929050565b600060208284031215610f0b57600080fd5b8135610f1681610e9b565b9392505050565b634e487b7160e01b600052604160045260246000fd5b600082601f830112610f4457600080fd5b8135602067ffffffffffffffff80831115610f6157610f61610f1d565b8260051b604051601f19603f83011681018181108482111715610f8657610f86610f1d565b604052938452858101830193838101925087851115610fa457600080fd5b83870191505b84821015610da457610fbb82610eb0565b83529183019190830190610faa565b600080600060608486031215610fdf57600080fd5b833567ffffffffffffffff80821115610ff757600080fd5b61100387838801610f33565b9450602086013591508082111561101957600080fd5b5061102686828701610f33565b92505060408401356002811061103b57600080fd5b809150509250925092565b634e487b7160e01b600052602160045260246000fd5b602081016002831061107e57634e487b7160e01b600052602160045260246000fd5b91905290565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156110c4576110c461109a565b5060010190565b6000602082840312156110dd57600080fd5b8151610f1681610e9b565b6000602082840312156110fa57600080fd5b815160ff81168114610f1657600080fd5b60008282101561111d5761111d61109a565b500390565b600181815b8085111561115d5781600019048211156111435761114361109a565b8085161561115057918102915b93841c9390800290611127565b509250929050565b60008261117457506001610587565b8161118157506000610587565b816001811461119757600281146111a1576111bd565b6001915050610587565b60ff8411156111b2576111b261109a565b50506001821b610587565b5060208310610133831016604e8410600b84101617156111e0575081810a610587565b6111ea8383611122565b80600019048211156111fe576111fe61109a565b029392505050565b6000610f168383611165565b60008261122f57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561124e5761124e61109a565b500290565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b805169ffffffffffffffffffff81168114610ebb57600080fd5b600080600080600060a086880312156112d057600080fd5b6112d98661129e565b94506020860151935060408601519250606086015191506112fc6080870161129e565b90509295509295909350565b60006020828403121561131a57600080fd5b505191905056fea164736f6c634300080a000a", + "sourceMap": "524:5120:254:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1212:42;;;;;-1:-1:-1;;;;;1212:42:254;;;;;;-1:-1:-1;;;;;178:32:504;;;160:51;;148:2;133:18;1212:42:254;;;;;;;;1621:200;;;;;;:::i;:::-;;:::i;:::-;;1602:386:140;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;2123:610:254:-;;;;;;:::i;:::-;;:::i;1441:85:454:-;1513:6;;-1:-1:-1;;;;;1513:6:454;1441:85;;1311:24:254;;;;;-1:-1:-1;;;;;1311:24:254;;;700:59;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;700:59:254;;;4777:112;;;;;;:::i;:::-;;:::i;:::-;;;3338:25:504;;;3326:2;3311:18;4777:112:254;3192:177:504;867:62:254;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;:::i;530:27:140:-;;;;;-1:-1:-1;;;;;530:27:140;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;5166:476:254:-;;;;;;:::i;:::-;;:::i;1621:200::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;4332:2:504;3314:201:457;;;4314:21:504;4371:2;4351:18;;;4344:30;4410:34;4390:18;;;4383:62;-1:-1:-1;;;4461:18:504;;;4454:44;4515:19;;3314:201:457;;;;;;;;;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;1709:30:254::1;1728:10;1709:18;:30::i;:::-;1745:9;:21:::0;;-1:-1:-1;;;;;1745:21:254;;::::1;-1:-1:-1::0;;;;;;1745:21:254;;::::1;;::::0;;;1772:27:::1;:44:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3636:99:457;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;4697:36:504;;3710:14:457;;4685:2:504;4670:18;3710:14:457;;;;;;;3636:99;3258:483;1621:200:254;;:::o;1602:386:140:-;1334:13:454;:11;:13::i;:::-;1758:12:140::1;::::0;;-1:-1:-1;;;;;1830:30:140;;::::1;-1:-1:-1::0;;;;;;1830:30:140;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;4956:34:504::0;;;5021:2;5006:18;;4999:43;;;;1934:49:140::1;::::0;4891:18:504;1934:49:140::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:454;:11;:13::i;:::-;2804:26:140::1;::::0;-1:-1:-1;;;2804:26:140;;5255:2:504;2804:26:140::1;::::0;::::1;5237:21:504::0;5294:2;5274:18;;;5267:30;-1:-1:-1;;;5313:18:504;;;5306:46;5369:18;;2804:26:140::1;5053:340:504::0;2123:610:254;1334:13:454;:11;:13::i;:::-;2332:1:254::1;2311:11;:18;:22;:60;;;;;2359:5;:12;2337:11;:18;:34;2311:60;2296:147;;;::::0;-1:-1:-1;;;2296:147:254;;5600:2:504;2296:147:254::1;::::0;::::1;5582:21:504::0;5639:2;5619:18;;;5612:30;5678:34;5658:18;;;5651:62;5749:26;5729:18;;;5722:54;5793:19;;2296:147:254::1;5398:420:504::0;2296:147:254::1;2482:9;2477:252;2501:11;:18;2497:1;:22;2477:252;;;2534:18;2555:11;2567:1;2555:14;;;;;;;;:::i;:::-;;;;;;;2534:35;;2660:5;2666:1;2660:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;2613:22:254;;::::1;;::::0;;;:10:::1;:22:::0;;;;;;:56;;-1:-1:-1;;;;;;2613:56:254::1;::::0;;;::::1;::::0;;;::::1;::::0;;;2677:18:::1;:30:::0;;;;:45;;2710:12;;2677:30;-1:-1:-1;;2677:45:254::1;-1:-1:-1::0;2710:12:254;2677:45;;::::1;;;;;;:::i;:::-;;;;;;2526:203;2521:3;;;;;:::i;:::-;;;;2477:252;;;;2123:610:::0;;;:::o;4777:112::-;4844:7;4866:18;4873:10;4866:6;:18::i;:::-;4859:25;4777:112;-1:-1:-1;;4777:112:254:o;2839:155:140:-;1334:13:454;:11;:13::i;:::-;2937:12:140::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:140;;::::1;4956:34:504::0;;5026:15;;;5021:2;5006:18;;4999:43;2921:39:140::1;::::0;4891:18:504;2921:39:140::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:140::1;-1:-1:-1::0;;;;;2966:23:140;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:140;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:140;;6429:2:504;2263:60:140;;;6411:21:504;6468:2;6448:18;;;6441:30;-1:-1:-1;;;6487:18:504;;;6480:51;6548:18;;2263:60:140;6227:345:504;2263:60:140;2378:16;2397:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2397:7:140;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:140;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:140;;;2605:32;;;-1:-1:-1;;;;;4974:15:504;;4956:34;;-1:-1:-1;5021:2:504;5006:18;;4999:43;2605:32:140;;4891:18:504;2605:32:140;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;4974:15:504;;;4956:34;;2681:12:140;;;5021:2:504;5006:18;;4999:43;2648:46:140;;4891:18:504;2648:46:140;4744:304:504;5166:476:254;5242:7;5293:18;5314:6;-1:-1:-1;;;;;5314:17:254;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5293:40;;5340:19;5362:18;5369:10;5362:6;:18::i;:::-;5340:40;;5387:26;5441:10;-1:-1:-1;;;;;5424:37:254;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5416:48;;5387:77;;5505:2;5483:18;:24;;:154;;5612:23;5633:2;5612:18;:23;:::i;:::-;5607:29;;:2;:29;:::i;:::-;5583:54;;5591:11;5583:54;:::i;:::-;5483:154;;;5547:23;5552:18;5547:2;:23;:::i;:::-;5542:29;;:2;:29;:::i;:::-;5518:54;;5526:11;5518:54;:::i;:::-;5470:167;5166:476;-1:-1:-1;;;;;5166:476:254:o;562:129:140:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;638:16:140::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;1599:130:454:-;1513:6;;-1:-1:-1;;;;;1513:6:454;929:10:467;1662:23:454;1654:68;;;;-1:-1:-1;;;1654:68:454;;9624:2:504;1654:68:454;;;9606:21:504;;;9643:18;;;9636:30;9702:34;9682:18;;;9675:62;9754:18;;1654:68:454;9422:356:504;1654:68:454;1599:130::o;2963:1539:254:-;-1:-1:-1;;;;;3108:22:254;;;3022:7;3108:22;;;:10;:22;;;;;;3022:7;;3108:22;3144:27;3136:102;;;;-1:-1:-1;;;3136:102:254;;9985:2:504;3136:102:254;;;9967:21:504;10024:2;10004:18;;;9997:30;10063:34;10043:18;;;10036:62;10134:32;10114:18;;;10107:60;10184:19;;3136:102:254;9783:426:504;3136:102:254;-1:-1:-1;;;;;3276:30:254;;3244:29;3276:30;;;:18;:30;;;;;;;;;3317:12;:36;;;;;;;;:::i;:::-;;3313:1185;;;3366:20;3396:4;-1:-1:-1;;;;;3396:20:254;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3363:55;;;;;;3450:1;3433:13;:18;;:89;;3521:1;3433:89;;;3501:4;-1:-1:-1;;;;;3501:13:254;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3489:28;;3493:24;;3489:2;:28;:::i;:::-;3455:29;3463:13;3480:4;3455:29;:::i;:::-;3454:64;;;;:::i;3313:1185::-;3555:20;3539:12;:36;;;;;;;;:::i;:::-;;3535:963;;;3654:27;;3585:26;;;;-1:-1:-1;;;;;3654:27:254;3650:515;;3771:9;;3737:44;;-1:-1:-1;;;3737:44:254;;-1:-1:-1;;;;;3771:9:254;;;3737:44;;;160:51:504;3707:27:254;;3753:10;;3737:33;;133:18:504;;3737:44:254;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3707:74;-1:-1:-1;3820:26:254;3707:74;3820:4;:26;:::i;:::-;3791:56;;3891:2;3872:21;;3697:205;3650:515;;;3972:27;;;;;;;;;-1:-1:-1;;;;;3972:27:254;-1:-1:-1;;;;;3950:66:254;;:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3918:100:254;;-1:-1:-1;;4055:1:254;4032:24;;;-1:-1:-1;4028:38:254;;-1:-1:-1;4028:38:254;-1:-1:-1;4065:1:254;;2963:1539;-1:-1:-1;;;;;2963:1539:254:o;4028:38::-;4117:27;;;;;;;;;-1:-1:-1;;;;;4117:27:254;-1:-1:-1;;;;;4095:59:254;;:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4076:80;;3650:515;4175:20;4205:4;-1:-1:-1;;;;;4205:20:254;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4172:55;;;;;;4268:1;4251:13;:18;;:188;;4438:1;4251:188;;;4405:19;4364:4;-1:-1:-1;;;;;4364:13:254;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4352:28;;4356:24;;4352:2;:28;:::i;:::-;4317:29;4321:25;;;4317:2;:29;:::i;:::-;4284;4292:13;4309:4;4284:29;:::i;:::-;:63;;;;:::i;:::-;4283:98;;;;:::i;:::-;4282:143;;;;:::i;:::-;4236:203;2963:1539;-1:-1:-1;;;;;;;2963:1539:254:o;3535:963::-;4460:31;;-1:-1:-1;;;4460:31:254;;11267:2:504;4460:31:254;;;11249:21:504;11306:2;11286:18;;;11279:30;-1:-1:-1;;;11325:18:504;;;11318:51;11386:18;;4460:31:254;11065:345:504;2673:187:454;2765:6;;;-1:-1:-1;;;;;2781:17:454;;;-1:-1:-1;;;;;;2781:17:454;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1065:26:454::1;5363:13:457::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1176:32:454::1;929:10:467::0;1176:18:454::1;:32::i;222:131:504:-:0;-1:-1:-1;;;;;297:31:504;;287:42;;277:70;;343:1;340;333:12;358:134;426:20;;455:31;426:20;455:31;:::i;:::-;358:134;;;:::o;497:388::-;565:6;573;626:2;614:9;605:7;601:23;597:32;594:52;;;642:1;639;632:12;594:52;681:9;668:23;700:31;725:5;700:31;:::i;:::-;750:5;-1:-1:-1;807:2:504;792:18;;779:32;820:33;779:32;820:33;:::i;:::-;872:7;862:17;;;497:388;;;;;:::o;890:247::-;949:6;1002:2;990:9;981:7;977:23;973:32;970:52;;;1018:1;1015;1008:12;970:52;1057:9;1044:23;1076:31;1101:5;1076:31;:::i;:::-;1126:5;890:247;-1:-1:-1;;;890:247:504:o;1142:127::-;1203:10;1198:3;1194:20;1191:1;1184:31;1234:4;1231:1;1224:15;1258:4;1255:1;1248:15;1274:908;1328:5;1381:3;1374:4;1366:6;1362:17;1358:27;1348:55;;1399:1;1396;1389:12;1348:55;1435:6;1422:20;1461:4;1484:18;1521:2;1517;1514:10;1511:36;;;1527:18;;:::i;:::-;1573:2;1570:1;1566:10;1605:2;1599:9;1668:2;1664:7;1659:2;1655;1651:11;1647:25;1639:6;1635:38;1723:6;1711:10;1708:22;1703:2;1691:10;1688:18;1685:46;1682:72;;;1734:18;;:::i;:::-;1770:2;1763:22;1820:18;;;1896:15;;;1892:24;;;1854:15;;;;-1:-1:-1;1928:15:504;;;1925:35;;;1956:1;1953;1946:12;1925:35;1992:2;1984:6;1980:15;1969:26;;2004:148;2020:6;2015:3;2012:15;2004:148;;;2086:23;2105:3;2086:23;:::i;:::-;2074:36;;2130:12;;;;2037;;;;2004:148;;2187:761;2336:6;2344;2352;2405:2;2393:9;2384:7;2380:23;2376:32;2373:52;;;2421:1;2418;2411:12;2373:52;2461:9;2448:23;2490:18;2531:2;2523:6;2520:14;2517:34;;;2547:1;2544;2537:12;2517:34;2570:61;2623:7;2614:6;2603:9;2599:22;2570:61;:::i;:::-;2560:71;;2684:2;2673:9;2669:18;2656:32;2640:48;;2713:2;2703:8;2700:16;2697:36;;;2729:1;2726;2719:12;2697:36;;2752:63;2807:7;2796:8;2785:9;2781:24;2752:63;:::i;:::-;2742:73;;;2865:2;2854:9;2850:18;2837:32;2898:1;2891:5;2888:12;2878:40;;2914:1;2911;2904:12;2878:40;2937:5;2927:15;;;2187:761;;;;;:::o;3374:127::-;3435:10;3430:3;3426:20;3423:1;3416:31;3466:4;3463:1;3456:15;3490:4;3487:1;3480:15;3506:350;3660:2;3645:18;;3693:1;3682:13;;3672:144;;3738:10;3733:3;3729:20;3726:1;3719:31;3773:4;3770:1;3763:15;3801:4;3798:1;3791:15;3672:144;3825:25;;;3506:350;:::o;5823:127::-;5884:10;5879:3;5875:20;5872:1;5865:31;5915:4;5912:1;5905:15;5939:4;5936:1;5929:15;5955:127;6016:10;6011:3;6007:20;6004:1;5997:31;6047:4;6044:1;6037:15;6071:4;6068:1;6061:15;6087:135;6126:3;-1:-1:-1;;6147:17:504;;6144:43;;;6167:18;;:::i;:::-;-1:-1:-1;6214:1:504;6203:13;;6087:135::o;6577:251::-;6647:6;6700:2;6688:9;6679:7;6675:23;6671:32;6668:52;;;6716:1;6713;6706:12;6668:52;6748:9;6742:16;6767:31;6792:5;6767:31;:::i;6833:273::-;6901:6;6954:2;6942:9;6933:7;6929:23;6925:32;6922:52;;;6970:1;6967;6960:12;6922:52;7002:9;6996:16;7052:4;7045:5;7041:16;7034:5;7031:27;7021:55;;7072:1;7069;7062:12;7111:125;7151:4;7179:1;7176;7173:8;7170:34;;;7184:18;;:::i;:::-;-1:-1:-1;7221:9:504;;7111:125::o;7241:422::-;7330:1;7373:5;7330:1;7387:270;7408:7;7398:8;7395:21;7387:270;;;7467:4;7463:1;7459:6;7455:17;7449:4;7446:27;7443:53;;;7476:18;;:::i;:::-;7526:7;7516:8;7512:22;7509:55;;;7546:16;;;;7509:55;7625:22;;;;7585:15;;;;7387:270;;;7391:3;7241:422;;;;;:::o;7668:806::-;7717:5;7747:8;7737:80;;-1:-1:-1;7788:1:504;7802:5;;7737:80;7836:4;7826:76;;-1:-1:-1;7873:1:504;7887:5;;7826:76;7918:4;7936:1;7931:59;;;;8004:1;7999:130;;;;7911:218;;7931:59;7961:1;7952:10;;7975:5;;;7999:130;8036:3;8026:8;8023:17;8020:43;;;8043:18;;:::i;:::-;-1:-1:-1;;8099:1:504;8085:16;;8114:5;;7911:218;;8213:2;8203:8;8200:16;8194:3;8188:4;8185:13;8181:36;8175:2;8165:8;8162:16;8157:2;8151:4;8148:12;8144:35;8141:77;8138:159;;;-1:-1:-1;8250:19:504;;;8282:5;;8138:159;8329:34;8354:8;8348:4;8329:34;:::i;:::-;8399:6;8395:1;8391:6;8387:19;8378:7;8375:32;8372:58;;;8410:18;;:::i;:::-;8448:20;;7668:806;-1:-1:-1;;;7668:806:504:o;8479:131::-;8539:5;8568:36;8595:8;8589:4;8568:36;:::i;8615:217::-;8655:1;8681;8671:132;;8725:10;8720:3;8716:20;8713:1;8706:31;8760:4;8757:1;8750:15;8788:4;8785:1;8778:15;8671:132;-1:-1:-1;8817:9:504;;8615:217::o;8837:168::-;8877:7;8943:1;8939;8935:6;8931:14;8928:1;8925:21;8920:1;8913:9;8906:17;8902:45;8899:71;;;8950:18;;:::i;:::-;-1:-1:-1;8990:9:504;;8837:168::o;9010:407::-;9212:2;9194:21;;;9251:2;9231:18;;;9224:30;9290:34;9285:2;9270:18;;9263:62;-1:-1:-1;;;9356:2:504;9341:18;;9334:41;9407:3;9392:19;;9010:407::o;10214:179::-;10292:13;;10345:22;10334:34;;10324:45;;10314:73;;10383:1;10380;10373:12;10398:473;10501:6;10509;10517;10525;10533;10586:3;10574:9;10565:7;10561:23;10557:33;10554:53;;;10603:1;10600;10593:12;10554:53;10626:39;10655:9;10626:39;:::i;:::-;10616:49;;10705:2;10694:9;10690:18;10684:25;10674:35;;10749:2;10738:9;10734:18;10728:25;10718:35;;10793:2;10782:9;10778:18;10772:25;10762:35;;10816:49;10860:3;10849:9;10845:19;10816:49;:::i;:::-;10806:59;;10398:473;;;;;;;;:::o;10876:184::-;10946:6;10999:2;10987:9;10978:7;10974:23;10970:32;10967:52;;;11015:1;11012;11005:12;10967:52;-1:-1:-1;11038:16:504;;10876:184;-1:-1:-1;10876:184:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "NATIVE_TOKEN_USD_PRICE_FEED()": "3a750685", + "USD_TOKEN()": "9d23c812", + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "feedBaseCurrencies(address)": "cebae71d", + "getUnderlyingPrice(address)": "fc57d4df", + "initialize(address,address)": "485cc955", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "price(address)": "aea91078", + "priceFeeds(address)": "9dcb511a", + "renounceOwnership()": "715018a6", + "setPriceFeeds(address[],address[],uint8)": "71f3245a", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/ChainlinkPriceOracleV2_Proxy.json b/packages/sdk/deployments/bob/ChainlinkPriceOracleV2_Proxy.json new file mode 100644 index 000000000..d5597d846 --- /dev/null +++ b/packages/sdk/deployments/bob/ChainlinkPriceOracleV2_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "transactionIndex": 2, + "gasUsed": "817599", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000100000000000100000000000000000000000000000000000000000000000000002000001000000000000000100000000100000000000020000000000000000000800000010800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000004400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000008000000000000000000000", + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978", + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000515b45c30da768482d3ec8a9e1e73edf14047a2d" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + }, + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + }, + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 3, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + }, + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 4, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + }, + { + "transactionIndex": 2, + "blockNumber": 3781593, + "transactionHash": "0xe0ad53d35876de0e758e8fb3d0f85eee256a93f75fd3d1a6638019e3cefff5de", + "address": "0xe1C55b57fCB86819B6b50668DEDD33A203BEfaEf", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 5, + "blockHash": "0xd3460871db7f058e88d09266afe7c0585b8403e3d849deb611b3ca7af65c8978" + } + ], + "blockNumber": 3781593, + "cumulativeGasUsed": "907993", + "status": 1, + "byzantium": true + }, + "args": [ + "0x515B45c30dA768482d3ec8A9E1E73eDf14047a2d", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0x485cc955000000000000000000000000e75d0fb2c24a55ca1e3f96781a2bcc7bdba058f000000000000000000000000097cb85eb5f892dd02866672eab137b3c34501b7b" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/Comptroller.json b/packages/sdk/deployments/bob/Comptroller.json new file mode 100644 index 000000000..49621155d --- /dev/null +++ b/packages/sdk/deployments/bob/Comptroller.json @@ -0,0 +1,3759 @@ +{ + "address": "0x151af46d007Cb7E60759318Ec1553c3Bdd8b93dB", + "abi": [ + { + "type": "function", + "name": "_addRewardsDistributor", + "inputs": [ + { + "name": "distributor", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_afterNonReentrant", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_becomeImplementation", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_beforeNonReentrant", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_borrowGuardianPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_deployMarket", + "inputs": [ + { + "name": "delegateType", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "constructorData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "becomeImplData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "collateralFactorMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "functionSelectors", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "_mintGuardianPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_setCloseFactor", + "inputs": [ + { + "name": "newCloseFactorMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setCollateralFactor", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "newCollateralFactorMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setLiquidationIncentive", + "inputs": [ + { + "name": "newLiquidationIncentiveMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPriceOracle", + "inputs": [ + { + "name": "newOracle", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setWhitelistEnforcement", + "inputs": [ + { + "name": "enforce", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setWhitelistStatuses", + "inputs": [ + { + "name": "suppliers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "statuses", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "accountAssets", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "admin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "adminHasRights", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allBorrowers", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allMarkets", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowAllowed", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "borrowAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "borrowCapForCollateral", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowCapGuardian", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowCaps", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowGuardianPaused", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowWithinLimits", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "accountBorrowsNew", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowingAgainstCollateralBlacklist", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cTokensByUnderlying", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "checkMembership", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "closeFactorMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "enforceWhitelist", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "enterMarkets", + "inputs": [ + { + "name": "cTokens", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "exitMarket", + "inputs": [ + { + "name": "cTokenAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getAccountLiquidity", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAssetsIn", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract ICErc20[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHypotheticalAccountLiquidity", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenModify", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemTokens", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMaxRedeemOrBorrow", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenModify", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "isBorrow", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address payable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdminHasRights", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isComptroller", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isDeprecated", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidateBorrowAllowed", + "inputs": [ + { + "name": "cTokenBorrowed", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "liquidator", + "type": "address", + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "liquidateCalculateSeizeTokens", + "inputs": [ + { + "name": "cTokenBorrowed", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "actualRepayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidationIncentiveMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "markets", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "isListed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "collateralFactorMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "mintAllowed", + "inputs": [ + { + "name": "cTokenAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "minter", + "type": "address", + "internalType": "address" + }, + { + "name": "mintAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "mintGuardianPaused", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "mintVerify", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "minter", + "type": "address", + "internalType": "address" + }, + { + "name": "actualMintAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "mintTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "nonAccruingRewardsDistributors", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "oracle", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pauseGuardian", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redeemAllowed", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemer", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "redeemVerify", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemer", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "redeemTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "repayBorrowAllowed", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "payer", + "type": "address", + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardsDistributors", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "seizeAllowed", + "inputs": [ + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenBorrowed", + "type": "address", + "internalType": "address" + }, + { + "name": "liquidator", + "type": "address", + "internalType": "address" + }, + { + "name": "borrower", + "type": "address", + "internalType": "address" + }, + { + "name": "seizeTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "seizeGuardianPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "suppliers", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supplyCaps", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferAllowed", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "src", + "type": "address", + "internalType": "address" + }, + { + "name": "dst", + "type": "address", + "internalType": "address" + }, + { + "name": "transferTokens", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferGuardianPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "whitelist", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "whitelistArray", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "AddedRewardsDistributor", + "inputs": [ + { + "name": "rewardsDistributor", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Failure", + "inputs": [ + { + "name": "error", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "info", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "detail", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MarketEntered", + "inputs": [ + { + "name": "cToken", + "type": "address", + "indexed": false, + "internalType": "contract ICErc20" + }, + { + "name": "account", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MarketExited", + "inputs": [ + { + "name": "cToken", + "type": "address", + "indexed": false, + "internalType": "contract ICErc20" + }, + { + "name": "account", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MarketListed", + "inputs": [ + { + "name": "cToken", + "type": "address", + "indexed": false, + "internalType": "contract ICErc20" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewCloseFactor", + "inputs": [ + { + "name": "oldCloseFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newCloseFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewCollateralFactor", + "inputs": [ + { + "name": "cToken", + "type": "address", + "indexed": false, + "internalType": "contract ICErc20" + }, + { + "name": "oldCollateralFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newCollateralFactorMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewLiquidationIncentive", + "inputs": [ + { + "name": "oldLiquidationIncentiveMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newLiquidationIncentiveMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPriceOracle", + "inputs": [ + { + "name": "oldPriceOracle", + "type": "address", + "indexed": false, + "internalType": "contract BasePriceOracle" + }, + { + "name": "newPriceOracle", + "type": "address", + "indexed": false, + "internalType": "contract BasePriceOracle" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "WhitelistEnforcementChanged", + "inputs": [ + { + "name": "enforce", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xec0579b13a82223fff8bd37bf1d95e875a3c2fd88069a39d868d1d9c679b20c0", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x151af46d007Cb7E60759318Ec1553c3Bdd8b93dB", + "transactionIndex": 1, + "gasUsed": "4759072", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x8070b5f3f6f86e3dc3e3cf1eca2211dc8fe4926c7baff15c5f76b3ccdcedf65c", + "transactionHash": "0xec0579b13a82223fff8bd37bf1d95e875a3c2fd88069a39d868d1d9c679b20c0", + "logs": [], + "blockNumber": 3777772, + "cumulativeGasUsed": "4802911", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "rewardsDistributor", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "AddedRewardsDistributor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MarketEntered", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "account", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MarketExited", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MarketListed", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldCloseFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewCloseFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "oldCollateralFactorMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newCollateralFactorMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewCollateralFactor", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "oldLiquidationIncentiveMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewLiquidationIncentive", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "oldPriceOracle", + "type": "address", + "indexed": false + }, + { + "internalType": "contract BasePriceOracle", + "name": "newPriceOracle", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPriceOracle", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "WhitelistEnforcementChanged", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "distributor", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_addRewardsDistributor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_afterNonReentrant" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_becomeImplementation" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_beforeNonReentrant" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "becomeImplData", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_deployMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "functionSelectors", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newCloseFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setCloseFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newCollateralFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setCollateralFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "newLiquidationIncentiveMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLiquidationIncentive", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "newOracle", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPriceOracle", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setWhitelistEnforcement", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "suppliers", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "statuses", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setWhitelistStatuses", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "accountAssets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allBorrowers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allMarkets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "borrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowCapForCollateral", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowCapGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "accountBorrowsNew", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowWithinLimits", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowingAgainstCollateralBlacklist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "cTokensByUnderlying", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "checkMembership", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "closeFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "enforceWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "cTokens", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "enterMarkets", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "exitMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAccountLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAssetsIn", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getHypotheticalAccountLiquidity", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "bool", + "name": "isBorrow", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getMaxRedeemOrBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isComptroller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isDeprecated", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "liquidateBorrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "actualRepayAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "liquidateCalculateSeizeTokens", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidationIncentiveMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "markets", + "outputs": [ + { + "internalType": "bool", + "name": "isListed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenAddress", + "type": "address" + }, + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "mintAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mintAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "minter", + "type": "address" + }, + { + "internalType": "uint256", + "name": "actualMintAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "mintTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "mintVerify" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "nonAccruingRewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "oracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "redeemer", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeemVerify" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "payer", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "repayBorrowAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "rewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenBorrowed", + "type": "address" + }, + { + "internalType": "address", + "name": "liquidator", + "type": "address" + }, + { + "internalType": "address", + "name": "borrower", + "type": "address" + }, + { + "internalType": "uint256", + "name": "seizeTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "seizeAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "seizeGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "suppliers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supplyCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "src", + "type": "address" + }, + { + "internalType": "address", + "name": "dst", + "type": "address" + }, + { + "internalType": "uint256", + "name": "transferTokens", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferAllowed", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "transferGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "whitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_addRewardsDistributor(address)": { + "details": "Admin function to add a RewardsDistributor contract", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_afterNonReentrant()": { + "details": "Called by cTokens after a non-reentrant function for pool-wide reentrancy prevention. Prevents pool-wide/cross-asset reentrancy exploits like AMP on Cream." + }, + "_beforeNonReentrant()": { + "details": "Called by cTokens before a non-reentrant function for pool-wide reentrancy prevention. Prevents pool-wide/cross-asset reentrancy exploits like AMP on Cream." + }, + "_deployMarket(uint8,bytes,bytes,uint256)": { + "details": "Admin function to deploy cToken, set isListed, and add support for the market and set the collateral factor", + "returns": { + "_0": "uint 0=success, otherwise a failure. (See enum Error for details)" + } + }, + "_getExtensionFunctions()": { + "returns": { + "functionSelectors": "a list of all the function selectors that this logic extension exposes" + } + }, + "_setCloseFactor(uint256)": { + "details": "Admin function to set closeFactor", + "params": { + "newCloseFactorMantissa": "New close factor, scaled by 1e18" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See ErrorReporter for details)" + } + }, + "_setCollateralFactor(address,uint256)": { + "details": "Admin function to set per-market collateralFactor", + "params": { + "cToken": "The market to set the factor on", + "newCollateralFactorMantissa": "The new collateral factor, scaled by 1e18" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See ErrorReporter for details)" + } + }, + "_setLiquidationIncentive(uint256)": { + "details": "Admin function to set liquidationIncentive", + "params": { + "newLiquidationIncentiveMantissa": "New liquidationIncentive scaled by 1e18" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See ErrorReporter for details)" + } + }, + "_setPriceOracle(address)": { + "details": "Admin function to set a new price oracle", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_setWhitelistEnforcement(bool)": { + "details": "Admin function to set a new whitelist enforcement boolean", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "_setWhitelistStatuses(address[],bool[])": { + "details": "Admin function to set the whitelist `statuses` for `suppliers`", + "returns": { + "_0": "uint 0=success, otherwise a failure (see ErrorReporter.sol for details)" + } + }, + "borrowAllowed(address,address,uint256)": { + "params": { + "borrowAmount": "The amount of underlying the account would borrow", + "borrower": "The account which would borrow the asset", + "cToken": "The market to verify the borrow against" + }, + "returns": { + "_0": "0 if the borrow is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + }, + "borrowWithinLimits(address,uint256)": { + "params": { + "accountBorrowsNew": "The user's new borrow balance of the underlying asset", + "cToken": "Asset whose underlying is being borrowed" + } + }, + "checkMembership(address,address)": { + "params": { + "account": "The address of the account to check", + "cToken": "The cToken to check" + }, + "returns": { + "_0": "True if the account is in the asset, otherwise false." + } + }, + "enterMarkets(address[])": { + "params": { + "cTokens": "The list of addresses of the cToken markets to be enabled" + }, + "returns": { + "_0": "Success indicator for whether each corresponding market was entered" + } + }, + "exitMarket(address)": { + "details": "Sender must not have an outstanding borrow balance in the asset, or be providing necessary collateral for an outstanding borrow.", + "params": { + "cTokenAddress": "The address of the asset to be removed" + }, + "returns": { + "_0": "Whether or not the account successfully exited the market" + } + }, + "getAssetsIn(address)": { + "params": { + "account": "The address of the account to pull assets for" + }, + "returns": { + "_0": "A dynamic list with the assets the account has entered" + } + }, + "getHypotheticalAccountLiquidity(address,address,uint256,uint256,uint256)": { + "params": { + "account": "The account to determine liquidity for", + "borrowAmount": "The amount of underlying to hypothetically borrow", + "cTokenModify": "The market to hypothetically redeem/borrow in", + "redeemTokens": "The number of tokens to hypothetically redeem" + }, + "returns": { + "_0": "(possible error code (semi-opaque), hypothetical account liquidity in excess of collateral requirements, hypothetical account shortfall below collateral requirements)" + } + }, + "isDeprecated(address)": { + "details": "All borrows in a deprecated cToken market can be immediately liquidated", + "params": { + "cToken": "The market to check if deprecated" + } + }, + "liquidateBorrowAllowed(address,address,address,address,uint256)": { + "params": { + "borrower": "The address of the borrower", + "cTokenBorrowed": "Asset which was borrowed by the borrower", + "cTokenCollateral": "Asset which was used as collateral and will be seized", + "liquidator": "The address repaying the borrow and seizing the collateral", + "repayAmount": "The amount of underlying being repaid" + } + }, + "liquidateCalculateSeizeTokens(address,address,uint256)": { + "details": "Used in liquidation (called in cToken.liquidateBorrowFresh)", + "params": { + "actualRepayAmount": "The amount of cTokenBorrowed underlying to convert into cTokenCollateral tokens", + "cTokenBorrowed": "The address of the borrowed cToken", + "cTokenCollateral": "The address of the collateral cToken" + }, + "returns": { + "_0": "(errorCode, number of cTokenCollateral tokens to be seized in a liquidation)" + } + }, + "mintAllowed(address,address,uint256)": { + "params": { + "cTokenAddress": "The market to verify the mint against", + "mintAmount": "The amount of underlying being supplied to the market in exchange for tokens", + "minter": "The account which would get the minted tokens" + }, + "returns": { + "_0": "0 if the mint is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + }, + "mintVerify(address,address,uint256,uint256)": { + "params": { + "actualMintAmount": "The amount of the underlying asset being minted", + "cToken": "Asset being minted", + "mintTokens": "The number of tokens being minted", + "minter": "The address minting the tokens" + } + }, + "redeemAllowed(address,address,uint256)": { + "params": { + "cToken": "The market to verify the redeem against", + "redeemTokens": "The number of cTokens to exchange for the underlying asset in the market", + "redeemer": "The account which would redeem the tokens" + }, + "returns": { + "_0": "0 if the redeem is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + }, + "redeemVerify(address,address,uint256,uint256)": { + "params": { + "cToken": "Asset being redeemed", + "redeemAmount": "The amount of the underlying asset being redeemed", + "redeemTokens": "The number of tokens being redeemed", + "redeemer": "The address redeeming the tokens" + } + }, + "repayBorrowAllowed(address,address,address,uint256)": { + "params": { + "borrower": "The account which would borrowed the asset", + "cToken": "The market to verify the repay against", + "payer": "The account which would repay the asset", + "repayAmount": "The amount of the underlying asset the account would repay" + }, + "returns": { + "_0": "0 if the repay is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + }, + "seizeAllowed(address,address,address,address,uint256)": { + "params": { + "borrower": "The address of the borrower", + "cTokenBorrowed": "Asset which was borrowed by the borrower", + "cTokenCollateral": "Asset which was used as collateral and will be seized", + "liquidator": "The address repaying the borrow and seizing the collateral", + "seizeTokens": "The number of collateral tokens to seize" + } + }, + "transferAllowed(address,address,address,uint256)": { + "params": { + "cToken": "The market to verify the transfer against", + "dst": "The account which receives the tokens", + "src": "The account which sources the tokens", + "transferTokens": "The number of cTokens to transfer" + }, + "returns": { + "_0": "0 if the transfer is allowed, otherwise a semi-opaque error code (See ErrorReporter.sol)" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_addRewardsDistributor(address)": { + "notice": "Add a RewardsDistributor contracts." + }, + "_deployMarket(uint8,bytes,bytes,uint256)": { + "notice": "Deploy cToken, add the market to the markets mapping, and set it as listed and set the collateral factor" + }, + "_setCloseFactor(uint256)": { + "notice": "Sets the closeFactor used when liquidating borrows" + }, + "_setCollateralFactor(address,uint256)": { + "notice": "Sets the collateralFactor for a market" + }, + "_setLiquidationIncentive(uint256)": { + "notice": "Sets liquidationIncentive" + }, + "_setPriceOracle(address)": { + "notice": "Sets a new price oracle for the comptroller" + }, + "_setWhitelistEnforcement(bool)": { + "notice": "Sets the whitelist enforcement for the comptroller" + }, + "_setWhitelistStatuses(address[],bool[])": { + "notice": "Sets the whitelist `statuses` for `suppliers`" + }, + "accountAssets(address,uint256)": { + "notice": "Per-account mapping of \"assets you are in\", capped by maxAssets" + }, + "admin()": { + "notice": "Administrator for this contract" + }, + "adminHasRights()": { + "notice": "Whether or not the admin has admin rights" + }, + "allBorrowers(uint256)": { + "notice": "A list of all borrowers who have entered markets" + }, + "allMarkets(uint256)": { + "notice": "A list of all markets" + }, + "borrowAllowed(address,address,uint256)": { + "notice": "Checks if the account should be allowed to borrow the underlying asset of the given market" + }, + "borrowCapGuardian()": { + "notice": "The borrowCapGuardian can set borrowCaps to any number for any market. Lowering the borrow cap could disable borrowing on the given market." + }, + "borrowCaps(address)": { + "notice": "Borrow caps enforced by borrowAllowed for each cToken address. Defaults to zero which corresponds to unlimited borrowing." + }, + "borrowWithinLimits(address,uint256)": { + "notice": "Checks if the account should be allowed to borrow the underlying asset of the given market" + }, + "cTokensByUnderlying(address)": { + "notice": "All cTokens addresses mapped by their underlying token addresses" + }, + "checkMembership(address,address)": { + "notice": "Returns whether the given account is entered in the given asset" + }, + "closeFactorMantissa()": { + "notice": "Multiplier used to calculate the maximum repayAmount when liquidating a borrow" + }, + "enforceWhitelist()": { + "notice": "Whether or not the supplier whitelist is enforced" + }, + "enterMarkets(address[])": { + "notice": "Add assets to be included in account liquidity calculation" + }, + "exitMarket(address)": { + "notice": "Removes asset from sender's account liquidity calculation" + }, + "getAssetsIn(address)": { + "notice": "Returns the assets an account has entered" + }, + "getHypotheticalAccountLiquidity(address,address,uint256,uint256,uint256)": { + "notice": "Determine what the account liquidity would be if the given amounts were redeemed/borrowed" + }, + "ionicAdminHasRights()": { + "notice": "Whether or not the Ionic admin has admin rights" + }, + "isComptroller()": { + "notice": "Indicator that this is a Comptroller contract (for inspection)" + }, + "isDeprecated(address)": { + "notice": "Returns true if the given cToken market has been deprecated" + }, + "liquidateBorrowAllowed(address,address,address,address,uint256)": { + "notice": "Checks if the liquidation should be allowed to occur" + }, + "liquidateCalculateSeizeTokens(address,address,uint256)": { + "notice": "Calculate number of tokens of collateral asset to seize given an underlying amount" + }, + "liquidationIncentiveMantissa()": { + "notice": "Multiplier representing the discount on collateral that a liquidator receives" + }, + "markets(address)": { + "notice": "Official mapping of cTokens -> Market metadata" + }, + "mintAllowed(address,address,uint256)": { + "notice": "Checks if the account should be allowed to mint tokens in the given market" + }, + "mintVerify(address,address,uint256,uint256)": { + "notice": "Validates mint and reverts on rejection. May emit logs." + }, + "nonAccruingRewardsDistributors(uint256)": { + "notice": "RewardsDistributor to list for claiming, but not to notify of flywheel changes." + }, + "oracle()": { + "notice": "Oracle which gives the price of any given asset" + }, + "pauseGuardian()": { + "notice": "The Pause Guardian can pause certain actions as a safety mechanism. Actions which allow users to remove their own assets cannot be paused. Liquidation / seizing / transfer can only be paused globally, not by market." + }, + "pendingAdmin()": { + "notice": "Pending administrator for this contract" + }, + "redeemAllowed(address,address,uint256)": { + "notice": "Checks if the account should be allowed to redeem tokens in the given market" + }, + "redeemVerify(address,address,uint256,uint256)": { + "notice": "Validates redeem and reverts on rejection. May emit logs." + }, + "repayBorrowAllowed(address,address,address,uint256)": { + "notice": "Checks if the account should be allowed to repay a borrow in the given market" + }, + "rewardsDistributors(uint256)": { + "notice": "RewardsDistributor contracts to notify of flywheel changes." + }, + "seizeAllowed(address,address,address,address,uint256)": { + "notice": "Checks if the seizing of assets should be allowed to occur" + }, + "supplyCaps(address)": { + "notice": "Supply caps enforced by mintAllowed for each cToken address. Defaults to zero which corresponds to unlimited supplying." + }, + "transferAllowed(address,address,address,uint256)": { + "notice": "Checks if the account should be allowed to transfer tokens in the given market" + }, + "whitelist(address)": { + "notice": "Maps addresses to booleans indicating if they are allowed to supply assets (i.e., mint cTokens)" + }, + "whitelistArray(uint256)": { + "notice": "An array of all whitelisted accounts" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/Comptroller.sol": "Comptroller" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x1e1f9dda1735929b60cf601e3b39b8394ceb284a582ab4f0d0614b76a84fc4bd", + "urls": [ + "bzz-raw://1670338a3d0c64b13c2e623acaad068ccb6a7f7650d5d43d555099071bcfd03d", + "dweb:/ipfs/QmSMje4u1Zn7kf8DAybkLs8GPmcggTukTq754RE9eq99YR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040526002805461ffff60a01b191661010160a01b17905534801561002557600080fd5b506154b3806100356000396000f3fe608060405234801561001057600080fd5b50600436106103c45760003560e01c80637e361b11116101ff578063c488847b1161011a578063da3d454c116100ad578063e87554461161007c578063e8755446146109a6578063eabe7d91146109af578063ede4edd0146109c2578063f851a440146109d557600080fd5b8063da3d454c14610959578063dce154491461096c578063e4028eee1461097f578063e6653f3d1461099257600080fd5b8063c91a424f116100e9578063c91a424f1461090c578063cf6bfd2d1461091f578063d02f735114610933578063d251fefc1461094657600080fd5b8063c488847b146108b6578063c6c5b0dd146108de578063c8c9c975146108f1578063c90c20b11461090457600080fd5b80639b19251a11610192578063b452ef6211610161578063b452ef621461085d578063b9b5b15314610870578063bdcdc25814610883578063c29982381461089657600080fd5b80639b19251a146107f9578063abfceffc1461081c578063ac0b0bb71461083c578063b09572101461085057600080fd5b8063929fe9a1116101ce578063929fe9a114610767578063940cd6f1146107a857806394543c15146107d3578063952adf5a146107e657600080fd5b80637e361b11146106e757806387f76303146106fa57806389f8132e1461070e5780638e8f294b1461072357600080fd5b80634ada90af116102ef5780635fc7e71e11610282578063731f0c2b11610251578063731f0c2b1461068b5780637515bafa146106ae578063779b2294146106c15780637dc0d1d0146106d457600080fd5b80635fc7e71e1461063a578063632e51421461064d5780636bd02b8a146106555780636d154ea51461066857600080fd5b806352d84d1e116102be57806352d84d1e146105d957806355ee1fe1146105ec5780635d72de62146105ff5780635ec88c791461060757600080fd5b80634ada90af146105975780634ef4c3e1146105a05780634fd42e17146105b357806351dff989146105c657600080fd5b806324008a621161036757806331ff47fa1161033657806331ff47fa146105035780633c94786f1461052c57806341c728b9146105405780634a5844321461057757600080fd5b806324008a62146104b757806324a3d622146104ca57806326782247146104dd578063317b0b77146104f057600080fd5b806316dc15fe116103a357806316dc15fe146104285780631976828e1461044b5780631c819e431461045e57806321af45691461048c57600080fd5b80627e3dd2146103c957806302c3bcbb146103e65780630a755ec214610414575b600080fd5b6103d1600181565b60405190151581526020015b60405180910390f35b6104066103f4366004614c62565b60186020526000908152604090205481565b6040519081526020016103dd565b6002546103d190600160a81b900460ff1681565b6103d1610436366004614c62565b600d6020526000908152604090205460ff1681565b610406610459366004614c8d565b6109e8565b6103d161046c366004614cd8565b601d60209081526000928352604080842090915290825290205460ff1681565b60165461049f906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b6104066104c5366004614d11565b610bdd565b60135461049f906001600160a01b031681565b60025461049f906001600160a01b031681565b6104066104fe366004614d62565b610c1f565b61049f610511366004614c62565b600e602052600090815260409020546001600160a01b031681565b6013546103d190600160a01b900460ff1681565b61057561054e366004614d7b565b50506001600160a01b03166000908152600d60205260409020805460ff1916600117905550565b005b610406610585366004614c62565b60176020526000908152604090205481565b61040660055481565b6104066105ae366004614dc1565b610cf9565b6104066105c1366004614d62565b610f51565b6105756105d4366004614d7b565b61100d565b61049f6105e7366004614d62565b61109f565b6104066105fa366004614c62565b6110c9565b610575611149565b61061a610615366004614c62565b6111a6565b6040805194855260208501939093529183015260608201526080016103dd565b610406610648366004614e02565b6111ea565b6105756113ab565b61049f610663366004614d62565b611419565b6103d1610676366004614c62565b60156020526000908152604090205460ff1681565b6103d1610699366004614c62565b60146020526000908152604090205460ff1681565b61049f6106bc366004614d62565b611429565b6104066106cf366004614e66565b611439565b60035461049f906001600160a01b031681565b61061a6106f5366004614e92565b611594565b6013546103d190600160b01b900460ff1681565b6107166115de565b6040516103dd9190614ee3565b610750610731366004614c62565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016103dd565b6103d1610775366004614cd8565b6001600160a01b038082166000908152600860209081526040808320938616835260029093019052205460ff1692915050565b6104066107b6366004614cd8565b601c60209081526000928352604080842090915290825290205481565b6103d16107e1366004614c62565b611df8565b6104066107f4366004614f31565b611f62565b6103d1610807366004614c62565b60106020526000908152604090205460ff1681565b61082f61082a366004614c62565b611fe0565b6040516103dd9190614f4e565b6013546103d190600160b81b900460ff1681565b600f546103d19060ff1681565b61040661086b366004614fd1565b612056565b61040661087e366004614c62565b612234565b610406610891366004614d11565b61241c565b6108a96108a4366004615078565b61249f565b6040516103dd919061513d565b6108c96108c4366004614dc1565b612629565b604080519283526020830191909152016103dd565b61049f6108ec366004614d62565b612955565b6104066108ff3660046151ba565b612965565b610575612c0c565b60005461049f906001600160a01b031681565b6002546103d190600160a01b900460ff1681565b610406610941366004614e02565b612cb6565b61049f610954366004614d62565b612e3d565b610406610967366004614dc1565b612e4d565b61049f61097a366004614e66565b6132d4565b61040661098d366004614e66565b61330c565b6013546103d190600160a81b900460ff1681565b61040660045481565b6104066109bd366004614dc1565b613496565b6104066109d0366004614c62565b6134b3565b60015461049f906001600160a01b031681565b604051633af9e66960e01b81526001600160a01b0384811660048301526000918491839190831690633af9e66990602401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190615226565b90506000806000610a7d8988610a71576000610a73565b895b6000806000613a3c565b929550935090915060009050836014811115610a9b57610a9b61523f565b14610ada5760405162461bcd60e51b815260206004820152600a602482015269216c697175696469747960b01b60448201526064015b60405180910390fd5b8015610aee57600095505050505050610bd6565b600087158015610b2857506001600160a01b038087166000908152600860209081526040808320938e16835260029093019052205460ff16155b15610b34575083610b56565b610b3f838a8a613ebf565b905087158015610b4e57508085105b15610b565750835b6000896001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bba9190615226565b905080821115610bca5780610bcc565b815b9750505050505050505b9392505050565b6001600160a01b03841660009081526008602052604081205460ff16610c075760085b9050610c17565b610c118584613fd8565b60005b90505b949350505050565b6000610c29614080565b610c3f57610c39600160076140d4565b92915050565b6040805160208082018352848252825190810190925266b1a2bc2ec50000808352815191929111610c7657610c17600560086140d4565b6040805160208101909152670c7d713b49da000080825283511115610caa57610ca1600560086140d4565b95945050505050565b600480549086905560408051828152602081018890527f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd991015b60405180910390a160005b9695505050505050565b6001600160a01b03831660009081526014602052604081205460ff1615610d515760405162461bcd60e51b815260206004820152600c60248201526b085b5a5b9d0e9c185d5cd95960a21b6044820152606401610ad1565b6001600160a01b03841660009081526008602052604090205460ff16610d7b5760085b9050610bd6565b600f5460ff168015610da657506001600160a01b03831660009081526010602052604090205460ff16155b15610db2576011610d74565b6001600160a01b0384166000908152601860205260409020548015801590610df857506001600160a01b03851660009081526020805260409020610df6908561414d565b155b15610f3c576000856001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e619190615226565b9050600030604051637db121fd60e11b81526001600160a01b038981166004830152919091169063fb6243fa90602401602060405180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed29190615226565b90506000828210610ee557506000610ef2565b610eef828461526b565b90505b83610efd8783615282565b10610f385760405162461bcd60e51b815260206004820152600b60248201526a021737570706c79206361760ac1b6044820152606401610ad1565b5050505b610f46858561416f565b600095945050505050565b6000610f5b614080565b610f6b57610c396001600d6140d4565b60408051602080820183528482528251908101909252670de0b6b3a764000080835281519192911015610fa457610c176007600e6140d4565b60408051602081019091526714d1120d7b16000080825283511115610fcf57610ca16007600e6140d4565b600580549086905560408051828152602081018890527faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec13169101610ce4565b3360009081526008602052604090205460ff166110565760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b6044820152606401610ad1565b801580156110645750600082115b156110995760405162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b6044820152606401610ad1565b50505050565b600981815481106110af57600080fd5b6000918252602090912001546001600160a01b0316905081565b60006110d3614080565b6110e357610c39600160126140d4565b600380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22910160405180910390a160009392505050565b3330146111855760405162461bcd60e51b815260206004820152600a602482015269085cd95b198818d85b1b60b21b6044820152606401610ad1565b601a54610100900460ff166111a457601a805461ffff19166101011790555b565b6000806000806000806000806111c189600080600080613a3c565b93509350935093508360148111156111db576111db61523f565b99929850909650945092505050565b6001600160a01b03851660009081526008602052604081205460ff16158061122b57506001600160a01b03851660009081526008602052604090205460ff16155b1561123a5760085b9050610ca1565b6040516305eff7ef60e21b81526001600160a01b038481166004830152600091908816906317bfdfbc90602401602060405180830381865afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190615226565b90506112b387611df8565b156112fd57828110156112f85760405162461bcd60e51b815260206004820152600d60248201526c21626f72726f773e726570617960981b6044820152606401610ad1565b61139e565b60008061130f86600080600080613a3c565b935050509150600060148111156113285761132861523f565b82601481111561133a5761133a61523f565b1461135b578160148111156113515761135161523f565b9350505050610ca1565b80611367576003611351565b6000611383604051806020016040528060045481525085614211565b90508086111561139a576010945050505050610ca1565b5050505b5060009695505050505050565b3360009081526008602052604090205460ff1661140a5760405162461bcd60e51b815260206004820152601f60248201527f21436f6d7074726f6c6c65723a5f61667465724e6f6e5265656e7472616e74006044820152606401610ad1565b601a805460ff19166001179055565b601b81815481106110af57600080fd5b600b81815481106110af57600080fd5b600080546040805163fdb25fb160e01b8152905183926001600160a01b03169163fdb25fb19160048083019260209291908290030181865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190615226565b9050801561158a5760035460405163fc57d4df60e01b81526001600160a01b038681166004830152600092169063fc57d4df90602401602060405180830381865afa1580156114fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151e9190615226565b90508061153057600c92505050610c39565b60008061154b60405180602001604052808581525087614229565b909250905060008260038111156115645761156461523f565b1461157757600a5b945050505050610c39565b8381101561158657601261156c565b5050505b6000949350505050565b6000806000806000806000806115ad8d8d8d8d8d613a3c565b93509350935093508360148111156115c7576115c761523f565b975091955093509150505b95509550955095915050565b60408051601e8082526103e082019092526060919081602082016103c0803683370190505091506394543c1560e01b826116178361529a565b92508260ff168151811061162d5761162d6152b7565b6001600160e01b031990921660209283029190910190910152635a2977b160e11b826116588361529a565b92508260ff168151811061166e5761166e6152b7565b6001600160e01b031990921660209283029190910190910152632aff3bff60e21b826116998361529a565b92508260ff16815181106116af576116af6152b7565b6001600160e01b03199092166020928302919091019091015263929fe9a160e01b826116da8361529a565b92508260ff16815181106116f0576116f06152b7565b6001600160e01b0319909216602092830291909101909101526355ee1fe160e01b8261171b8361529a565b92508260ff1681518110611731576117316152b7565b6001600160e01b03199092166020928302919091019091015263317b0b7760e01b8261175c8361529a565b92508260ff1681518110611772576117726152b7565b6001600160e01b031990921660209283029190910190910152637201477760e11b8261179d8361529a565b92508260ff16815181106117b3576117b36152b7565b6001600160e01b031990921660209283029190910190910152634fd42e1760e01b826117de8361529a565b92508260ff16815181106117f4576117f46152b7565b6001600160e01b031990921660209283029190910190910152634a956fad60e11b8261181f8361529a565b92508260ff1681518110611835576118356152b7565b6001600160e01b03199092166020928302919091019091015263c8c9c97560e01b826118608361529a565b92508260ff1681518110611876576118766152b7565b6001600160e01b03199092166020928302919091019091015263b9b5b15360e01b826118a18361529a565b92508260ff16815181106118b7576118b76152b7565b6001600160e01b031990921660209283029190910190910152637e361b1160e01b826118e28361529a565b92508260ff16815181106118f8576118f86152b7565b6001600160e01b031990921660209283029190910190910152630cbb414760e11b826119238361529a565b92508260ff1681518110611939576119396152b7565b6001600160e01b031990921660209283029190910190910152631853304760e31b826119648361529a565b92508260ff168151811061197a5761197a6152b7565b6001600160e01b031990921660209283029190910190910152630ede4edd60e41b826119a58361529a565b92508260ff16815181106119bb576119bb6152b7565b6001600160e01b031990921660209283029190910190910152634ef4c3e160e01b826119e68361529a565b92508260ff16815181106119fc576119fc6152b7565b6001600160e01b03199092166020928302919091019091015263eabe7d9160e01b82611a278361529a565b92508260ff1681518110611a3d57611a3d6152b7565b6001600160e01b0319909216602092830291909101909101526351dff98960e01b82611a688361529a565b92508260ff1681518110611a7e57611a7e6152b7565b6001600160e01b03199092166020928302919091019091015263368f515360e21b82611aa98361529a565b92508260ff1681518110611abf57611abf6152b7565b6001600160e01b031990921660209283029190910190910152631de6c8a560e21b82611aea8361529a565b92508260ff1681518110611b0057611b006152b7565b6001600160e01b031990921660209283029190910190910152631200453160e11b82611b2b8361529a565b92508260ff1681518110611b4157611b416152b7565b6001600160e01b031990921660209283029190910190910152632fe3f38f60e11b82611b6c8361529a565b92508260ff1681518110611b8257611b826152b7565b6001600160e01b03199092166020928302919091019091015263d02f735160e01b82611bad8361529a565b92508260ff1681518110611bc357611bc36152b7565b6001600160e01b0319909216602092830291909101909101526317b9b84b60e31b82611bee8361529a565b92508260ff1681518110611c0457611c046152b7565b6001600160e01b0319909216602092830291909101909101526341c728b960e01b82611c2f8361529a565b92508260ff1681518110611c4557611c456152b7565b6001600160e01b031990921660209283029190910190910152635ec88c7960e01b82611c708361529a565b92508260ff1681518110611c8657611c866152b7565b6001600160e01b03199092166020928302919091019091015263c488847b60e01b82611cb18361529a565b92508260ff1681518110611cc757611cc76152b7565b6001600160e01b03199092166020928302919091019091015263c90c20b160e01b82611cf28361529a565b92508260ff1681518110611d0857611d086152b7565b6001600160e01b03199092166020928302919091019091015263319728a160e11b82611d338361529a565b92508260ff1681518110611d4957611d496152b7565b6001600160e01b031990921660209283029190910190910152632eb96f3160e11b82611d748361529a565b92508260ff1681518110611d8a57611d8a6152b7565b6001600160e01b03199092166020928302919091019091015260ff811615611df45760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610ad1565b5090565b6001600160a01b038116600090815260086020526040812060010154158015611e3e57506001600160a01b03821660009081526015602052604090205460ff1615156001145b8015610c395750611f52611f14836001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ead9190615226565b846001600160a01b0316638d02d9a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0f9190615226565b61427c565b836001600160a01b031663c3bf11cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eeb573d6000803e3d6000fd5b670de0b6b3a76400001492915050565b6000611f6c614080565b611f7c57610c39600160136140d4565b600f5460ff1615158215151415611f94576000610c39565b600f805460ff19168315159081179091556040519081527f84c7d948374a180eddab35d27d2f7a94167a1ff4e79467f1e89c061984190a1e906020015b60405180910390a16000610c39565b6001600160a01b038116600090815260076020908152604080832080548251818502810185019093528083526060949383018282801561204957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161202b575b5093979650505050505050565b6000612060614080565b61207757612070600160166140d4565b9050610cef565b60028054600160a01b60ff60a01b1982168117909255600080546040516328f816b560e11b81529390920460ff169290916001600160a01b0316906351f02d6a906120ce908c908c908c908c908c906004016152f6565b6020604051808303816000875af11580156120ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121119190615326565b6002805460ff60a01b1916600160a01b8515150217905590506000612135826142b2565b905060008054906101000a90046001600160a01b03166001600160a01b0316638aac2f0c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ac9190615326565b604051635a89ef5160e01b81523060048201526001600160a01b039190911690635a89ef5190602401600060405180830381600087803b1580156121ef57600080fd5b505af1158015612203573d6000803e3d6000fd5b5060009250612210915050565b811461221c5780612226565b612226828661330c565b9a9950505050505050505050565b600061223e614080565b6122735760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610ad1565b816001600160a01b031663abc6d72d6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d79190615343565b61231b5760405162461bcd60e51b815260206004820152601560248201527410b4b9a932bbb0b93239a234b9ba3934b13aba37b960591b6044820152606401610ad1565b60005b60195481101561239d576019818154811061233b5761233b6152b7565b6000918252602090912001546001600160a01b038481169116141561238b5760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b6044820152606401610ad1565b8061239581615360565b91505061231e565b50601980546001810182556000919091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319166001600160a01b0384169081179091556040519081527f98ef1187fb6fd2bc85f8996489877eb2b5428f9e9bdfc068c9ad6c2ea82eacc790602001611fd1565b601354600090600160b01b900460ff161561246c5760405162461bcd60e51b815260206004820152601060248201526f085d1c985b9cd9995c8e9c185d5cd95960821b6044820152606401610ad1565b60006124798686856144f9565b90508015612488579050610c17565b6124938686866145c1565b60009695505050505050565b60008054604051631beb2b9760e31b81526060926001600160a01b039092169163df595cb8916124e49130913391839190356001600160e01b0319169060040161537b565b602060405180830381865afa158015612501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125259190615343565b6125625760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610ad1565b815160008167ffffffffffffffff81111561257f5761257f615062565b6040519080825280602002602001820160405280156125a8578160200160208202803683370190505b50905060005b8281101561261f5760008582815181106125ca576125ca6152b7565b602002602001015190506125de813361466c565b60148111156125ef576125ef61523f565b838381518110612601576126016152b7565b6020908102919091010152508061261781615360565b9150506125ae565b509150505b919050565b60035460405163fc57d4df60e01b81526001600160a01b038581166004830152600092839283929091169063fc57d4df90602401602060405180830381865afa15801561267a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269e9190615226565b60035460405163fc57d4df60e01b81526001600160a01b0388811660048301529293506000929091169063fc57d4df90602401602060405180830381865afa1580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190615226565b905081158061271f575080155b1561273357600c600093509350505061294d565b60008690506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279c9190615226565b905060006127b66040518060200160405280600081525090565b6040805160208101909152600081526040805160208101909152600081526000866001600160a01b0316636752e7026040518163ffffffff1660e01b8152600401602060405180830381865afa158015612814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128389190615226565b90506000876001600160a01b031663be99f1196040518163ffffffff1660e01b8152600401602060405180830381865afa15801561287a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289e9190615226565b905060006128e16128cd6040518060200160405280600554815250604051806020016040528087815250614807565b604051806020016040528085815250614807565b90506128fb8160405180602001604052808e81525061483c565b955061292360405180602001604052808c81525060405180602001604052808b81525061483c565b945061292f868661487b565b935061293b848f614211565b60009d509b5050505050505050505050505b935093915050565b601981815481106110af57600080fd5b600061296f614080565b61297f57610c00600160146140d4565b60005b84811015612c0457600086868381811061299e5761299e6152b7565b90506020020160208101906129b39190614c62565b90508484838181106129c7576129c76152b7565b90506020020160208101906129dc9190614f31565b15612a94576001600160a01b03811660009081526010602052604090205460ff16612a8f576001600160a01b0381166000818152601060205260408120805460ff19166001908117909155601180548083018255928190527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890920180546001600160a01b03191690931790925554612a75919061526b565b6001600160a01b0382166000908152601260205260409020555b612bf1565b6001600160a01b03811660009081526010602052604090205460ff1615612bf15760118054612ac59060019061526b565b81548110612ad557612ad56152b7565b60009182526020808320909101546001600160a01b0384811684526012909252604090922054601180549290931692918110612b1357612b136152b7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506011805480612b5257612b526153ae565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038316825260129081905260408220546011805491939184908110612ba657612ba66152b7565b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822094909455918416825260128352808220829055601090925220805460ff191690555b5080612bfc81615360565b915050612982565b506000610c14565b3360009081526008602052604090205460ff16612c6b5760405162461bcd60e51b815260206004820181905260248201527f21436f6d7074726f6c6c65723a5f6265666f72654e6f6e5265656e7472616e746044820152606401610ad1565b601a5460ff16612caa5760405162461bcd60e51b815260206004820152600a602482015269085c99595b9d195c995960b21b6044820152606401610ad1565b601a805460ff19169055565b601354600090600160b81b900460ff1615612d035760405162461bcd60e51b815260206004820152600d60248201526c085cd95a5e994e9c185d5cd959609a1b6044820152606401610ad1565b6001600160a01b03861660009081526008602052604090205460ff161580612d4457506001600160a01b03851660009081526008602052604090205460ff16155b15612d50576008611233565b846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db29190615326565b6001600160a01b0316866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1d9190615326565b6001600160a01b031614612e32576002611233565b6124938684866145c1565b601181815481106110af57600080fd5b6001600160a01b03831660009081526015602052604081205460ff1615612ea75760405162461bcd60e51b815260206004820152600e60248201526d08589bdc9c9bddce9c185d5cd95960921b6044820152606401610ad1565b6001600160a01b03841660009081526008602052604090205460ff16612ece576008610d74565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16612fbd57336001600160a01b03851614612f415760405162461bcd60e51b815260206004820152600760248201526610b1ba37b5b2b760c91b6044820152606401610ad1565b6000612f4d338561466c565b90506000816014811115612f6357612f6361523f565b14612f8257806014811115612f7a57612f7a61523f565b915050610bd6565b6001600160a01b038086166000908152600860209081526040808320938816835260029093019052205460ff16612fbb57612fbb6153c4565b505b60035460405163fc57d4df60e01b81526001600160a01b0386811660048301529091169063fc57d4df90602401602060405180830381865afa158015613007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302b9190615226565b61303657600c610d74565b600f5460ff16801561306157506001600160a01b03831660009081526010602052604090205460ff16155b1561306d576011610d74565b6001600160a01b03841660009081526017602052604090205480158015906130b457506001600160a01b03851660009081526021602052604090206130b2908561414d565b155b156131f8576000856001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311d9190615226565b9050600030604051631d3965af60e11b81526001600160a01b0389811660048301529190911690633a72cb5e90602401602060405180830381865afa15801561316a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318e9190615226565b905060008282106131a1575060006131ae565b6131ab828461526b565b90505b836131b98783615282565b106131f45760405162461bcd60e51b815260206004820152600b60248201526a021626f72726f773a6361760ac1b6044820152606401610ad1565b5050505b6132028585613fd8565b604051637e361b1160e01b81526001600160a01b0380861660048301528616602482015260006044820181905260648201859052608482018190529081903090637e361b119060a401608060405180830381865afa158015613268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328c91906153da565b935050509150600060148111156132a5576132a561523f565b82146132b557509150610bd69050565b80156132c75760049350505050610bd6565b6000979650505050505050565b600760205281600052604060002081815481106132f057600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000613316614080565b61332d57613326600160096140d4565b9050610c39565b6001600160a01b0383166000908152600860205260409020805460ff166133625761335a6008600a6140d4565b915050610c39565b60408051602080820183528582528251908101909252670c7d713b49da000082529061339081835190511090565b156133ab576133a16006600b6140d4565b9350505050610c39565b8415801590613425575060035460405163fc57d4df60e01b81526001600160a01b0388811660048301529091169063fc57d4df90602401602060405180830381865afa1580156133ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134239190615226565b155b15613435576133a1600c806140d4565b60018301805490869055604080516001600160a01b0389168152602081018390529081018790527f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc59060600160405180910390a16000979650505050505050565b6000806134a48585856144f9565b90508015610f3c579050610bd6565b60008054604051631beb2b9760e31b81526001600160a01b039091169063df595cb8906134f5903090339082906001600160e01b03198835169060040161537b565b602060405180830381865afa158015613512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135369190615343565b6135735760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610ad1565b6001600160a01b03821660009081526008602052604090205460ff166135db5760405162461bcd60e51b815260206004820152601760248201527f21436f6d7074726f6c6c65723a657869744d61726b65740000000000000000006044820152606401610ad1565b6040516361bfb47160e11b81523360048201528290600090819081906001600160a01b0385169063c37f68e290602401608060405180830381865afa158015613628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364c91906153da565b50925092509250826000146136915760405162461bcd60e51b815260206004820152600b60248201526a08595e1a5d13585c9ad95d60aa1b6044820152606401610ad1565b80156136a357610cef600b60036140d4565b60006136b08733856144f9565b905080156136d0576136c5600d6004836148b5565b979650505050505050565b6001600160a01b0387166000908152600860209081526040808320338452600281019092529091205460ff1661370e57600098975050505050505050565b3360009081526002820160209081526040808320805460ff19169055600782528083208054825181850281018501909352808352919290919083018282801561378057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613762575b5050835193945083925060009150505b828110156137e5578b6001600160a01b03168482815181106137b4576137b46152b7565b60200260200101516001600160a01b031614156137d3578091506137e5565b806137dd81615360565b915050613790565b508181106137f5576137f56153c4565b336000908152600760205260409020805481906138149060019061526b565b81548110613824576138246152b7565b9060005260206000200160009054906101000a90046001600160a01b0316818381548110613854576138546152b7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080805480613892576138926153ae565b600082815260209020810160001990810180546001600160a01b031916905501905580546139e957600b80546138ca9060019061526b565b815481106138da576138da6152b7565b6000918252602080832090910154338352600c909152604090912054600b80546001600160a01b03909316929091908110613917576139176152b7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b805480613956576139566153ae565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252600c908190526040822054600b8054919391849081106139a1576139a16152b7565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812093909355338352600c8252808320839055600a9091529020805460ff191690555b604080516001600160a01b038e1681523360208201527fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d910160405180910390a160009c9b505050505050505050505050565b600080600080613a4a614b77565b6001600160a01b03891615613ace5760035460405163fc57d4df60e01b81526001600160a01b038b811660048301529091169063fc57d4df90602401602060405180830381865afa158015613aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac79190615226565b6101808201525b60005b6001600160a01b038b16600090815260076020526040902054811015613e5b576001600160a01b038b166000908152600760205260409020805482908110613b1b57613b1b6152b7565b60009182526020822001546001600160a01b039081168085526040516361bfb47160e11b8152918e1660048301529063c37f68e290602401608060405180830381865afa158015613b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9491906153da565b60a08701526080860152606085015290508015613bc257600e600080600096509650965096505050506115d2565b50604080516020808201835284516001600160a01b0390811660009081526008835284902060010154835260e08601929092528251908101835260a085015181526101008501526003548451925163fc57d4df60e01b81529282166004840152169063fc57d4df90602401602060405180830381865afa158015613c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6e9190615226565b60c08301819052613c8f57600c6000806000955095509550955050506115d2565b604080516020810190915260c0830151815261012083015260e0820151610100830151613cca91613cbf9161483c565b83610120015161483c565b610140830152308251604051633c1f884b60e11b81526001600160a01b0391821660048201528c821660248201528b151560448201528d8216606482015291169063783f109690608401602060405180830381865afa158015613d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d559190615226565b6101a08301526101408201516060830151600091613d7291614211565b9050826101a00151811115613d8957506101a08201515b8083602001818151613d9b9190615282565b9052505061012082015160808301516040840151613dba92919061492d565b604083015281516001600160a01b038b811691161415613e4957613de88261014001518a846040015161492d565b60408301819052610120830151613e00918a9061492d565b6040830152610120820151600090613e189089614211565b905082604001518110613e315760006040840152613e47565b8083604001818151613e43919061526b565b9052505b505b80613e5381615360565b915050613ad1565b50806040015181602001511115613e94576020810151604082015160009190613e84908261526b565b60009450945094509450506115d2565b60008160200151600083602001518460400151613eb1919061526b565b9450945094509450506115d2565b600083613ece57506000610bd6565b60035460405163fc57d4df60e01b81526001600160a01b038581166004830152600092169063fc57d4df90602401602060405180830381865afa158015613f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3d9190615226565b905060008111613f795760405162461bcd60e51b8152602060048201526007602482015266216f7261636c6560c81b6044820152606401610ad1565b82613fbb576001600160a01b038416600090815260086020526040902060010154670de0b6b3a7640000613fad8383615410565b613fb7919061542f565b9150505b80613fce86670de0b6b3a7640000615410565b610ca1919061542f565b60005b60195481101561407b5760198181548110613ff857613ff86152b7565b600091825260209091200154604051631cdc2c5d60e31b81526001600160a01b03858116600483015284811660248301529091169063e6e162e890604401600060405180830381600087803b15801561405057600080fd5b505af1158015614064573d6000803e3d6000fd5b50505050808061407390615360565b915050613fdb565b505050565b6001546000906001600160a01b0316331480156140a65750600254600160a81b900460ff165b806140cf57506000546001600160a01b0316331480156140cf5750600254600160a01b900460ff165b905090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08360148111156141095761410961523f565b83601a81111561411b5761411b61523f565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610bd657610bd661523f565b6001600160a01b03811660009081526001830160205260408120541515610bd6565b60005b60195481101561407b576019818154811061418f5761418f6152b7565b60009182526020909120015460405162e48b0f60e51b81526001600160a01b038581166004830152848116602483015290911690631c9161e090604401600060405180830381600087803b1580156141e657600080fd5b505af11580156141fa573d6000803e3d6000fd5b50505050808061420990615360565b915050614172565b60008061421e848461494e565b9050610c1781614976565b600080600080614239868661498e565b909250905060008260038111156142525761425261523f565b146142635750915060009050614275565b600061426e82614976565b9350935050505b9250929050565b6000610bd68383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b815250614a0a565b60006142bc614080565b6142cc57610c39600160166140d4565b6001600160a01b03821660009081526008602052604090205460ff16156142f957610c39600960156140d4565b306001600160a01b0316826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015614341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143659190615326565b6001600160a01b0316146143aa5760405162461bcd60e51b815260206004820152600c60248201526b10b1b7b6b83a3937b63632b960a11b6044820152606401610ad1565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440e9190615326565b6001600160a01b038082166000908152600e6020526040902054919250161561443d57610bd6600960156140d4565b6001600160a01b038381166000818152600860209081526040808320805460ff1916600190811782558082018590556009805491820190557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b031990811687179091559587168452600e835292819020805490951684179094559251918252917fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f910160405180910390a16000610c17565b6001600160a01b03831660009081526008602052604081205460ff16614520576008610d74565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16614558576000610d74565b600080614569858786600080613a3c565b935050509150600060148111156145825761458261523f565b8260148111156145945761459461523f565b146145b4578160148111156145ab576145ab61523f565b92505050610bd6565b80156124935760046145ab565b60005b60195481101561109957601981815481106145e1576145e16152b7565b600091825260209091200154604051634e081c9560e01b81526001600160a01b0386811660048301528581166024830152848116604483015290911690634e081c9590606401600060405180830381600087803b15801561464157600080fd5b505af1158015614655573d6000803e3d6000fd5b50505050808061466490615360565b9150506145c4565b6001600160a01b0382166000908152600860205260408120805460ff16614697576008915050610c39565b6001600160a01b038316600090815260028201602052604090205460ff161515600114156146c9576000915050610c39565b6001600160a01b03838116600081815260028401602090815260408083208054600160ff199091168117909155600783528184208054918201815584528284200180546001600160a01b031916958a1695909517909455918152600a909152205460ff166147ba57600b8054600180820183557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180546001600160a01b0319166001600160a01b0387169081179091556000908152600a60205260409020805460ff19168217905590546147a0919061526b565b6001600160a01b0384166000908152600c60205260409020555b604080516001600160a01b038087168252851660208201527f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5910160405180910390a15060009392505050565b60408051602081019091526000815260405180602001604052806148338560000151856000015161427c565b90529392505050565b6040805160208101909152600081526040518060200160405280670de0b6b3a764000061487186600001518660000151614a44565b614833919061542f565b60408051602081019091526000815260405180602001604052806148336148ae8660000151670de0b6b3a7640000614a44565b8551614a86565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08460148111156148ea576148ea61523f565b84601a8111156148fc576148fc61523f565b604080519283526020830191909152810184905260600160405180910390a1836014811115610c1757610c1761523f565b60008061493a858561494e565b9050610ca161494882614976565b8461427c565b6040805160208101909152600081526040518060200160405280614833856000015185614a44565b8051600090610c3990670de0b6b3a76400009061542f565b60006149a66040518060200160405280600081525090565b6000806149b7866000015186614ab9565b909250905060008260038111156149d0576149d061523f565b146149ef57506040805160208101909152600081529092509050614275565b60408051602081019091529081526000969095509350505050565b600080614a178486615282565b90508285821015614a3b5760405162461bcd60e51b8152600401610ad19190615451565b50949350505050565b6000610bd683836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250614af8565b6000610bd683836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250614b4b565b60008083614acc57506000905080614275565b83830283614ada868361542f565b14614aed57600260009250925050614275565b600092509050614275565b6000831580614b05575082155b15614b1257506000610bd6565b6000614b1e8486615410565b905083614b2b868361542f565b148390614a3b5760405162461bcd60e51b8152600401610ad19190615451565b60008183614b6c5760405162461bcd60e51b8152600401610ad19190615451565b50610c17838561542f565b604051806101c0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001614bd36040518060200160405280600081525090565b8152602001614bee6040518060200160405280600081525090565b8152602001614c096040518060200160405280600081525090565b8152602001614c246040518060200160405280600081525090565b81526020016000815260200160008152602001600081525090565b6001600160a01b0381168114614c5457600080fd5b50565b803561262481614c3f565b600060208284031215614c7457600080fd5b8135610bd681614c3f565b8015158114614c5457600080fd5b600080600060608486031215614ca257600080fd5b8335614cad81614c3f565b92506020840135614cbd81614c3f565b91506040840135614ccd81614c7f565b809150509250925092565b60008060408385031215614ceb57600080fd5b8235614cf681614c3f565b91506020830135614d0681614c3f565b809150509250929050565b60008060008060808587031215614d2757600080fd5b8435614d3281614c3f565b93506020850135614d4281614c3f565b92506040850135614d5281614c3f565b9396929550929360600135925050565b600060208284031215614d7457600080fd5b5035919050565b60008060008060808587031215614d9157600080fd5b8435614d9c81614c3f565b93506020850135614dac81614c3f565b93969395505050506040820135916060013590565b600080600060608486031215614dd657600080fd5b8335614de181614c3f565b92506020840135614df181614c3f565b929592945050506040919091013590565b600080600080600060a08688031215614e1a57600080fd5b8535614e2581614c3f565b94506020860135614e3581614c3f565b93506040860135614e4581614c3f565b92506060860135614e5581614c3f565b949793965091946080013592915050565b60008060408385031215614e7957600080fd5b8235614e8481614c3f565b946020939093013593505050565b600080600080600060a08688031215614eaa57600080fd5b8535614eb581614c3f565b94506020860135614ec581614c3f565b94979496505050506040830135926060810135926080909101359150565b6020808252825182820181905260009190848201906040850190845b81811015614f255783516001600160e01b03191683529284019291840191600101614eff565b50909695505050505050565b600060208284031215614f4357600080fd5b8135610bd681614c7f565b6020808252825182820181905260009190848201906040850190845b81811015614f255783516001600160a01b031683529284019291840191600101614f6a565b60008083601f840112614fa157600080fd5b50813567ffffffffffffffff811115614fb957600080fd5b60208301915083602082850101111561427557600080fd5b60008060008060008060808789031215614fea57600080fd5b863560ff81168114614ffb57600080fd5b9550602087013567ffffffffffffffff8082111561501857600080fd5b6150248a838b01614f8f565b9097509550604089013591508082111561503d57600080fd5b5061504a89828a01614f8f565b979a9699509497949695606090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561508b57600080fd5b823567ffffffffffffffff808211156150a357600080fd5b818501915085601f8301126150b757600080fd5b8135818111156150c9576150c9615062565b8060051b604051601f19603f830116810181811085821117156150ee576150ee615062565b60405291825284820192508381018501918883111561510c57600080fd5b938501935b828510156151315761512285614c57565b84529385019392850192615111565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614f2557835183529284019291840191600101615159565b60008083601f84011261518757600080fd5b50813567ffffffffffffffff81111561519f57600080fd5b6020830191508360208260051b850101111561427557600080fd5b600080600080604085870312156151d057600080fd5b843567ffffffffffffffff808211156151e857600080fd5b6151f488838901615175565b9096509450602087013591508082111561520d57600080fd5b5061521a87828801615175565b95989497509550505050565b60006020828403121561523857600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561527d5761527d615255565b500390565b6000821982111561529557615295615255565b500190565b600060ff8216806152ad576152ad615255565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff861681526060602082015260006153136060830186886152cd565b82810360408401526151318185876152cd565b60006020828403121561533857600080fd5b8151610bd681614c3f565b60006020828403121561535557600080fd5b8151610bd681614c7f565b600060001982141561537457615374615255565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600080600080608085870312156153f057600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081600019048311821515161561542a5761542a615255565b500290565b60008261544c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b8181101561547e57858101830151858201604001528201615462565b81811115615490576000604083870101525b50601f01601f191692909201604001939250505056fea164736f6c634300080a000a", + "sourceMap": "987:50968:17:-:0;;;622:38:20;;;-1:-1:-1;;;;732:33:20;-1:-1:-1;;;732:33:20;;;987:50968:17;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106103c45760003560e01c80637e361b11116101ff578063c488847b1161011a578063da3d454c116100ad578063e87554461161007c578063e8755446146109a6578063eabe7d91146109af578063ede4edd0146109c2578063f851a440146109d557600080fd5b8063da3d454c14610959578063dce154491461096c578063e4028eee1461097f578063e6653f3d1461099257600080fd5b8063c91a424f116100e9578063c91a424f1461090c578063cf6bfd2d1461091f578063d02f735114610933578063d251fefc1461094657600080fd5b8063c488847b146108b6578063c6c5b0dd146108de578063c8c9c975146108f1578063c90c20b11461090457600080fd5b80639b19251a11610192578063b452ef6211610161578063b452ef621461085d578063b9b5b15314610870578063bdcdc25814610883578063c29982381461089657600080fd5b80639b19251a146107f9578063abfceffc1461081c578063ac0b0bb71461083c578063b09572101461085057600080fd5b8063929fe9a1116101ce578063929fe9a114610767578063940cd6f1146107a857806394543c15146107d3578063952adf5a146107e657600080fd5b80637e361b11146106e757806387f76303146106fa57806389f8132e1461070e5780638e8f294b1461072357600080fd5b80634ada90af116102ef5780635fc7e71e11610282578063731f0c2b11610251578063731f0c2b1461068b5780637515bafa146106ae578063779b2294146106c15780637dc0d1d0146106d457600080fd5b80635fc7e71e1461063a578063632e51421461064d5780636bd02b8a146106555780636d154ea51461066857600080fd5b806352d84d1e116102be57806352d84d1e146105d957806355ee1fe1146105ec5780635d72de62146105ff5780635ec88c791461060757600080fd5b80634ada90af146105975780634ef4c3e1146105a05780634fd42e17146105b357806351dff989146105c657600080fd5b806324008a621161036757806331ff47fa1161033657806331ff47fa146105035780633c94786f1461052c57806341c728b9146105405780634a5844321461057757600080fd5b806324008a62146104b757806324a3d622146104ca57806326782247146104dd578063317b0b77146104f057600080fd5b806316dc15fe116103a357806316dc15fe146104285780631976828e1461044b5780631c819e431461045e57806321af45691461048c57600080fd5b80627e3dd2146103c957806302c3bcbb146103e65780630a755ec214610414575b600080fd5b6103d1600181565b60405190151581526020015b60405180910390f35b6104066103f4366004614c62565b60186020526000908152604090205481565b6040519081526020016103dd565b6002546103d190600160a81b900460ff1681565b6103d1610436366004614c62565b600d6020526000908152604090205460ff1681565b610406610459366004614c8d565b6109e8565b6103d161046c366004614cd8565b601d60209081526000928352604080842090915290825290205460ff1681565b60165461049f906001600160a01b031681565b6040516001600160a01b0390911681526020016103dd565b6104066104c5366004614d11565b610bdd565b60135461049f906001600160a01b031681565b60025461049f906001600160a01b031681565b6104066104fe366004614d62565b610c1f565b61049f610511366004614c62565b600e602052600090815260409020546001600160a01b031681565b6013546103d190600160a01b900460ff1681565b61057561054e366004614d7b565b50506001600160a01b03166000908152600d60205260409020805460ff1916600117905550565b005b610406610585366004614c62565b60176020526000908152604090205481565b61040660055481565b6104066105ae366004614dc1565b610cf9565b6104066105c1366004614d62565b610f51565b6105756105d4366004614d7b565b61100d565b61049f6105e7366004614d62565b61109f565b6104066105fa366004614c62565b6110c9565b610575611149565b61061a610615366004614c62565b6111a6565b6040805194855260208501939093529183015260608201526080016103dd565b610406610648366004614e02565b6111ea565b6105756113ab565b61049f610663366004614d62565b611419565b6103d1610676366004614c62565b60156020526000908152604090205460ff1681565b6103d1610699366004614c62565b60146020526000908152604090205460ff1681565b61049f6106bc366004614d62565b611429565b6104066106cf366004614e66565b611439565b60035461049f906001600160a01b031681565b61061a6106f5366004614e92565b611594565b6013546103d190600160b01b900460ff1681565b6107166115de565b6040516103dd9190614ee3565b610750610731366004614c62565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016103dd565b6103d1610775366004614cd8565b6001600160a01b038082166000908152600860209081526040808320938616835260029093019052205460ff1692915050565b6104066107b6366004614cd8565b601c60209081526000928352604080842090915290825290205481565b6103d16107e1366004614c62565b611df8565b6104066107f4366004614f31565b611f62565b6103d1610807366004614c62565b60106020526000908152604090205460ff1681565b61082f61082a366004614c62565b611fe0565b6040516103dd9190614f4e565b6013546103d190600160b81b900460ff1681565b600f546103d19060ff1681565b61040661086b366004614fd1565b612056565b61040661087e366004614c62565b612234565b610406610891366004614d11565b61241c565b6108a96108a4366004615078565b61249f565b6040516103dd919061513d565b6108c96108c4366004614dc1565b612629565b604080519283526020830191909152016103dd565b61049f6108ec366004614d62565b612955565b6104066108ff3660046151ba565b612965565b610575612c0c565b60005461049f906001600160a01b031681565b6002546103d190600160a01b900460ff1681565b610406610941366004614e02565b612cb6565b61049f610954366004614d62565b612e3d565b610406610967366004614dc1565b612e4d565b61049f61097a366004614e66565b6132d4565b61040661098d366004614e66565b61330c565b6013546103d190600160a81b900460ff1681565b61040660045481565b6104066109bd366004614dc1565b613496565b6104066109d0366004614c62565b6134b3565b60015461049f906001600160a01b031681565b604051633af9e66960e01b81526001600160a01b0384811660048301526000918491839190831690633af9e66990602401602060405180830381865afa158015610a36573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a5a9190615226565b90506000806000610a7d8988610a71576000610a73565b895b6000806000613a3c565b929550935090915060009050836014811115610a9b57610a9b61523f565b14610ada5760405162461bcd60e51b815260206004820152600a602482015269216c697175696469747960b01b60448201526064015b60405180910390fd5b8015610aee57600095505050505050610bd6565b600087158015610b2857506001600160a01b038087166000908152600860209081526040808320938e16835260029093019052205460ff16155b15610b34575083610b56565b610b3f838a8a613ebf565b905087158015610b4e57508085105b15610b565750835b6000896001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b96573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bba9190615226565b905080821115610bca5780610bcc565b815b9750505050505050505b9392505050565b6001600160a01b03841660009081526008602052604081205460ff16610c075760085b9050610c17565b610c118584613fd8565b60005b90505b949350505050565b6000610c29614080565b610c3f57610c39600160076140d4565b92915050565b6040805160208082018352848252825190810190925266b1a2bc2ec50000808352815191929111610c7657610c17600560086140d4565b6040805160208101909152670c7d713b49da000080825283511115610caa57610ca1600560086140d4565b95945050505050565b600480549086905560408051828152602081018890527f3b9670cf975d26958e754b57098eaa2ac914d8d2a31b83257997b9f346110fd991015b60405180910390a160005b9695505050505050565b6001600160a01b03831660009081526014602052604081205460ff1615610d515760405162461bcd60e51b815260206004820152600c60248201526b085b5a5b9d0e9c185d5cd95960a21b6044820152606401610ad1565b6001600160a01b03841660009081526008602052604090205460ff16610d7b5760085b9050610bd6565b600f5460ff168015610da657506001600160a01b03831660009081526010602052604090205460ff16155b15610db2576011610d74565b6001600160a01b0384166000908152601860205260409020548015801590610df857506001600160a01b03851660009081526020805260409020610df6908561414d565b155b15610f3c576000856001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e3d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e619190615226565b9050600030604051637db121fd60e11b81526001600160a01b038981166004830152919091169063fb6243fa90602401602060405180830381865afa158015610eae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ed29190615226565b90506000828210610ee557506000610ef2565b610eef828461526b565b90505b83610efd8783615282565b10610f385760405162461bcd60e51b815260206004820152600b60248201526a021737570706c79206361760ac1b6044820152606401610ad1565b5050505b610f46858561416f565b600095945050505050565b6000610f5b614080565b610f6b57610c396001600d6140d4565b60408051602080820183528482528251908101909252670de0b6b3a764000080835281519192911015610fa457610c176007600e6140d4565b60408051602081019091526714d1120d7b16000080825283511115610fcf57610ca16007600e6140d4565b600580549086905560408051828152602081018890527faeba5a6c40a8ac138134bff1aaa65debf25971188a58804bad717f82f0ec13169101610ce4565b3360009081526008602052604090205460ff166110565760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b6044820152606401610ad1565b801580156110645750600082115b156110995760405162461bcd60e51b8152602060048201526005602482015264217a65726f60d81b6044820152606401610ad1565b50505050565b600981815481106110af57600080fd5b6000918252602090912001546001600160a01b0316905081565b60006110d3614080565b6110e357610c39600160126140d4565b600380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fd52b2b9b7e9ee655fcb95d2e5b9e0c9f69e7ef2b8e9d2d0ea78402d576d22e22910160405180910390a160009392505050565b3330146111855760405162461bcd60e51b815260206004820152600a602482015269085cd95b198818d85b1b60b21b6044820152606401610ad1565b601a54610100900460ff166111a457601a805461ffff19166101011790555b565b6000806000806000806000806111c189600080600080613a3c565b93509350935093508360148111156111db576111db61523f565b99929850909650945092505050565b6001600160a01b03851660009081526008602052604081205460ff16158061122b57506001600160a01b03851660009081526008602052604090205460ff16155b1561123a5760085b9050610ca1565b6040516305eff7ef60e21b81526001600160a01b038481166004830152600091908816906317bfdfbc90602401602060405180830381865afa158015611284573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a89190615226565b90506112b387611df8565b156112fd57828110156112f85760405162461bcd60e51b815260206004820152600d60248201526c21626f72726f773e726570617960981b6044820152606401610ad1565b61139e565b60008061130f86600080600080613a3c565b935050509150600060148111156113285761132861523f565b82601481111561133a5761133a61523f565b1461135b578160148111156113515761135161523f565b9350505050610ca1565b80611367576003611351565b6000611383604051806020016040528060045481525085614211565b90508086111561139a576010945050505050610ca1565b5050505b5060009695505050505050565b3360009081526008602052604090205460ff1661140a5760405162461bcd60e51b815260206004820152601f60248201527f21436f6d7074726f6c6c65723a5f61667465724e6f6e5265656e7472616e74006044820152606401610ad1565b601a805460ff19166001179055565b601b81815481106110af57600080fd5b600b81815481106110af57600080fd5b600080546040805163fdb25fb160e01b8152905183926001600160a01b03169163fdb25fb19160048083019260209291908290030181865afa158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190615226565b9050801561158a5760035460405163fc57d4df60e01b81526001600160a01b038681166004830152600092169063fc57d4df90602401602060405180830381865afa1580156114fa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061151e9190615226565b90508061153057600c92505050610c39565b60008061154b60405180602001604052808581525087614229565b909250905060008260038111156115645761156461523f565b1461157757600a5b945050505050610c39565b8381101561158657601261156c565b5050505b6000949350505050565b6000806000806000806000806115ad8d8d8d8d8d613a3c565b93509350935093508360148111156115c7576115c761523f565b975091955093509150505b95509550955095915050565b60408051601e8082526103e082019092526060919081602082016103c0803683370190505091506394543c1560e01b826116178361529a565b92508260ff168151811061162d5761162d6152b7565b6001600160e01b031990921660209283029190910190910152635a2977b160e11b826116588361529a565b92508260ff168151811061166e5761166e6152b7565b6001600160e01b031990921660209283029190910190910152632aff3bff60e21b826116998361529a565b92508260ff16815181106116af576116af6152b7565b6001600160e01b03199092166020928302919091019091015263929fe9a160e01b826116da8361529a565b92508260ff16815181106116f0576116f06152b7565b6001600160e01b0319909216602092830291909101909101526355ee1fe160e01b8261171b8361529a565b92508260ff1681518110611731576117316152b7565b6001600160e01b03199092166020928302919091019091015263317b0b7760e01b8261175c8361529a565b92508260ff1681518110611772576117726152b7565b6001600160e01b031990921660209283029190910190910152637201477760e11b8261179d8361529a565b92508260ff16815181106117b3576117b36152b7565b6001600160e01b031990921660209283029190910190910152634fd42e1760e01b826117de8361529a565b92508260ff16815181106117f4576117f46152b7565b6001600160e01b031990921660209283029190910190910152634a956fad60e11b8261181f8361529a565b92508260ff1681518110611835576118356152b7565b6001600160e01b03199092166020928302919091019091015263c8c9c97560e01b826118608361529a565b92508260ff1681518110611876576118766152b7565b6001600160e01b03199092166020928302919091019091015263b9b5b15360e01b826118a18361529a565b92508260ff16815181106118b7576118b76152b7565b6001600160e01b031990921660209283029190910190910152637e361b1160e01b826118e28361529a565b92508260ff16815181106118f8576118f86152b7565b6001600160e01b031990921660209283029190910190910152630cbb414760e11b826119238361529a565b92508260ff1681518110611939576119396152b7565b6001600160e01b031990921660209283029190910190910152631853304760e31b826119648361529a565b92508260ff168151811061197a5761197a6152b7565b6001600160e01b031990921660209283029190910190910152630ede4edd60e41b826119a58361529a565b92508260ff16815181106119bb576119bb6152b7565b6001600160e01b031990921660209283029190910190910152634ef4c3e160e01b826119e68361529a565b92508260ff16815181106119fc576119fc6152b7565b6001600160e01b03199092166020928302919091019091015263eabe7d9160e01b82611a278361529a565b92508260ff1681518110611a3d57611a3d6152b7565b6001600160e01b0319909216602092830291909101909101526351dff98960e01b82611a688361529a565b92508260ff1681518110611a7e57611a7e6152b7565b6001600160e01b03199092166020928302919091019091015263368f515360e21b82611aa98361529a565b92508260ff1681518110611abf57611abf6152b7565b6001600160e01b031990921660209283029190910190910152631de6c8a560e21b82611aea8361529a565b92508260ff1681518110611b0057611b006152b7565b6001600160e01b031990921660209283029190910190910152631200453160e11b82611b2b8361529a565b92508260ff1681518110611b4157611b416152b7565b6001600160e01b031990921660209283029190910190910152632fe3f38f60e11b82611b6c8361529a565b92508260ff1681518110611b8257611b826152b7565b6001600160e01b03199092166020928302919091019091015263d02f735160e01b82611bad8361529a565b92508260ff1681518110611bc357611bc36152b7565b6001600160e01b0319909216602092830291909101909101526317b9b84b60e31b82611bee8361529a565b92508260ff1681518110611c0457611c046152b7565b6001600160e01b0319909216602092830291909101909101526341c728b960e01b82611c2f8361529a565b92508260ff1681518110611c4557611c456152b7565b6001600160e01b031990921660209283029190910190910152635ec88c7960e01b82611c708361529a565b92508260ff1681518110611c8657611c866152b7565b6001600160e01b03199092166020928302919091019091015263c488847b60e01b82611cb18361529a565b92508260ff1681518110611cc757611cc76152b7565b6001600160e01b03199092166020928302919091019091015263c90c20b160e01b82611cf28361529a565b92508260ff1681518110611d0857611d086152b7565b6001600160e01b03199092166020928302919091019091015263319728a160e11b82611d338361529a565b92508260ff1681518110611d4957611d496152b7565b6001600160e01b031990921660209283029190910190910152632eb96f3160e11b82611d748361529a565b92508260ff1681518110611d8a57611d8a6152b7565b6001600160e01b03199092166020928302919091019091015260ff811615611df45760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610ad1565b5090565b6001600160a01b038116600090815260086020526040812060010154158015611e3e57506001600160a01b03821660009081526015602052604090205460ff1615156001145b8015610c395750611f52611f14836001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e89573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ead9190615226565b846001600160a01b0316638d02d9a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eeb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f0f9190615226565b61427c565b836001600160a01b031663c3bf11cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611eeb573d6000803e3d6000fd5b670de0b6b3a76400001492915050565b6000611f6c614080565b611f7c57610c39600160136140d4565b600f5460ff1615158215151415611f94576000610c39565b600f805460ff19168315159081179091556040519081527f84c7d948374a180eddab35d27d2f7a94167a1ff4e79467f1e89c061984190a1e906020015b60405180910390a16000610c39565b6001600160a01b038116600090815260076020908152604080832080548251818502810185019093528083526060949383018282801561204957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161202b575b5093979650505050505050565b6000612060614080565b61207757612070600160166140d4565b9050610cef565b60028054600160a01b60ff60a01b1982168117909255600080546040516328f816b560e11b81529390920460ff169290916001600160a01b0316906351f02d6a906120ce908c908c908c908c908c906004016152f6565b6020604051808303816000875af11580156120ed573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121119190615326565b6002805460ff60a01b1916600160a01b8515150217905590506000612135826142b2565b905060008054906101000a90046001600160a01b03166001600160a01b0316638aac2f0c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612188573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ac9190615326565b604051635a89ef5160e01b81523060048201526001600160a01b039190911690635a89ef5190602401600060405180830381600087803b1580156121ef57600080fd5b505af1158015612203573d6000803e3d6000fd5b5060009250612210915050565b811461221c5780612226565b612226828661330c565b9a9950505050505050505050565b600061223e614080565b6122735760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b6044820152606401610ad1565b816001600160a01b031663abc6d72d6040518163ffffffff1660e01b81526004016020604051808303816000875af11580156122b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122d79190615343565b61231b5760405162461bcd60e51b815260206004820152601560248201527410b4b9a932bbb0b93239a234b9ba3934b13aba37b960591b6044820152606401610ad1565b60005b60195481101561239d576019818154811061233b5761233b6152b7565b6000918252602090912001546001600160a01b038481169116141561238b5760405162461bcd60e51b815260206004820152600660248201526508585919195960d21b6044820152606401610ad1565b8061239581615360565b91505061231e565b50601980546001810182556000919091527f944998273e477b495144fb8794c914197f3ccb46be2900f4698fd0ef743c96950180546001600160a01b0319166001600160a01b0384169081179091556040519081527f98ef1187fb6fd2bc85f8996489877eb2b5428f9e9bdfc068c9ad6c2ea82eacc790602001611fd1565b601354600090600160b01b900460ff161561246c5760405162461bcd60e51b815260206004820152601060248201526f085d1c985b9cd9995c8e9c185d5cd95960821b6044820152606401610ad1565b60006124798686856144f9565b90508015612488579050610c17565b6124938686866145c1565b60009695505050505050565b60008054604051631beb2b9760e31b81526060926001600160a01b039092169163df595cb8916124e49130913391839190356001600160e01b0319169060040161537b565b602060405180830381865afa158015612501573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125259190615343565b6125625760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610ad1565b815160008167ffffffffffffffff81111561257f5761257f615062565b6040519080825280602002602001820160405280156125a8578160200160208202803683370190505b50905060005b8281101561261f5760008582815181106125ca576125ca6152b7565b602002602001015190506125de813361466c565b60148111156125ef576125ef61523f565b838381518110612601576126016152b7565b6020908102919091010152508061261781615360565b9150506125ae565b509150505b919050565b60035460405163fc57d4df60e01b81526001600160a01b038581166004830152600092839283929091169063fc57d4df90602401602060405180830381865afa15801561267a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061269e9190615226565b60035460405163fc57d4df60e01b81526001600160a01b0388811660048301529293506000929091169063fc57d4df90602401602060405180830381865afa1580156126ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127129190615226565b905081158061271f575080155b1561273357600c600093509350505061294d565b60008690506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612778573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061279c9190615226565b905060006127b66040518060200160405280600081525090565b6040805160208101909152600081526040805160208101909152600081526000866001600160a01b0316636752e7026040518163ffffffff1660e01b8152600401602060405180830381865afa158015612814573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128389190615226565b90506000876001600160a01b031663be99f1196040518163ffffffff1660e01b8152600401602060405180830381865afa15801561287a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061289e9190615226565b905060006128e16128cd6040518060200160405280600554815250604051806020016040528087815250614807565b604051806020016040528085815250614807565b90506128fb8160405180602001604052808e81525061483c565b955061292360405180602001604052808c81525060405180602001604052808b81525061483c565b945061292f868661487b565b935061293b848f614211565b60009d509b5050505050505050505050505b935093915050565b601981815481106110af57600080fd5b600061296f614080565b61297f57610c00600160146140d4565b60005b84811015612c0457600086868381811061299e5761299e6152b7565b90506020020160208101906129b39190614c62565b90508484838181106129c7576129c76152b7565b90506020020160208101906129dc9190614f31565b15612a94576001600160a01b03811660009081526010602052604090205460ff16612a8f576001600160a01b0381166000818152601060205260408120805460ff19166001908117909155601180548083018255928190527f31ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c6890920180546001600160a01b03191690931790925554612a75919061526b565b6001600160a01b0382166000908152601260205260409020555b612bf1565b6001600160a01b03811660009081526010602052604090205460ff1615612bf15760118054612ac59060019061526b565b81548110612ad557612ad56152b7565b60009182526020808320909101546001600160a01b0384811684526012909252604090922054601180549290931692918110612b1357612b136152b7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506011805480612b5257612b526153ae565b60008281526020808220830160001990810180546001600160a01b03191690559092019092556001600160a01b038316825260129081905260408220546011805491939184908110612ba657612ba66152b7565b60009182526020808320909101546001600160a01b039081168452838201949094526040928301822094909455918416825260128352808220829055601090925220805460ff191690555b5080612bfc81615360565b915050612982565b506000610c14565b3360009081526008602052604090205460ff16612c6b5760405162461bcd60e51b815260206004820181905260248201527f21436f6d7074726f6c6c65723a5f6265666f72654e6f6e5265656e7472616e746044820152606401610ad1565b601a5460ff16612caa5760405162461bcd60e51b815260206004820152600a602482015269085c99595b9d195c995960b21b6044820152606401610ad1565b601a805460ff19169055565b601354600090600160b81b900460ff1615612d035760405162461bcd60e51b815260206004820152600d60248201526c085cd95a5e994e9c185d5cd959609a1b6044820152606401610ad1565b6001600160a01b03861660009081526008602052604090205460ff161580612d4457506001600160a01b03851660009081526008602052604090205460ff16155b15612d50576008611233565b846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d8e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612db29190615326565b6001600160a01b0316866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612df9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e1d9190615326565b6001600160a01b031614612e32576002611233565b6124938684866145c1565b601181815481106110af57600080fd5b6001600160a01b03831660009081526015602052604081205460ff1615612ea75760405162461bcd60e51b815260206004820152600e60248201526d08589bdc9c9bddce9c185d5cd95960921b6044820152606401610ad1565b6001600160a01b03841660009081526008602052604090205460ff16612ece576008610d74565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16612fbd57336001600160a01b03851614612f415760405162461bcd60e51b815260206004820152600760248201526610b1ba37b5b2b760c91b6044820152606401610ad1565b6000612f4d338561466c565b90506000816014811115612f6357612f6361523f565b14612f8257806014811115612f7a57612f7a61523f565b915050610bd6565b6001600160a01b038086166000908152600860209081526040808320938816835260029093019052205460ff16612fbb57612fbb6153c4565b505b60035460405163fc57d4df60e01b81526001600160a01b0386811660048301529091169063fc57d4df90602401602060405180830381865afa158015613007573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061302b9190615226565b61303657600c610d74565b600f5460ff16801561306157506001600160a01b03831660009081526010602052604090205460ff16155b1561306d576011610d74565b6001600160a01b03841660009081526017602052604090205480158015906130b457506001600160a01b03851660009081526021602052604090206130b2908561414d565b155b156131f8576000856001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156130f9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061311d9190615226565b9050600030604051631d3965af60e11b81526001600160a01b0389811660048301529190911690633a72cb5e90602401602060405180830381865afa15801561316a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061318e9190615226565b905060008282106131a1575060006131ae565b6131ab828461526b565b90505b836131b98783615282565b106131f45760405162461bcd60e51b815260206004820152600b60248201526a021626f72726f773a6361760ac1b6044820152606401610ad1565b5050505b6132028585613fd8565b604051637e361b1160e01b81526001600160a01b0380861660048301528616602482015260006044820181905260648201859052608482018190529081903090637e361b119060a401608060405180830381865afa158015613268573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061328c91906153da565b935050509150600060148111156132a5576132a561523f565b82146132b557509150610bd69050565b80156132c75760049350505050610bd6565b6000979650505050505050565b600760205281600052604060002081815481106132f057600080fd5b6000918252602090912001546001600160a01b03169150829050565b6000613316614080565b61332d57613326600160096140d4565b9050610c39565b6001600160a01b0383166000908152600860205260409020805460ff166133625761335a6008600a6140d4565b915050610c39565b60408051602080820183528582528251908101909252670c7d713b49da000082529061339081835190511090565b156133ab576133a16006600b6140d4565b9350505050610c39565b8415801590613425575060035460405163fc57d4df60e01b81526001600160a01b0388811660048301529091169063fc57d4df90602401602060405180830381865afa1580156133ff573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134239190615226565b155b15613435576133a1600c806140d4565b60018301805490869055604080516001600160a01b0389168152602081018390529081018790527f70483e6592cd5182d45ac970e05bc62cdcc90e9d8ef2c2dbe686cf383bcd7fc59060600160405180910390a16000979650505050505050565b6000806134a48585856144f9565b90508015610f3c579050610bd6565b60008054604051631beb2b9760e31b81526001600160a01b039091169063df595cb8906134f5903090339082906001600160e01b03198835169060040161537b565b602060405180830381865afa158015613512573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135369190615343565b6135735760405162461bcd60e51b815260206004820152600e60248201526d1b9bdd08185d5d1a1bdc9a5e995960921b6044820152606401610ad1565b6001600160a01b03821660009081526008602052604090205460ff166135db5760405162461bcd60e51b815260206004820152601760248201527f21436f6d7074726f6c6c65723a657869744d61726b65740000000000000000006044820152606401610ad1565b6040516361bfb47160e11b81523360048201528290600090819081906001600160a01b0385169063c37f68e290602401608060405180830381865afa158015613628573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364c91906153da565b50925092509250826000146136915760405162461bcd60e51b815260206004820152600b60248201526a08595e1a5d13585c9ad95d60aa1b6044820152606401610ad1565b80156136a357610cef600b60036140d4565b60006136b08733856144f9565b905080156136d0576136c5600d6004836148b5565b979650505050505050565b6001600160a01b0387166000908152600860209081526040808320338452600281019092529091205460ff1661370e57600098975050505050505050565b3360009081526002820160209081526040808320805460ff19169055600782528083208054825181850281018501909352808352919290919083018282801561378057602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311613762575b5050835193945083925060009150505b828110156137e5578b6001600160a01b03168482815181106137b4576137b46152b7565b60200260200101516001600160a01b031614156137d3578091506137e5565b806137dd81615360565b915050613790565b508181106137f5576137f56153c4565b336000908152600760205260409020805481906138149060019061526b565b81548110613824576138246152b7565b9060005260206000200160009054906101000a90046001600160a01b0316818381548110613854576138546152b7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555080805480613892576138926153ae565b600082815260209020810160001990810180546001600160a01b031916905501905580546139e957600b80546138ca9060019061526b565b815481106138da576138da6152b7565b6000918252602080832090910154338352600c909152604090912054600b80546001600160a01b03909316929091908110613917576139176152b7565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550600b805480613956576139566153ae565b60008281526020808220830160001990810180546001600160a01b0319169055909201909255338252600c908190526040822054600b8054919391849081106139a1576139a16152b7565b60009182526020808320909101546001600160a01b03168352828101939093526040918201812093909355338352600c8252808320839055600a9091529020805460ff191690555b604080516001600160a01b038e1681523360208201527fe699a64c18b07ac5b7301aa273f36a2287239eb9501d81950672794afba29a0d910160405180910390a160009c9b505050505050505050505050565b600080600080613a4a614b77565b6001600160a01b03891615613ace5760035460405163fc57d4df60e01b81526001600160a01b038b811660048301529091169063fc57d4df90602401602060405180830381865afa158015613aa3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613ac79190615226565b6101808201525b60005b6001600160a01b038b16600090815260076020526040902054811015613e5b576001600160a01b038b166000908152600760205260409020805482908110613b1b57613b1b6152b7565b60009182526020822001546001600160a01b039081168085526040516361bfb47160e11b8152918e1660048301529063c37f68e290602401608060405180830381865afa158015613b70573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613b9491906153da565b60a08701526080860152606085015290508015613bc257600e600080600096509650965096505050506115d2565b50604080516020808201835284516001600160a01b0390811660009081526008835284902060010154835260e08601929092528251908101835260a085015181526101008501526003548451925163fc57d4df60e01b81529282166004840152169063fc57d4df90602401602060405180830381865afa158015613c4a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613c6e9190615226565b60c08301819052613c8f57600c6000806000955095509550955050506115d2565b604080516020810190915260c0830151815261012083015260e0820151610100830151613cca91613cbf9161483c565b83610120015161483c565b610140830152308251604051633c1f884b60e11b81526001600160a01b0391821660048201528c821660248201528b151560448201528d8216606482015291169063783f109690608401602060405180830381865afa158015613d31573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d559190615226565b6101a08301526101408201516060830151600091613d7291614211565b9050826101a00151811115613d8957506101a08201515b8083602001818151613d9b9190615282565b9052505061012082015160808301516040840151613dba92919061492d565b604083015281516001600160a01b038b811691161415613e4957613de88261014001518a846040015161492d565b60408301819052610120830151613e00918a9061492d565b6040830152610120820151600090613e189089614211565b905082604001518110613e315760006040840152613e47565b8083604001818151613e43919061526b565b9052505b505b80613e5381615360565b915050613ad1565b50806040015181602001511115613e94576020810151604082015160009190613e84908261526b565b60009450945094509450506115d2565b60008160200151600083602001518460400151613eb1919061526b565b9450945094509450506115d2565b600083613ece57506000610bd6565b60035460405163fc57d4df60e01b81526001600160a01b038581166004830152600092169063fc57d4df90602401602060405180830381865afa158015613f19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f3d9190615226565b905060008111613f795760405162461bcd60e51b8152602060048201526007602482015266216f7261636c6560c81b6044820152606401610ad1565b82613fbb576001600160a01b038416600090815260086020526040902060010154670de0b6b3a7640000613fad8383615410565b613fb7919061542f565b9150505b80613fce86670de0b6b3a7640000615410565b610ca1919061542f565b60005b60195481101561407b5760198181548110613ff857613ff86152b7565b600091825260209091200154604051631cdc2c5d60e31b81526001600160a01b03858116600483015284811660248301529091169063e6e162e890604401600060405180830381600087803b15801561405057600080fd5b505af1158015614064573d6000803e3d6000fd5b50505050808061407390615360565b915050613fdb565b505050565b6001546000906001600160a01b0316331480156140a65750600254600160a81b900460ff165b806140cf57506000546001600160a01b0316331480156140cf5750600254600160a01b900460ff165b905090565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08360148111156141095761410961523f565b83601a81111561411b5761411b61523f565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610bd657610bd661523f565b6001600160a01b03811660009081526001830160205260408120541515610bd6565b60005b60195481101561407b576019818154811061418f5761418f6152b7565b60009182526020909120015460405162e48b0f60e51b81526001600160a01b038581166004830152848116602483015290911690631c9161e090604401600060405180830381600087803b1580156141e657600080fd5b505af11580156141fa573d6000803e3d6000fd5b50505050808061420990615360565b915050614172565b60008061421e848461494e565b9050610c1781614976565b600080600080614239868661498e565b909250905060008260038111156142525761425261523f565b146142635750915060009050614275565b600061426e82614976565b9350935050505b9250929050565b6000610bd68383604051806040016040528060118152602001706164646974696f6e206f766572666c6f7760781b815250614a0a565b60006142bc614080565b6142cc57610c39600160166140d4565b6001600160a01b03821660009081526008602052604090205460ff16156142f957610c39600960156140d4565b306001600160a01b0316826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015614341573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906143659190615326565b6001600160a01b0316146143aa5760405162461bcd60e51b815260206004820152600c60248201526b10b1b7b6b83a3937b63632b960a11b6044820152606401610ad1565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156143ea573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061440e9190615326565b6001600160a01b038082166000908152600e6020526040902054919250161561443d57610bd6600960156140d4565b6001600160a01b038381166000818152600860209081526040808320805460ff1916600190811782558082018590556009805491820190557f6e1540171b6c0c960b71a7020d9f60077f6af931a8bbf590da0223dacf75c7af0180546001600160a01b031990811687179091559587168452600e835292819020805490951684179094559251918252917fcf583bb0c569eb967f806b11601c4cb93c10310485c67add5f8362c2f212321f910160405180910390a16000610c17565b6001600160a01b03831660009081526008602052604081205460ff16614520576008610d74565b6001600160a01b038085166000908152600860209081526040808320938716835260029093019052205460ff16614558576000610d74565b600080614569858786600080613a3c565b935050509150600060148111156145825761458261523f565b8260148111156145945761459461523f565b146145b4578160148111156145ab576145ab61523f565b92505050610bd6565b80156124935760046145ab565b60005b60195481101561109957601981815481106145e1576145e16152b7565b600091825260209091200154604051634e081c9560e01b81526001600160a01b0386811660048301528581166024830152848116604483015290911690634e081c9590606401600060405180830381600087803b15801561464157600080fd5b505af1158015614655573d6000803e3d6000fd5b50505050808061466490615360565b9150506145c4565b6001600160a01b0382166000908152600860205260408120805460ff16614697576008915050610c39565b6001600160a01b038316600090815260028201602052604090205460ff161515600114156146c9576000915050610c39565b6001600160a01b03838116600081815260028401602090815260408083208054600160ff199091168117909155600783528184208054918201815584528284200180546001600160a01b031916958a1695909517909455918152600a909152205460ff166147ba57600b8054600180820183557f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db990910180546001600160a01b0319166001600160a01b0387169081179091556000908152600a60205260409020805460ff19168217905590546147a0919061526b565b6001600160a01b0384166000908152600c60205260409020555b604080516001600160a01b038087168252851660208201527f3ab23ab0d51cccc0c3085aec51f99228625aa1a922b3a8ca89a26b0f2027a1a5910160405180910390a15060009392505050565b60408051602081019091526000815260405180602001604052806148338560000151856000015161427c565b90529392505050565b6040805160208101909152600081526040518060200160405280670de0b6b3a764000061487186600001518660000151614a44565b614833919061542f565b60408051602081019091526000815260405180602001604052806148336148ae8660000151670de0b6b3a7640000614a44565b8551614a86565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa08460148111156148ea576148ea61523f565b84601a8111156148fc576148fc61523f565b604080519283526020830191909152810184905260600160405180910390a1836014811115610c1757610c1761523f565b60008061493a858561494e565b9050610ca161494882614976565b8461427c565b6040805160208101909152600081526040518060200160405280614833856000015185614a44565b8051600090610c3990670de0b6b3a76400009061542f565b60006149a66040518060200160405280600081525090565b6000806149b7866000015186614ab9565b909250905060008260038111156149d0576149d061523f565b146149ef57506040805160208101909152600081529092509050614275565b60408051602081019091529081526000969095509350505050565b600080614a178486615282565b90508285821015614a3b5760405162461bcd60e51b8152600401610ad19190615451565b50949350505050565b6000610bd683836040518060400160405280601781526020017f6d756c7469706c69636174696f6e206f766572666c6f77000000000000000000815250614af8565b6000610bd683836040518060400160405280600e81526020016d646976696465206279207a65726f60901b815250614b4b565b60008083614acc57506000905080614275565b83830283614ada868361542f565b14614aed57600260009250925050614275565b600092509050614275565b6000831580614b05575082155b15614b1257506000610bd6565b6000614b1e8486615410565b905083614b2b868361542f565b148390614a3b5760405162461bcd60e51b8152600401610ad19190615451565b60008183614b6c5760405162461bcd60e51b8152600401610ad19190615451565b50610c17838561542f565b604051806101c0016040528060006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001614bd36040518060200160405280600081525090565b8152602001614bee6040518060200160405280600081525090565b8152602001614c096040518060200160405280600081525090565b8152602001614c246040518060200160405280600081525090565b81526020016000815260200160008152602001600081525090565b6001600160a01b0381168114614c5457600080fd5b50565b803561262481614c3f565b600060208284031215614c7457600080fd5b8135610bd681614c3f565b8015158114614c5457600080fd5b600080600060608486031215614ca257600080fd5b8335614cad81614c3f565b92506020840135614cbd81614c3f565b91506040840135614ccd81614c7f565b809150509250925092565b60008060408385031215614ceb57600080fd5b8235614cf681614c3f565b91506020830135614d0681614c3f565b809150509250929050565b60008060008060808587031215614d2757600080fd5b8435614d3281614c3f565b93506020850135614d4281614c3f565b92506040850135614d5281614c3f565b9396929550929360600135925050565b600060208284031215614d7457600080fd5b5035919050565b60008060008060808587031215614d9157600080fd5b8435614d9c81614c3f565b93506020850135614dac81614c3f565b93969395505050506040820135916060013590565b600080600060608486031215614dd657600080fd5b8335614de181614c3f565b92506020840135614df181614c3f565b929592945050506040919091013590565b600080600080600060a08688031215614e1a57600080fd5b8535614e2581614c3f565b94506020860135614e3581614c3f565b93506040860135614e4581614c3f565b92506060860135614e5581614c3f565b949793965091946080013592915050565b60008060408385031215614e7957600080fd5b8235614e8481614c3f565b946020939093013593505050565b600080600080600060a08688031215614eaa57600080fd5b8535614eb581614c3f565b94506020860135614ec581614c3f565b94979496505050506040830135926060810135926080909101359150565b6020808252825182820181905260009190848201906040850190845b81811015614f255783516001600160e01b03191683529284019291840191600101614eff565b50909695505050505050565b600060208284031215614f4357600080fd5b8135610bd681614c7f565b6020808252825182820181905260009190848201906040850190845b81811015614f255783516001600160a01b031683529284019291840191600101614f6a565b60008083601f840112614fa157600080fd5b50813567ffffffffffffffff811115614fb957600080fd5b60208301915083602082850101111561427557600080fd5b60008060008060008060808789031215614fea57600080fd5b863560ff81168114614ffb57600080fd5b9550602087013567ffffffffffffffff8082111561501857600080fd5b6150248a838b01614f8f565b9097509550604089013591508082111561503d57600080fd5b5061504a89828a01614f8f565b979a9699509497949695606090950135949350505050565b634e487b7160e01b600052604160045260246000fd5b6000602080838503121561508b57600080fd5b823567ffffffffffffffff808211156150a357600080fd5b818501915085601f8301126150b757600080fd5b8135818111156150c9576150c9615062565b8060051b604051601f19603f830116810181811085821117156150ee576150ee615062565b60405291825284820192508381018501918883111561510c57600080fd5b938501935b828510156151315761512285614c57565b84529385019392850192615111565b98975050505050505050565b6020808252825182820181905260009190848201906040850190845b81811015614f2557835183529284019291840191600101615159565b60008083601f84011261518757600080fd5b50813567ffffffffffffffff81111561519f57600080fd5b6020830191508360208260051b850101111561427557600080fd5b600080600080604085870312156151d057600080fd5b843567ffffffffffffffff808211156151e857600080fd5b6151f488838901615175565b9096509450602087013591508082111561520d57600080fd5b5061521a87828801615175565b95989497509550505050565b60006020828403121561523857600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008282101561527d5761527d615255565b500390565b6000821982111561529557615295615255565b500190565b600060ff8216806152ad576152ad615255565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b81835281816020850137506000828201602090810191909152601f909101601f19169091010190565b60ff861681526060602082015260006153136060830186886152cd565b82810360408401526151318185876152cd565b60006020828403121561533857600080fd5b8151610bd681614c3f565b60006020828403121561535557600080fd5b8151610bd681614c7f565b600060001982141561537457615374615255565b5060010190565b6001600160a01b0394851681529284166020840152921660408201526001600160e01b0319909116606082015260800190565b634e487b7160e01b600052603160045260246000fd5b634e487b7160e01b600052600160045260246000fd5b600080600080608085870312156153f057600080fd5b505082516020840151604085015160609095015191969095509092509050565b600081600019048311821515161561542a5761542a615255565b500290565b60008261544c57634e487b7160e01b600052601260045260246000fd5b500490565b600060208083528351808285015260005b8181101561547e57858101830151858201604001528201615462565b81811115615490576000604083870101525b50601f01601f191692909201604001939250505056fea164736f6c634300080a000a", + "sourceMap": "987:50968:17:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9963:41:19;;10000:4;9963:41;;;;;179:14:504;;172:22;154:41;;142:2;127:18;9963:41:19;;;;;;;;4769:45:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;879:25:504;;;867:2;852:18;4769:45:20;733:177:504;732:33:20;;;;;-1:-1:-1;;;732:33:20;;;;;;3013:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;13958:1505:17;;;;;;:::i;:::-;;:::i;5549:87:20:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4412:32;;;;;-1:-1:-1;;;;;4412:32:20;;;;;;-1:-1:-1;;;;;2140:32:504;;;2122:51;;2110:2;2095:18;4412:32:20;1976:203:504;20776:402:17;;;;;;:::i;:::-;;:::i;3912:28:20:-;;;;;-1:-1:-1;;;;;3912:28:20;;;517:27;;;;;-1:-1:-1;;;;;517:27:20;;;40482:1077:17;;;;;;:::i;:::-;;:::i;3138:54:20:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3138:54:20;;;3944:31;;;;;-1:-1:-1;;;3944:31:20;;;;;;13107:201:17;;;;;;:::i;:::-;-1:-1:-1;;;;;;;13279:17:17;;;;;:9;:17;;;;;:24;;-1:-1:-1;;13279:24:17;13299:4;13279:24;;;-1:-1:-1;13107:201:17;;;4585:45:20;;;;;;:::i;:::-;;;;;;;;;;;;;;1446:43;;;;;;9687:1418:17;;;;;;:::i;:::-;;:::i;43685:1400::-;;;;;;:::i;:::-;;:::i;13625:329::-;;;;;;:::i;:::-;;:::i;2513:27:20:-;;;;;;:::i;:::-;;:::i;39688:520:17:-;;;;;;:::i;:::-;;:::i;47877:208::-;;;:::i;27482:422::-;;;;;;:::i;:::-;;:::i;:::-;;;;4696:25:504;;;4752:2;4737:18;;4730:34;;;;4780:18;;;4773:34;4838:2;4823:18;;4816:34;4683:3;4668:19;27482:422:17;4465:391:504;21604:1436:17;;;;;;:::i;:::-;;:::i;51764:189::-;;;:::i;5229:47:20:-;;;;;;:::i;:::-;;:::i;4143:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4089:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2749:29;;;;;;:::i;:::-;;:::i;19420:887:17:-;;;;;;:::i;:::-;;:::i;1166:29:20:-;;;;;-1:-1:-1;;;;;1166:29:20;;;28525:614:17;;;;;;:::i;:::-;;:::i;4016:34:20:-;;;;;-1:-1:-1;;;4016:34:20;;;;;;48809:2325:17;;;:::i;:::-;;;;;;;:::i;2431:41:20:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7613:14:504;;7606:22;7588:41;;7660:2;7645:18;;7638:34;;;;7561:18;2431:41:20;7420:258:504;3880:156:17;;;;;;:::i;:::-;-1:-1:-1;;;;;3980:24:17;;;3961:4;3980:24;;;:7;:24;;;;;;;;:51;;;;;:42;;;;:51;;;;;;3880:156;;;;;5380:77:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;48339:312:17;;;;;;:::i;:::-;;:::i;37232:608::-;;;;;;:::i;:::-;;:::i;3404:41:20:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;3463:162:17;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4054:31:20:-;;;;;-1:-1:-1;;;4054:31:20;;;;;;3261:28;;;;;;;;;46785:1088:17;;;;;;:::i;:::-;;:::i;36423:576::-;;;;;;:::i;:::-;;:::i;24752:665::-;;;;;;:::i;:::-;;:::i;4283:376::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;34155:2027::-;;;;;;:::i;:::-;;:::i;:::-;;;;12657:25:504;;;12713:2;12698:18;;12691:34;;;;12630:18;34155:2027:17;12483:248:504;4893:36:20;;;;;;:::i;:::-;;:::i;38073:1406:17:-;;;;;;:::i;:::-;;:::i;51379:198::-;;;:::i;332:33:20:-;;;;;-1:-1:-1;;;;;332:33:20;;;622:38;;;;;-1:-1:-1;;;622:38:20;;;;;;23475:838:17;;;;;;:::i;:::-;;:::i;3501:31:20:-;;;;;;:::i;:::-;;:::i;16810:2346:17:-;;;;;;:::i;:::-;;:::i;1739:50:20:-;;;;;;:::i;:::-;;:::i;41902:1509:17:-;;;;;;:::i;:::-;;:::i;3979:33:20:-;;;;;-1:-1:-1;;;3979:33:20;;;;;;1304:34;;;;;;11531:406:17;;;;;;:::i;:::-;;:::i;6398:2832::-;;;;;;:::i;:::-;;:::i;427:20:20:-;;;;;-1:-1:-1;;;;;427:20:20;;;13958:1505:17;14202:41;;-1:-1:-1;;;14202:41:17;;-1:-1:-1;;;;;2140:32:504;;;14202:41:17;;;2122:51:504;14090:7:17;;14130:12;;14090:7;;14202:32;;;;;;2095:18:504;;14202:41:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14172:71;;14280:9;14293:17;14312;14333:140;14380:7;14395:8;:45;;14437:1;14395:45;;;14406:12;14395:45;14448:1;14457;14466;14333:39;:140::i;:::-;14279:194;;-1:-1:-1;14279:194:17;-1:-1:-1;14279:194:17;;-1:-1:-1;14494:14:17;;-1:-1:-1;14487:3:17;:21;;;;;;;;:::i;:::-;;14479:44;;;;-1:-1:-1;;;14479:44:17;;14967:2:504;14479:44:17;;;14949:21:504;15006:2;14986:18;;;14979:30;-1:-1:-1;;;15025:18:504;;;15018:40;15075:18;;14479:44:17;;;;;;;;;14533:13;;14529:27;;14555:1;14548:8;;;;;;;;;14529:27;14631:31;14674:8;14673:9;:56;;;;-1:-1:-1;;;;;;14687:15:17;;;;;;;:7;:15;;;;;;;;:42;;;;;:33;;;;:42;;;;;;14686:43;14673:56;14669:528;;;-1:-1:-1;14835:19:17;14669:528;;;14964:56;14986:9;14997:12;15011:8;14964:21;:56::i;:::-;14938:82;;15086:8;15085:9;:58;;;;;15120:23;15098:19;:45;15085:58;15081:109;;;-1:-1:-1;15171:19:17;15081:109;15264:23;15290:12;-1:-1:-1;;;;;15290:20:17;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15264:48;;15399:15;15372:23;:42;;:86;;15443:15;15372:86;;;15417:23;15372:86;15365:93;;;;;;;;;13958:1505;;;;;;:::o;20776:402::-;-1:-1:-1;;;;;20975:15:17;;20921:7;20975:15;;;:7;:15;;;;;:24;;;20970:85;;21024:23;21016:32;21009:39;;;;20970:85;21093:43;21119:6;21127:8;21093:25;:43::i;:::-;21158:14;21150:23;21143:30;;20776:402;;;;;;;:::o;40482:1077::-;40557:7;40606:16;:14;:16::i;:::-;40601:111;;40639:66;40644:18;40664:40;40639:4;:66::i;:::-;40632:73;40482:1077;-1:-1:-1;;40482:1077:17:o;40601:111::-;40769:41;;;;;;;;;;;;40838;;;;;;;;2511:7;40838:41;;;2004:13:25;;40769:41:17;;40838;2004:31:25;40885:148:17;;40953:73;40958:26;40986:39;40953:4;:73::i;40885:148::-;41062:41;;;;;;;;;2634:6;41062:41;;;1821:14:25;;-1:-1:-1;41109:142:17;;;41171:73;41176:26;41204:39;41171:4;:73::i;:::-;41164:80;40482:1077;-1:-1:-1;;;;;40482:1077:17:o;41109:142::-;41359:19;;;41384:44;;;;41458:59;;;12657:25:504;;;12713:2;12698:18;;12691:34;;;41458:59:17;;12630:18:504;41458:59:17;;;;;;;;41539:14;41531:23;41524:30;40482:1077;-1:-1:-1;;;;;;40482:1077:17:o;9687:1418::-;-1:-1:-1;;;;;9909:33:17;;9810:7;9909:33;;;:18;:33;;;;;;;;9908:34;9900:59;;;;-1:-1:-1;;;9900:59:17;;15306:2:504;9900:59:17;;;15288:21:504;15345:2;15325:18;;;15318:30;-1:-1:-1;;;15364:18:504;;;15357:42;15416:18;;9900:59:17;15104:336:504;9900:59:17;-1:-1:-1;;;;;10005:22:17;;;;;;:7;:22;;;;;:31;;;10000:92;;10061:23;10053:32;10046:39;;;;10000:92;10141:16;;;;:38;;;;-1:-1:-1;;;;;;10162:17:17;;;;;;:9;:17;;;;;;;;10161:18;10141:38;10137:105;;;10204:30;10196:39;;10137:105;-1:-1:-1;;;;;10292:25:17;;10272:17;10292:25;;;:10;:25;;;;;;10385:14;;;;;:69;;-1:-1:-1;;;;;;10404:33:17;;;;;;:18;:33;;;;;:50;;10447:6;10404:42;:50::i;:::-;10403:51;10385:69;10381:596;;;10464:29;10504:13;-1:-1:-1;;;;;10496:49:17;;:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10464:83;-1:-1:-1;10555:34:17;48794:4;10592:69;;-1:-1:-1;;;10592:69:17;;-1:-1:-1;;;;;2140:32:504;;;10592:69:17;;;2122:51:504;10592:54:17;;;;;;;2095:18:504;;10592:69:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10555:106;;10669:33;10744:21;10714:26;:51;10710:177;;-1:-1:-1;10795:1:17;10710:177;;;10837:50;10861:26;10837:21;:50;:::i;:::-;10809:78;;10710:177;10945:9;10904:38;10932:10;10904:25;:38;:::i;:::-;:50;10896:74;;;;-1:-1:-1;;;10896:74:17;;16042:2:504;10896:74:17;;;16024:21:504;16081:2;16061:18;;;16054:30;-1:-1:-1;;;16100:18:504;;;16093:41;16151:18;;10896:74:17;15840:335:504;10896:74:17;10456:521;;;10381:596;11015:48;11041:13;11056:6;11015:25;:48::i;:::-;11085:14;11070:30;9687:1418;-1:-1:-1;;;;;9687:1418:17:o;43685:1400::-;43778:7;43827:16;:14;:16::i;:::-;43822:120;;43860:75;43865:18;43885:49;43860:4;:75::i;43822:120::-;44046:50;;;;;;;;;;;;44139;;;;;;;;2907:6;44139:50;;;1805:13:25;;44046:50:17;;44139;1805:30:25;44195:180:17;;;44277:91;44282:35;44319:48;44277:4;:91::i;44195:180::-;44418:50;;;;;;;;;3054:6;44418:50;;;1821:14:25;;-1:-1:-1;44474:180:17;;;44556:91;44561:35;44598:48;44556:4;:91::i;44474:180::-;44743:28;;;44828:62;;;;44954:89;;;12657:25:504;;;12713:2;12698:18;;12691:34;;;44954:89:17;;12630:18:504;44954:89:17;12483:248:504;13625:329:17;13785:10;13777:19;;;;:7;:19;;;;;:28;;;13769:48;;;;-1:-1:-1;;;13769:48:17;;16382:2:504;13769:48:17;;;16364:21:504;16421:1;16401:18;;;16394:29;-1:-1:-1;;;16439:18:504;;;16432:37;16486:18;;13769:48:17;16180:330:504;13769:48:17;13881:17;;:37;;;;;13917:1;13902:12;:16;13881:37;13877:73;;;13928:15;;-1:-1:-1;;;13928:15:17;;16717:2:504;13928:15:17;;;16699:21:504;16756:1;16736:18;;;16729:29;-1:-1:-1;;;16774:18:504;;;16767:35;16819:18;;13928:15:17;16515:328:504;13877:73:17;13625:329;;;;:::o;2513:27:20:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2513:27:20;;-1:-1:-1;2513:27:20;:::o;39688:520:17:-;39756:7;39805:16;:14;:16::i;:::-;39800:111;;39838:66;39843:18;39863:40;39838:4;:66::i;39800:111::-;39993:6;;;-1:-1:-1;;;;;40051:18:17;;;-1:-1:-1;;;;;;40051:18:17;;;;;;;40130:36;;;39993:6;;;;17110:34:504;;;17175:2;17160:18;;17153:43;;;;40130:36:17;;17045:18:504;40130:36:17;;;;;;;40188:14;40173:30;39688:520;-1:-1:-1;;;39688:520:17:o;47877:208::-;47933:10;47955:4;47933:27;47925:50;;;;-1:-1:-1;;;47925:50:17;;17409:2:504;47925:50:17;;;17391:21:504;17448:2;17428:18;;;17421:30;-1:-1:-1;;;17467:18:504;;;17460:40;17517:18;;47925:50:17;17207:334:504;47925:50:17;47987:22;;;;;;;47982:99;;48019:11;:18;;-1:-1:-1;;48045:29:17;;;;;47982:99;47877:208::o;27482:422::-;27581:7;27596;27611;27626;27656:9;27673:23;27704:17;27729;27755:78;27795:7;27820:1;27825;27828;27831;27755:39;:78::i;:::-;27648:185;;;;;;;;27855:3;27847:12;;;;;;;;:::i;:::-;27839:60;27861:15;;-1:-1:-1;27878:9:17;;-1:-1:-1;27861:15:17;-1:-1:-1;27482:422:17;-1:-1:-1;;;27482:422:17:o;21604:1436::-;-1:-1:-1;;;;;21852:23:17;;21796:7;21852:23;;;:7;:23;;;;;:32;;;21851:33;;:72;;-1:-1:-1;;;;;;21889:25:17;;;;;;:7;:25;;;;;:34;;;21888:35;21851:72;21847:132;;;21948:23;21940:32;21933:39;;;;21847:132;22057:54;;-1:-1:-1;;;22057:54:17;;-1:-1:-1;;;;;2140:32:504;;;22057:54:17;;;2122:51:504;22033:21:17;;22057:44;;;;;;2095:18:504;;22057:54:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22033:78;;22192:37;22213:14;22192:12;:37::i;:::-;22188:811;;;22264:11;22247:13;:28;;22239:54;;;;-1:-1:-1;;;22239:54:17;;17748:2:504;22239:54:17;;;17730:21:504;17787:2;17767:18;;;17760:30;-1:-1:-1;;;17806:18:504;;;17799:43;17859:18;;22239:54:17;17546:337:504;22239:54:17;22188:811;;;22389:9;22404:17;22425:127;22474:8;22508:1;22521;22532;22543;22425:39;:127::i;:::-;22388:164;;;;;;22571:14;22564:21;;;;;;;;:::i;:::-;:3;:21;;;;;;;;:::i;:::-;;22560:65;;22612:3;22604:12;;;;;;;;:::i;:::-;22597:19;;;;;;;22560:65;22637:14;22633:83;;22678:28;22670:37;;22633:83;22810:16;22829:73;22848:38;;;;;;;;22864:19;;22848:38;;;22888:13;22829:18;:73::i;:::-;22810:92;;22928:8;22914:11;:22;22910:83;;;22963:20;22948:36;;;;;;;;22910:83;22306:693;;;22188:811;-1:-1:-1;23020:14:17;;21604:1436;-1:-1:-1;;;;;;21604:1436:17:o;51764:189::-;51834:10;51826:19;;;;:7;:19;;;;;:28;;;51818:72;;;;-1:-1:-1;;;51818:72:17;;18090:2:504;51818:72:17;;;18072:21:504;18129:2;18109:18;;;18102:30;18168:33;18148:18;;;18141:61;18219:18;;51818:72:17;17888:355:504;51818:72:17;51896:11;:18;;-1:-1:-1;;51896:18:17;51910:4;51896:18;;;51764:189::o;5229:47:20:-;;;;;;;;;;;;2749:29;;;;;;;;;;;;19420:887:17;19523:7;19611:10;;19595:42;;;-1:-1:-1;;;19595:42:17;;;;19523:7;;-1:-1:-1;;;;;19611:10:17;;19595:40;;:42;;;;;;;;;;;;;;19611:10;19595:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19572:65;-1:-1:-1;19648:16:17;;19644:599;;19774:6;;:42;;-1:-1:-1;;;19774:42:17;;-1:-1:-1;;;;;2140:32:504;;;19774:42:17;;;2122:51:504;19744:27:17;;19774:6;;:25;;2095:18:504;;19774:42:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19744:72;-1:-1:-1;19828:24:17;19824:63;;19869:17;19854:33;;;;;;19824:63;19896:17;19915:24;19943:100;19970:38;;;;;;;;19986:19;19970:38;;;20018:17;19943;:100::i;:::-;19895:148;;-1:-1:-1;19895:148:17;-1:-1:-1;20066:18:17;20055:7;:29;;;;;;;;:::i;:::-;;20051:67;;20101:16;20093:25;20086:32;;;;;;;;20051:67;20184:12;20165:16;:31;20161:75;;;20213:22;20205:31;;20161:75;19666:577;;;19644:599;20287:14;20272:30;19420:887;-1:-1:-1;;;;19420:887:17:o;28525:614::-;28734:7;28749;28764;28779;28809:9;28826:23;28857:17;28882;28908:160;28957:7;28982:12;29005;29027;29049:11;28908:39;:160::i;:::-;28801:267;;;;;;;;29090:3;29082:12;;;;;;;;:::i;:::-;29074:60;-1:-1:-1;29096:15:17;;-1:-1:-1;29113:9:17;-1:-1:-1;29124:9:17;-1:-1:-1;;28525:614:17;;;;;;;;;;;:::o;48809:2325::-;48970:22;;;48941:2;48970:22;;;;;;;;;48883:33;;48941:2;;48970:22;;;;;;;;;;-1:-1:-1;;48950:42:17;-1:-1:-1;;;;48950:42:17;49017:10;;;:::i;:::-;;;;48999:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;48999:58:17;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;49063:17:17;49081:10;;;:::i;:::-;;;;49063:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49063:59:17;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;49128:17:17;49146:10;;;:::i;:::-;;;;49128:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49128:57:17;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;49191:17:17;49209:10;;;:::i;:::-;;;;49191:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49191:61:17;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;49258:17:17;49276:10;;;:::i;:::-;;;;49258:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49258:61:17;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;49325:17:17;49343:10;;;:::i;:::-;;;;49325:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49325:61:17;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;49392:17:17;49410:10;;;:::i;:::-;;;;49392:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49392:66:17;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;49464:17:17;49482:10;;;:::i;:::-;;;;49464:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49464:70:17;;;:29;;;;;;;;;;;:70;-1:-1:-1;;;49540:17:17;49558:10;;;:::i;:::-;;;;49540:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49540:70:17;;;:29;;;;;;;;;;;:70;-1:-1:-1;;;49616:17:17;49634:10;;;:::i;:::-;;;;49616:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49616:67:17;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;49689:17:17;49707:10;;;:::i;:::-;;;;49689:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49689:68:17;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;49763:17:17;49781:10;;;:::i;:::-;;;;49763:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49763:77:17;;;:29;;;;;;;;;;;:77;-1:-1:-1;;;49846:17:17;49864:10;;;:::i;:::-;;;;49846:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49846:66:17;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;49918:17:17;49936:10;;;:::i;:::-;;;;49918:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49918:58:17;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;49982:17:17;50000:10;;;:::i;:::-;;;;49982:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;49982:56:17;;;:29;;;;;;;;;;;:56;-1:-1:-1;;;50044:17:17;50062:10;;;:::i;:::-;;;;50044:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50044:57:17;;;:29;;;;;;;;;;;:57;-1:-1:-1;;;50107:17:17;50125:10;;;:::i;:::-;;;;50107:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50107:59:17;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;50172:17:17;50190:10;;;:::i;:::-;;;;50172:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50172:58:17;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;50236:17:17;50254:10;;;:::i;:::-;;;;50236:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50236:59:17;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;50301:17:17;50319:10;;;:::i;:::-;;;;50301:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50301:64:17;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;50371:17:17;50389:10;;;:::i;:::-;;;;50371:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50371:64:17;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;50441:17:17;50459:10;;;:::i;:::-;;;;50441:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50441:68:17;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;50515:17:17;50533:10;;;:::i;:::-;;;;50515:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50515:58:17;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;50579:17:17;50597:10;;;:::i;:::-;;;;50579:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50579:61:17;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;50646:17:17;50664:10;;;:::i;:::-;;;;50646:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50646:56:17;;;:29;;;;;;;;;;;:56;-1:-1:-1;;;50708:17:17;50726:10;;;:::i;:::-;;;;50708:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50708:65:17;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;50779:17:17;50797:10;;;:::i;:::-;;;;50779:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50779:75:17;;;:29;;;;;;;;;;;:75;-1:-1:-1;;;50860:17:17;50878:10;;;:::i;:::-;;;;50860:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50860:65:17;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;50931:17:17;50949:10;;;:::i;:::-;;;;50931:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;50931:64:17;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;51001:17:17;51019:10;;;:::i;:::-;;;;51001:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;51001:67:17;;;:29;;;;;;;;;;;:67;51083:13;;;;51075:54;;;;-1:-1:-1;;;51075:54:17;;18765:2:504;51075:54:17;;;18747:21:504;18804:2;18784:18;;;18777:30;18843;18823:18;;;18816:58;18891:18;;51075:54:17;18563:352:504;51075:54:17;48918:2216;48809:2325;:::o;48339:312::-;-1:-1:-1;;;;;48423:24:17;;48398:4;48423:24;;;:7;:24;;;;;:49;;;:54;:109;;;;-1:-1:-1;;;;;;48487:37:17;;;;;;:20;:37;;;;;;;;:45;;:37;:45;48423:109;:223;;;;;48542:96;48547:63;48552:6;-1:-1:-1;;;;;48552:28:17;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48584:6;-1:-1:-1;;;;;48584:23:17;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48547:4;:63::i;:::-;48612:6;-1:-1:-1;;;;;48612:23:17;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48542:96;48642:4;48542:104;48410:236;48339:312;-1:-1:-1;;48339:312:17:o;37232:608::-;37298:7;37347:16;:14;:16::i;:::-;37342:120;;37380:75;37385:18;37405:49;37380:4;:75::i;37342:120::-;37532:16;;;;:27;;;;;;37528:78;;;37584:14;37576:23;;37528:78;37669:16;:26;;-1:-1:-1;;37669:26:17;;;;;;;;;;37762:36;;154:41:504;;;37762:36:17;;142:2:504;127:18;37762:36:17;;;;;;;;37820:14;37812:23;;3463:162;-1:-1:-1;;;;;3576:22:17;;3548:25;3576:22;;;:13;:22;;;;;;;;3548:50;;;;;;;;;;;;;;;;;3524:16;;3548:25;:50;;3576:22;3548:50;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;3548:50:17;;;;;;;;;;;;;;;;-1:-1:-1;3548:50:17;;3463:162;-1:-1:-1;;;;;;;3463:162:17:o;46785:1088::-;46963:7;47012:16;:14;:16::i;:::-;47007:109;;47045:64;47050:18;47070:38;47045:4;:64::i;:::-;47038:71;;;;47007:109;47247:19;;;-1:-1:-1;;;;;;;47272:26:17;;;;;;;-1:-1:-1;47376:10:17;;47360:87;;-1:-1:-1;;;47360:87:17;;47247:19;;;;;;;-1:-1:-1;;;;;;;47376:10:17;;47360:40;;:87;;47401:12;;47415:15;;;;47432:14;;;;47360:87;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;47508:19;:44;;-1:-1:-1;;;;47508:44:17;-1:-1:-1;;;47508:44:17;;;;;;;47335:113;-1:-1:-1;;47618:22:17;47335:113;47618:14;:22::i;:::-;47604:36;;47663:10;;;;;;;;-1:-1:-1;;;;;47663:10:17;-1:-1:-1;;;;;47647:47:17;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:85;;-1:-1:-1;;;47647:85:17;;47726:4;47647:85;;;2122:51:504;-1:-1:-1;;;;;47647:70:17;;;;;;;2095:18:504;;47647:85:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;47790:14:17;;-1:-1:-1;47782:23:17;;-1:-1:-1;;47782:23:17;;47775:3;:30;:93;;47865:3;47775:93;;;47808:54;47829:6;47837:24;47808:20;:54::i;:::-;47768:100;46785:1088;-1:-1:-1;;;;;;;;;;46785:1088:17:o;36423:576::-;36494:7;36517:16;:14;:16::i;:::-;36509:35;;;;-1:-1:-1;;;36509:35:17;;20448:2:504;36509:35:17;;;20430:21:504;20487:1;20467:18;;;20460:29;-1:-1:-1;;;20505:18:504;;;20498:36;20551:18;;36509:35:17;20246:329:504;36509:35:17;36601:11;-1:-1:-1;;;;;36586:48:17;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;36578:84;;;;-1:-1:-1;;;36578:84:17;;21032:2:504;36578:84:17;;;21014:21:504;21071:2;21051:18;;;21044:30;-1:-1:-1;;;21090:18:504;;;21083:51;21151:18;;36578:84:17;20830:345:504;36578:84:17;36719:9;36714:113;36738:19;:26;36734:30;;36714:113;;;36794:19;36814:1;36794:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;36779:37:17;;;36794:22;;36779:37;;36771:56;;;;-1:-1:-1;;;36771:56:17;;21382:2:504;36771:56:17;;;21364:21:504;21421:1;21401:18;;;21394:29;-1:-1:-1;;;21439:18:504;;;21432:36;21485:18;;36771:56:17;21180:329:504;36771:56:17;36766:3;;;;:::i;:::-;;;;36714:113;;;-1:-1:-1;36873:19:17;:37;;;;;;;-1:-1:-1;36873:37:17;;;;;;;;-1:-1:-1;;;;;;36873:37:17;-1:-1:-1;;;;;36873:37:17;;;;;;;;36921:36;;2122:51:504;;;36921:36:17;;2110:2:504;2095:18;36921:36:17;1976:203:504;24752:665:17;24989:22;;24890:7;;-1:-1:-1;;;24989:22:17;;;;24988:23;24980:52;;;;-1:-1:-1;;;24980:52:17;;21856:2:504;24980:52:17;;;21838:21:504;21895:2;21875:18;;;21868:30;-1:-1:-1;;;21914:18:504;;;21907:46;21970:18;;24980:52:17;21654:340:504;24980:52:17;25151:15;25169:50;25191:6;25199:3;25204:14;25169:21;:50::i;:::-;25151:68;-1:-1:-1;25229:34:17;;25225:69;;25280:7;-1:-1:-1;25273:14:17;;25225:69;25332:43;25358:6;25366:3;25371;25332:25;:43::i;:::-;25397:14;25382:30;24752:665;-1:-1:-1;;;;;;24752:665:17:o;4283:376::-;3126:10;;;3110:86;;-1:-1:-1;;;3110:86:17;;4369:16;;-1:-1:-1;;;;;3126:10:17;;;;3110:35;;:86;;3154:4;;3161:10;;3154:4;;3188:7;;-1:-1:-1;;;;;;3188:7:17;;3110:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3102:113;;;;-1:-1:-1;;;3102:113:17;;22687:2:504;3102:113:17;;;22669:21:504;22726:2;22706:18;;;22699:30;-1:-1:-1;;;22745:18:504;;;22738:44;22799:18;;3102:113:17;22485:338:504;3102:113:17;4407:14;;4393:11:::1;4407:14:::0;4455:18:::1;::::0;::::1;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;-1:-1:-1;4455:18:17::1;;4428:45;;4484:9;4479:155;4503:3;4499:1;:7;4479:155;;;4521:14;4546:7;4554:1;4546:10;;;;;;;;:::i;:::-;;;;;;;4521:36;;4587:39;4607:6;4615:10;4587:19;:39::i;:::-;4579:48;;;;;;;;:::i;:::-;4566:7;4574:1;4566:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;:61;-1:-1:-1;4508:3:17;::::1;::::0;::::1;:::i;:::-;;;;4479:155;;;-1:-1:-1::0;4647:7:17;-1:-1:-1;;3221:1:17::1;4283:376:::0;;;:::o;34155:2027::-;34440:6;;:50;;-1:-1:-1;;;34440:50:17;;-1:-1:-1;;;;;2140:32:504;;;34440:50:17;;;2122:51:504;34319:7:17;;;;;;34440:6;;;;:25;;2095:18:504;;34440:50:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34530:6;;:52;;-1:-1:-1;;;34530:52:17;;-1:-1:-1;;;;;2140:32:504;;;34530:52:17;;;2122:51:504;34408:82:17;;-1:-1:-1;34496:31:17;;34530:6;;;;:25;;2095:18:504;;34530:52:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;34496:86;-1:-1:-1;34592:26:17;;;:58;;-1:-1:-1;34622:28:17;;34592:58;34588:117;;;34676:17;34696:1;34660:38;;;;;;;;34588:117;35062:24;35097:16;35062:52;;35120:28;35151:16;-1:-1:-1;;;;;35151:36:17;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35120:69;;35195:19;35220:20;-1:-1:-1;;;;;;;;;;;;;;35220:20:17;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;35297:34:17;35334:16;-1:-1:-1;;;;;35334:43:17;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35297:82;;35385:29;35417:16;-1:-1:-1;;;;;35417:38:17;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;35385:72;;35623:31;35657:166;35669:100;35674:47;;;;;;;;35690:28;;35674:47;;;35723:45;;;;;;;;35739:26;35723:45;;;35669:4;:100::i;:::-;35777:40;;;;;;;;35793:21;35777:40;;;35657:4;:166::i;:::-;35623:200;;35842:68;35847:20;35869:40;;;;;;;;35885:21;35869:40;;;35842:4;:68::i;:::-;35830:80;;35930:89;35935:42;;;;;;;;35951:23;35935:42;;;35979:39;;;;;;;;35995:20;35979:39;;;35930:4;:89::i;:::-;35916:103;;36033:28;36038:9;36049:11;36033:4;:28::i;:::-;36025:36;;36082:44;36101:5;36108:17;36082:18;:44::i;:::-;36148:14;;-1:-1:-1;36068:58:17;-1:-1:-1;;;;;;;;;;;;34155:2027:17;;;;;;;:::o;4893:36:20:-;;;;;;;;;;;;38073:1406:17;38178:7;38227:16;:14;:16::i;:::-;38222:115;;38260:70;38265:18;38285:44;38260:4;:70::i;38222:115::-;38392:9;38387:1051;38407:20;;;38387:1051;;;38442:16;38461:9;;38471:1;38461:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;38442:31;;38486:8;;38495:1;38486:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;38482:950;;;-1:-1:-1;;;;;38570:19:17;;;;;;:9;:19;;;;;;;;38565:182;;-1:-1:-1;;;;;38603:19:17;;;;;;:9;:19;;;;;:26;;-1:-1:-1;;38603:26:17;38625:4;38603:26;;;;;;38641:14;:29;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;38641:29:17;;;;;;;38711:21;:25;;38625:4;38711:25;:::i;:::-;-1:-1:-1;;;;;38682:26:17;;;;;;:16;:26;;;;;:54;38565:182;38482:950;;;-1:-1:-1;;;;;38824:19:17;;;;;;:9;:19;;;;;;;;38820:604;;;38902:14;38917:21;;:25;;38941:1;;38917:25;:::i;:::-;38902:41;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;38872:26:17;;;;;:16;:26;;;;;;;;38857:14;:42;;38902:41;;;;;38857:14;:42;;;;;;:::i;:::-;;;;;;;;;:86;;;;;-1:-1:-1;;;;;38857:86:17;;;;;-1:-1:-1;;;;;38857:86:17;;;;;;39015:14;:20;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;39015:20:17;;;;;-1:-1:-1;;;;;;39015:20:17;;;;;;;;;-1:-1:-1;;;;;39132:26:17;;;;:16;:26;;;;;;;;39086:14;:42;;39132:26;;39015:20;39132:26;;39086:42;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;39086:42:17;;;39069:60;;;;;;;;;;;;;;;:89;;;;39224:26;;;;;:16;:26;;;;;:30;;;39322:9;:19;;;;:27;;-1:-1:-1;;39322:27:17;;;38820:604;-1:-1:-1;38429:3:17;;;;:::i;:::-;;;;38387:1051;;;-1:-1:-1;39459:14:17;39451:23;;51379:198;51450:10;51442:19;;;;:7;:19;;;;;:28;;;51434:73;;;;-1:-1:-1;;;51434:73:17;;23162:2:504;51434:73:17;;;23144:21:504;;;23181:18;;;23174:30;23240:34;23220:18;;;23213:62;23292:18;;51434:73:17;22960:356:504;51434:73:17;51521:11;;;;51513:34;;;;-1:-1:-1;;;51513:34:17;;23523:2:504;51513:34:17;;;23505:21:504;23562:2;23542:18;;;23535:30;-1:-1:-1;;;23581:18:504;;;23574:40;23631:18;;51513:34:17;23321:334:504;51513:34:17;51553:11;:19;;-1:-1:-1;;51553:19:17;;;51379:198::o;23475:838::-;23756:19;;23657:7;;-1:-1:-1;;;23756:19:17;;;;23755:20;23747:46;;;;-1:-1:-1;;;23747:46:17;;23862:2:504;23747:46:17;;;23844:21:504;23901:2;23881:18;;;23874:30;-1:-1:-1;;;23920:18:504;;;23913:43;23973:18;;23747:46:17;23660:337:504;23747:46:17;-1:-1:-1;;;;;23841:25:17;;;;;;:7;:25;;;;;:34;;;23840:35;;:72;;-1:-1:-1;;;;;;23880:23:17;;;;;;:7;:23;;;;;:32;;;23879:33;23840:72;23836:132;;;23937:23;23929:32;;23836:132;24080:14;-1:-1:-1;;;;;24072:35:17;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24029:80:17;24037:16;-1:-1:-1;;;;;24029:37:17;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;24029:80:17;;24025:143;;24134:26;24126:35;;24025:143;24206:65;24232:16;24250:8;24260:10;24206:25;:65::i;3501:31:20:-;;;;;;;;;;;;16810:2346:17;-1:-1:-1;;;;;17031:28:17;;16932:7;17031:28;;;:20;:28;;;;;;;;17030:29;17022:56;;;;-1:-1:-1;;;17022:56:17;;24486:2:504;17022:56:17;;;24468:21:504;24525:2;24505:18;;;24498:30;-1:-1:-1;;;24544:18:504;;;24537:44;24598:18;;17022:56:17;24284:338:504;17022:56:17;-1:-1:-1;;;;;17124:15:17;;;;;;:7;:15;;;;;:24;;;17119:85;;17173:23;17165:32;;17119:85;-1:-1:-1;;;;;17215:15:17;;;;;;;:7;:15;;;;;;;;:43;;;;;:33;;;;:43;;;;;;17210:492;;17347:10;-1:-1:-1;;;;;17347:20:17;;;17339:40;;;;-1:-1:-1;;;17339:40:17;;24829:2:504;17339:40:17;;;24811:21:504;24868:1;24848:18;;;24841:29;-1:-1:-1;;;24886:18:504;;;24879:37;24933:18;;17339:40:17;24627:330:504;17339:40:17;17435:9;17447:50;17475:10;17488:8;17447:19;:50::i;:::-;17435:62;-1:-1:-1;17516:14:17;17509:3;:21;;;;;;;;:::i;:::-;;17505:65;;17557:3;17549:12;;;;;;;;:::i;:::-;17542:19;;;;;17505:65;-1:-1:-1;;;;;17651:15:17;;;;;;;:7;:15;;;;;;;;:43;;;;;:33;;;;:43;;;;;;17644:51;;;;:::i;:::-;17260:442;17210:492;17755:6;;:42;;-1:-1:-1;;;17755:42:17;;-1:-1:-1;;;;;2140:32:504;;;17755:42:17;;;2122:51:504;17755:6:17;;;;:25;;2095:18:504;;17755:42:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17751:101;;17827:17;17819:26;;17751:101;17903:16;;;;:40;;;;-1:-1:-1;;;;;;17924:19:17;;;;;;:9;:19;;;;;;;;17923:20;17903:40;17899:107;;;17968:30;17960:39;;17899:107;-1:-1:-1;;;;;18056:18:17;;18036:17;18056:18;;;:10;:18;;;;;;18142:14;;;;;:64;;-1:-1:-1;;;;;;18161:26:17;;;;;;:18;:26;;;;;:45;;18197:8;18161:35;:45::i;:::-;18160:46;18142:64;18138:553;;;18216:20;18247:6;-1:-1:-1;;;;;18239:35:17;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18216:60;-1:-1:-1;18284:35:17;48794:4;18322:63;;-1:-1:-1;;;18322:63:17;;-1:-1:-1;;;;;2140:32:504;;;18322:63:17;;;2122:51:504;18322:55:17;;;;;;;2095:18:504;;18322:63:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18284:101;;18393:34;18470:12;18439:27;:43;18435:163;;-1:-1:-1;18513:1:17;18435:163;;;18556:42;18571:27;18556:12;:42;:::i;:::-;18527:71;;18435:163;18659:9;18615:41;18644:12;18615:26;:41;:::i;:::-;:53;18607:77;;;;-1:-1:-1;;;18607:77:17;;25296:2:504;18607:77:17;;;25278:21:504;25335:2;25315:18;;;25308:30;-1:-1:-1;;;25354:18:504;;;25347:41;25405:18;;18607:77:17;25094:335:504;18607:77:17;18208:483;;;18138:553;18729:43;18755:6;18763:8;18729:25;:43::i;:::-;18891:74;;-1:-1:-1;;;18891:74:17;;-1:-1:-1;;;;;25765:15:504;;;18891:74:17;;;25747:34:504;25817:15;;25797:18;;;25790:43;18853:11:17;25849:18:504;;;25842:34;;;25892:18;;;25885:34;;;25935:19;;;25928:35;;;18853:11:17;;;18891:4;;:36;;25681:19:504;;18891:74:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18852:113;;;;;;18990:14;18982:23;;;;;;;;:::i;:::-;18975:3;:30;18971:61;;-1:-1:-1;19022:3:17;-1:-1:-1;19015:10:17;;-1:-1:-1;19015:10:17;18971:61;19041:13;;19037:78;;19079:28;19064:44;;;;;;;19037:78;19136:14;19121:30;16810:2346;-1:-1:-1;;;;;;;16810:2346:17:o;1739:50:20:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1739:50:20;;-1:-1:-1;1739:50:20;;-1:-1:-1;1739:50:20:o;41902:1509:17:-;42001:7;42050:16;:14;:16::i;:::-;42045:116;;42083:71;42088:18;42108:45;42083:4;:71::i;:::-;42076:78;;;;42045:116;-1:-1:-1;;;;;42222:24:17;;42198:21;42222:24;;;:7;:24;;;;;42257:15;;;;42252:118;;42289:74;42294:23;42319:43;42289:4;:74::i;:::-;42282:81;;;;;42252:118;42412:46;;;;;;;;;;;;42526;;;;;;;;2763:6;42526:46;;42412;42582;42526;42412;1821:14:25;1805:13;;:30;;1707:133;42582:46:17;42578:157;;;42645:83;42650:31;42683:44;42645:4;:83::i;:::-;42638:90;;;;;;;42578:157;42798:32;;;;;:74;;-1:-1:-1;42834:6:17;;:33;;-1:-1:-1;;;42834:33:17;;-1:-1:-1;;;;;2140:32:504;;;42834:33:17;;;2122:51:504;42834:6:17;;;;:25;;2095:18:504;;42834:33:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:38;42798:74;42794:174;;;42889:72;42894:17;42913:47;42889:4;:72::i;42794:174::-;43095:31;;;;;43132:61;;;;43284:85;;;-1:-1:-1;;;;;26584:32:504;;26566:51;;26648:2;26633:18;;26626:34;;;26676:18;;;26669:34;;;43284:85:17;;26554:2:504;26539:18;43284:85:17;;;;;;;43391:14;43376:30;41902:1509;-1:-1:-1;;;;;;;41902:1509:17:o;11531:406::-;11653:7;11668:15;11686:53;11708:6;11716:8;11726:12;11686:21;:53::i;:::-;11668:71;-1:-1:-1;11749:34:17;;11745:69;;11800:7;-1:-1:-1;11793:14:17;;6398:2832;6481:7;3126:10;;3110:86;;-1:-1:-1;;;3110:86:17;;-1:-1:-1;;;;;3126:10:17;;;;3110:35;;:86;;3154:4;;3161:10;;3154:4;;-1:-1:-1;;;;;;3188:7:17;;;;3110:86;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3102:113;;;;-1:-1:-1;;;3102:113:17;;22687:2:504;3102:113:17;;;22669:21:504;22726:2;22706:18;;;22699:30;-1:-1:-1;;;22745:18:504;;;22738:44;22799:18;;3102:113:17;22485:338:504;3102:113:17;-1:-1:-1;;;;;6516:22:17;::::1;;::::0;;;:7:::1;:22;::::0;;;;:31;::::1;;6508:67;;;::::0;-1:-1:-1;;;6508:67:17;;26916:2:504;6508:67:17::1;::::0;::::1;26898:21:504::0;26955:2;26935:18;;;26928:30;26994:25;26974:18;;;26967:53;27037:18;;6508:67:17::1;26714:347:504::0;6508:67:17::1;6760:37;::::0;-1:-1:-1;;;6760:37:17;;6786:10:::1;6760:37;::::0;::::1;2122:51:504::0;6607:13:17;;6582:14:::1;::::0;;;;;-1:-1:-1;;;;;6760:25:17;::::1;::::0;::::1;::::0;2095:18:504;;6760:37:17::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6701:96;;;;;;;6811:4;6819:1;6811:9;6803:33;;;::::0;-1:-1:-1;;;6803:33:17;;27268:2:504;6803:33:17::1;::::0;::::1;27250:21:504::0;27307:2;27287:18;;;27280:30;-1:-1:-1;;;27326:18:504;;;27319:41;27377:18;;6803:33:17::1;27066:335:504::0;6803:33:17::1;6923:15:::0;;6919:115:::1;;6955:72;6960:28;6990:36;6955:4;:72::i;6919:115::-;7116:15;7134:60;7156:13;7171:10;7183;7134:21;:60::i;:::-;7116:78:::0;-1:-1:-1;7204:12:17;;7200:111:::1;;7233:71;7244:15;7261:33;7296:7;7233:10;:71::i;:::-;7226:78:::0;4283:376;-1:-1:-1;;;;;;;4283:376:17:o;7200:111::-:1;-1:-1:-1::0;;;;;7347:22:17;::::1;7317:27;7347:22:::0;;;:7:::1;:22;::::0;;;;;;;7483:10:::1;7452:42:::0;;:30:::1;::::0;::::1;:42:::0;;;;;;;::::1;;7447:94;;7519:14;7504:30:::0;4283:376;-1:-1:-1;;;;;;;;4283:376:17:o;7447:94::-:1;7634:10;7603:42;::::0;;;:30:::1;::::0;::::1;:42;::::0;;;;;;;7596:49;;-1:-1:-1;;7596:49:17::1;::::0;;7790:13:::1;:25:::0;;;;;7757:58;;;;;;::::1;::::0;;;;;;;;;;;;7790:25;;7757:58;;::::1;7790:25:::0;7757:58;;::::1;;;;;;;;;;;;;;;;::::0;;-1:-1:-1;;;;;7757:58:17::1;::::0;;;;;::::1;::::0;::::1;;::::0;;::::1;;;;-1:-1:-1::0;;7835:20:17;;7757:58;;-1:-1:-1;7835:20:17;;-1:-1:-1;7821:11:17::1;::::0;-1:-1:-1;;7891:144:17::1;7915:3;7911:1;:7;7891:144;;;7965:13;-1:-1:-1::0;;;;;7937:42:17::1;:13;7951:1;7937:16;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;7937:42:17::1;;7933:96;;;8004:1;7991:14;;8015:5;;7933:96;7920:3:::0;::::1;::::0;::::1;:::i;:::-;;;;7891:144;;;;8153:3;8140:10;:16;8133:24;;;;:::i;:::-;8293:10;8248:28;8279:25:::0;;;:13:::1;:25;::::0;;;;8346:17;;8279:25;;8346:21:::1;::::0;8366:1:::1;::::0;8346:21:::1;:::i;:::-;8335:33;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1::0;;;;;8335:33:17::1;8310:10;8321;8310:22;;;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1::0;;;;;8310:58:17::1;;;;;-1:-1:-1::0;;;;;8310:58:17::1;;;;;;8374:10;:16;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;-1:-1:-1;;8374:16:17;;;;;-1:-1:-1;;;;;;8374:16:17::1;::::0;;;;;8486:17;;8482:647:::1;;8562:12;8575:19:::0;;:23:::1;::::0;8597:1:::1;::::0;8575:23:::1;:::i;:::-;8562:37;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;8547:10:::1;8531:27:::0;;:15:::1;:27:::0;;;;;;;;8518:12:::1;:41:::0;;-1:-1:-1;;;;;8562:37:17;;::::1;::::0;8518:12;;8531:27;8518:41;::::1;;;;;:::i;:::-;;;;;;;;;:81;;;;;-1:-1:-1::0;;;;;8518:81:17::1;;;;;-1:-1:-1::0;;;;;8518:81:17::1;;;;;;8667:12;:18;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;-1:-1:-1;;8667:18:17;;;;;-1:-1:-1;;;;;;8667:18:17::1;::::0;;;;;;;;8792:10:::1;8776:27:::0;;:15:::1;:27:::0;;;;;;;;8731:12:::1;:41:::0;;8776:27;;8667:18;8776:27;;8731:41;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;;::::1;::::0;-1:-1:-1;;;;;8731:41:17::1;8715:58:::0;;;;::::1;::::0;;;;;;;;;;:88;;;;8880:10:::1;8864:27:::0;;:15:::1;:27:::0;;;;;:31;;;8956:9:::1;:21:::0;;;;;:29;;-1:-1:-1;;8956:29:17::1;::::0;;8482:647:::1;9140:48;::::0;;-1:-1:-1;;;;;17128:15:504;;17110:34;;9177:10:17::1;17175:2:504::0;17160:18;;17153:43;9140:48:17::1;::::0;17045:18:504;9140:48:17::1;;;;;;;9210:14;9195:30:::0;6398:2832;-1:-1:-1;;;;;;;;;;;;6398:2832:17:o;29801:3844::-;30020:5;30033:7;30048;30063;30085:37;;:::i;:::-;-1:-1:-1;;;;;30170:35:17;;;30166:121;;30241:6;;:39;;-1:-1:-1;;;30241:39:17;;-1:-1:-1;;;;;2140:32:504;;;30241:39:17;;;2122:51:504;30241:6:17;;;;:25;;2095:18:504;;30241:39:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30215:23;;;:65;30166:121;30338:9;30333:2959;-1:-1:-1;;;;;30357:22:17;;;;;;:13;:22;;;;;:29;30353:33;;30333:2959;;;-1:-1:-1;;;;;30414:22:17;;;;;;:13;:22;;;;;:25;;30437:1;;30414:25;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;30414:25:17;;;30401:38;;;30619:58;;-1:-1:-1;;;30619:58:17;;2140:32:504;;;30619:58:17;;;2122:51:504;30414:25:17;30619:29;;2095:18:504;;30619:58:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;30590:25;;;30543:134;30570:18;;;30543:134;30550:18;;;30543:134;;-1:-1:-1;30691:9:17;;30687:167;;30813:20;30835:1;30838;30841;30805:38;;;;;;;;;;;;;30687:167;-1:-1:-1;30903:72:17;;;;;;;;;30935:10;;-1:-1:-1;;;;;30919:28:17;;;-1:-1:-1;30919:28:17;;;:7;:28;;;;;:53;;;30903:72;;30879:21;;;:96;;;;31005:44;;;;;;;-1:-1:-1;;;31021:25:17;31005:44;;30985:17;;;:64;31136:6;;31162:10;;31136:37;;-1:-1:-1;;;31136:37:17;;2140:32:504;;;31136:37:17;;;2122:51:504;31136:6:17;;:25;;2095:18:504;;31136:37:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31109:24;;;:64;;;31183:93;;31238:17;31257:1;31260;31263;31230:35;;;;;;;;;;;;31183:93;31304:43;;;;;;;;;31320:24;;;;31304:43;;31285:16;;;:62;31478:21;;;;31501:17;;;;31468:70;;31473:46;;:4;:46::i;:::-;31521:4;:16;;;31468:4;:70::i;:::-;31447:18;;;:91;48794:4;31752:10;;31687:156;;-1:-1:-1;;;31687:156:17;;-1:-1:-1;;;;;28047:15:504;;;31687:156:17;;;28029:34:504;28099:15;;;28079:18;;;28072:43;31798:16:17;;;28131:18:504;;;28124:50;28210:15;;;28190:18;;;28183:43;31687:53:17;;;;;27963:19:504;;31687:156:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;31654:30;;;:189;31964:18;;;;31984;;;;31914:28;;31945:58;;:18;:58::i;:::-;31914:89;;32040:4;:30;;;32017:20;:53;32013:122;;;-1:-1:-1;32105:30:17;;;;32013:122;32167:20;32145:4;:18;;:42;;;;;;;:::i;:::-;;;-1:-1:-1;;32328:16:17;;;;32354:18;;;;32382:25;;;;32293:122;;32328:16;32354:18;32293:25;:122::i;:::-;32265:25;;;:150;32488:10;;-1:-1:-1;;;;;32488:26:17;;;;;;32484:802;;;32643:126;32680:4;:18;;;32710:12;32734:4;:25;;;32643;:126::i;:::-;32615:25;;;:154;;;32932:16;;;;32895:124;;32960:12;;32895:25;:124::i;:::-;32867:25;;;:152;33071:16;;;;33030:19;;33052:49;;33089:11;33052:18;:49::i;:::-;33030:71;;33130:4;:25;;;33115:11;:40;33111:167;;33197:1;33169:25;;;:29;33111:167;;;33256:11;33227:4;:25;;:40;;;;;;;:::i;:::-;;;-1:-1:-1;33111:167:17;32516:770;32484:802;30388:3;;;;:::i;:::-;;;;30333:2959;;;;33390:4;:25;;;33369:4;:18;;;:46;33365:276;;;33449:18;;;;33490:25;;;;33433:14;;33449:18;33469:46;;33449:18;33469:46;:::i;:::-;33517:1;33425:94;;;;;;;;;;;33365:276;33548:14;33564:4;:18;;;33584:1;33615:4;:18;;;33587:4;:25;;;:46;;;;:::i;:::-;33540:94;;;;;;;;;;;15586:808;15712:7;15731:14;15727:28;;-1:-1:-1;15754:1:17;15747:8;;15727:28;15894:6;;:39;;-1:-1:-1;;;15894:39:17;;-1:-1:-1;;;;;2140:32:504;;;15894:39:17;;;2122:51:504;15867:24:17;;15894:6;;:25;;2095:18:504;;15894:39:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15867:66;;15966:1;15947:16;:20;15939:40;;;;-1:-1:-1;;;15939:40:17;;28439:2:504;15939:40:17;;;28421:21:504;28478:1;28458:18;;;28451:29;-1:-1:-1;;;28496:18:504;;;28489:37;28543:18;;15939:40:17;28237:330:504;15939:40:17;16076:8;16071:199;;-1:-1:-1;;;;;16129:30:17;;16094:32;16129:30;;;:7;:30;;;;;:55;;;16259:4;16212:43;16239:16;16129:55;16212:43;:::i;:::-;16211:52;;;;:::i;:::-;16192:71;;16086:184;16071:199;16373:16;16353;:9;16365:4;16353:16;:::i;:::-;16352:37;;;;:::i;25991:234::-;26080:9;26075:145;26099:19;:26;26095:30;;26075:145;;;26153:19;26173:1;26153:22;;;;;;;;:::i;:::-;;;;;;;;;;;26138:82;;-1:-1:-1;;;26138:82:17;;-1:-1:-1;;;;;17128:15:504;;;26138:82:17;;;17110:34:504;17180:15;;;17160:18;;;17153:43;26153:22:17;;;;26138:64;;17045:18:504;;26138:82:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26127:3;;;;;:::i;:::-;;;;26075:145;;;;25991:234;;:::o;855:174:20:-;938:5;;904:4;;-1:-1:-1;;;;;938:5:20;924:10;:19;:37;;;;-1:-1:-1;947:14:20;;-1:-1:-1;;;947:14:20;;;;924:37;923:101;;;-1:-1:-1;989:10:20;;-1:-1:-1;;;;;989:10:20;967;:33;:56;;;;-1:-1:-1;1004:19:20;;-1:-1:-1;;;1004:19:20;;;;967:56;916:108;;855:174;:::o;2065:151:23:-;2126:7;2146:39;2162:3;2154:12;;;;;;;;:::i;:::-;2176:4;2168:13;;;;;;;;:::i;:::-;2146:39;;;29486:25:504;;;29542:2;29527:18;;29520:34;;;;2183:1:23;29570:18:504;;;29563:34;29474:2;29459:18;2146:39:23;;;;;;;2207:3;2199:12;;;;;;;;:::i;8852:165:487:-;-1:-1:-1;;;;;8985:23:487;;8932:4;4343:19;;;:12;;;:19;;;;;;:24;;8955:55;4247:127;25604:234:17;25693:9;25688:145;25712:19;:26;25708:30;;25688:145;;;25766:19;25786:1;25766:22;;;;;;;;:::i;:::-;;;;;;;;;;;25751:82;;-1:-1:-1;;;25751:82:17;;-1:-1:-1;;;;;17128:15:504;;;25751:82:17;;;17110:34:504;17180:15;;;17160:18;;;17153:43;25766:22:17;;;;25751:64;;17045:18:504;;25751:82:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25740:3;;;;;:::i;:::-;;;;25688:145;;1117:167:25;1198:7;1213:18;1234:15;1239:1;1242:6;1234:4;:15::i;:::-;1213:36;;1262:17;1271:7;1262:8;:17::i;2379:288:24:-;2459:9;2470:7;2486:13;2501:18;2523:20;2533:1;2536:6;2523:9;:20::i;:::-;2485:58;;-1:-1:-1;2485:58:24;-1:-1:-1;2560:18:24;2553:3;:25;;;;;;;;:::i;:::-;;2549:61;;-1:-1:-1;2596:3:24;-1:-1:-1;2601:1:24;;-1:-1:-1;2588:15:24;;2549:61;2624:18;2644:17;2653:7;2644:8;:17::i;:::-;2616:46;;;;;;2379:288;;;;;;:::o;3021:117:25:-;3080:7;3102:31;3107:1;3110;3102:31;;;;;;;;;;;;;-1:-1:-1;;;3102:31:25;;;:4;:31::i;45385:1069:17:-;45443:7;45492:16;:14;:16::i;:::-;45487:109;;45525:64;45530:18;45550:38;45525:4;:64::i;45487:109::-;-1:-1:-1;;;;;45639:24:17;;;;;;:7;:24;;;;;:33;;;45635:129;;;45689:68;45694:27;45723:33;45689:4;:68::i;45635:129::-;45859:4;-1:-1:-1;;;;;45818:46:17;45826:6;-1:-1:-1;;;;;45826:18:17;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;45818:46:17;;45810:71;;;;-1:-1:-1;;;45810:71:17;;29810:2:504;45810:71:17;;;29792:21:504;29849:2;29829:18;;;29822:30;-1:-1:-1;;;29868:18:504;;;29861:42;29920:18;;45810:71:17;29608:336:504;45810:71:17;45934:18;45971:6;-1:-1:-1;;;;;45955:35:17;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;46011:31:17;;;46055:1;46011:31;;;:19;:31;;;;;;45934:58;;-1:-1:-1;46011:31:17;46003:54;45999:150;;46074:68;46079:27;46108:33;46074:4;:68::i;45999:150::-;-1:-1:-1;;;;;46213:24:17;;;46189:21;46213:24;;;:7;:24;;;;;;;;46243:22;;-1:-1:-1;;46243:22:17;46261:4;46243:22;;;;;46271:31;;;:35;;;46312:10;:23;;;;;;;;;;;-1:-1:-1;;;;;;46312:23:17;;;;;;;;46341:31;;;;;:19;:31;;;;;;:40;;;;;;;;;;46392:20;;2122:51:504;;;46213:24:17;46392:20;;2095:18:504;46392:20:17;;;;;;;46434:14;46426:23;;11941:859;-1:-1:-1;;;;;12087:15:17;;12067:7;12087:15;;;:7;:15;;;;;:24;;;12082:85;;12136:23;12128:32;;12082:85;-1:-1:-1;;;;;12267:15:17;;;;;;;:7;:15;;;;;;;;:43;;;;;:33;;;;:43;;;;;;12262:95;;12335:14;12327:23;;12262:95;12451:9;12466:17;12487:122;12534:8;12558:6;12573:12;12593:1;12602;12487:39;:122::i;:::-;12450:159;;;;;;12626:14;12619:21;;;;;;;;:::i;:::-;:3;:21;;;;;;;;:::i;:::-;;12615:61;;12665:3;12657:12;;;;;;;;:::i;:::-;12650:19;;;;;;12615:61;12685:13;;12681:78;;12723:28;12715:37;;26453:258;26566:9;26561:145;26585:19;:26;26581:30;;26561:145;;;26639:19;26659:1;26639:22;;;;;;;;:::i;:::-;;;;;;;;;;;26624:82;;-1:-1:-1;;;26624:82:17;;-1:-1:-1;;;;;30207:15:504;;;26624:82:17;;;30189:34:504;30259:15;;;30239:18;;;30232:43;30311:15;;;30291:18;;;30284:43;26639:22:17;;;;26624:64;;30124:18:504;;26624:82:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26613:3;;;;;:::i;:::-;;;;26561:145;;4923:1107;-1:-1:-1;;;;;5047:24:17;;5004:5;5047:24;;;:7;:24;;;;;5083:21;;;;5078:116;;5164:23;5157:30;;;;;5078:116;-1:-1:-1;;;;;5204:40:17;;;;;;:30;;;:40;;;;;;;;:48;;:40;:48;5200:114;;;5293:14;5286:21;;;;;5200:114;-1:-1:-1;;;;;5671:40:17;;;;;;;:30;;;:40;;;;;;;;:47;;5714:4;-1:-1:-1;;5671:47:17;;;;;;;;5724:13;:23;;;;;:36;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5724:36:17;;;;;;;;;;;5799:19;;;:9;:19;;;;;5671:47;5799:19;5794:161;;5828:12;:27;;;;;;;;;;;;;;-1:-1:-1;;;;;;5828:27:17;-1:-1:-1;;;;;5828:27:17;;;;;;;;-1:-1:-1;5863:19:17;;;:9;5828:27;5863:19;;;;:26;;-1:-1:-1;;5863:26:17;;;;;5925:19;;:23;;5828:27;5925:23;:::i;:::-;-1:-1:-1;;;;;5897:25:17;;;;;;:15;:25;;;;;:51;5794:161;5966:31;;;-1:-1:-1;;;;;17128:15:504;;;17110:34;;17180:15;;17175:2;17160:18;;17153:43;5966:31:17;;17045:18:504;5966:31:17;;;;;;;-1:-1:-1;6011:14:17;;4923:1107;-1:-1:-1;;;4923:1107:17:o;2717:142:25:-;-1:-1:-1;;;;;;;;;;;;2807:47:25;;;;;;;;2823:28;2828:1;:10;;;2840:1;:10;;;2823:4;:28::i;:::-;2807:47;;2800:54;2717:142;-1:-1:-1;;;2717:142:25:o;3938:153::-;-1:-1:-1;;;;;;;;;;;;4028:58:25;;;;;;;;450:4;4044:28;4049:1;:10;;;4061:1;:10;;;4044:4;:28::i;:::-;:39;;;;:::i;5170:158::-;-1:-1:-1;;;;;;;;;;;;5260:63:25;;;;;;;;5276:44;5281:26;5286:1;:10;;;450:4;5281;:26::i;:::-;5309:10;;5276:4;:44::i;2324:204:23:-;2428:7;2448:49;2464:3;2456:12;;;;;;;;:::i;:::-;2478:4;2470:13;;;;;;;;:::i;:::-;2448:49;;;29486:25:504;;;29542:2;29527:18;;29520:34;;;;29570:18;;29563:34;;;29474:2;29459:18;2448:49:23;;;;;;;2519:3;2511:12;;;;;;;;:::i;1416:220:25:-;1536:7;1551:18;1572:15;1577:1;1580:6;1572:4;:15::i;:::-;1551:36;;1600:31;1605:17;1614:7;1605:8;:17::i;:::-;1624:6;1600:4;:31::i;4095:130::-;-1:-1:-1;;;;;;;;;;;;4182:38:25;;;;;;;;4198:19;4203:1;:10;;;4215:1;4198:4;:19::i;814:203::-;989:12;;871:7;;989:23;;450:4;;989:23;:::i;1947:332:24:-;2019:9;2030:10;-1:-1:-1;;;;;;;;;;;;;;2030:10:24;2049:14;2065:22;2091:27;2099:1;:10;;;2111:6;2091:7;:27::i;:::-;2048:70;;-1:-1:-1;2048:70:24;-1:-1:-1;2136:18:24;2128:4;:26;;;;;;;;:::i;:::-;;2124:82;;-1:-1:-1;2178:20:24;;;;;;;;;-1:-1:-1;2178:20:24;;2172:4;;-1:-1:-1;2178:20:24;-1:-1:-1;2164:35:24;;2124:82;2240:33;;;;;;;;;;;;-1:-1:-1;;2240:33:24;;-1:-1:-1;1947:332:24;-1:-1:-1;;;;1947:332:24:o;3142:189:25:-;3245:7;;3272:5;3276:1;3272;:5;:::i;:::-;3260:17;-1:-1:-1;3299:12:25;3291:6;;;;3283:29;;;;-1:-1:-1;;;3283:29:25;;;;;;;;:::i;:::-;-1:-1:-1;3325:1:25;3142:189;-1:-1:-1;;;;3142:189:25:o;4796:123::-;4855:7;4877:37;4882:1;4885;4877:37;;;;;;;;;;;;;;;;;:4;:37::i;6048:114::-;6107:7;6129:28;6134:1;6137;6129:28;;;;;;;;;;;;;-1:-1:-1;;;6129:28:25;;;:4;:28::i;544:330:16:-;606:9;;636:6;632:57;;-1:-1:-1;660:18:16;;-1:-1:-1;660:18:16;652:30;;632:57;732:5;;;736:1;754:5;732:1;:5;754;:::i;:::-;:10;750:120;;782:26;810:1;774:38;;;;;;;750:120;841:18;;-1:-1:-1;861:1:16;-1:-1:-1;833:30:16;;4923:243:25;5026:7;5045:6;;;:16;;-1:-1:-1;5055:6:25;;5045:16;5041:45;;;-1:-1:-1;5078:1:25;5071:8;;5041:45;5091:9;5103:5;5107:1;5103;:5;:::i;:::-;5091:17;-1:-1:-1;5131:1:25;5122:5;5126:1;5091:17;5122:5;:::i;:::-;:10;5134:12;5114:33;;;;;-1:-1:-1;;;5114:33:25;;;;;;;;:::i;6166:169::-;6269:7;6299:12;6292:5;6284:28;;;;-1:-1:-1;;;6284:28:25;;;;;;;;:::i;:::-;-1:-1:-1;6325:5:25;6329:1;6325;:5;:::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;206:131:504:-;-1:-1:-1;;;;;281:31:504;;271:42;;261:70;;327:1;324;317:12;261:70;206:131;:::o;342:134::-;410:20;;439:31;410:20;439:31;:::i;481:247::-;540:6;593:2;581:9;572:7;568:23;564:32;561:52;;;609:1;606;599:12;561:52;648:9;635:23;667:31;692:5;667:31;:::i;915:118::-;1001:5;994:13;987:21;980:5;977:32;967:60;;1023:1;1020;1013:12;1038:540;1129:6;1137;1145;1198:2;1186:9;1177:7;1173:23;1169:32;1166:52;;;1214:1;1211;1204:12;1166:52;1253:9;1240:23;1272:31;1297:5;1272:31;:::i;:::-;1322:5;-1:-1:-1;1379:2:504;1364:18;;1351:32;1392:33;1351:32;1392:33;:::i;:::-;1444:7;-1:-1:-1;1503:2:504;1488:18;;1475:32;1516:30;1475:32;1516:30;:::i;:::-;1565:7;1555:17;;;1038:540;;;;;:::o;1583:388::-;1651:6;1659;1712:2;1700:9;1691:7;1687:23;1683:32;1680:52;;;1728:1;1725;1718:12;1680:52;1767:9;1754:23;1786:31;1811:5;1786:31;:::i;:::-;1836:5;-1:-1:-1;1893:2:504;1878:18;;1865:32;1906:33;1865:32;1906:33;:::i;:::-;1958:7;1948:17;;;1583:388;;;;;:::o;2184:598::-;2270:6;2278;2286;2294;2347:3;2335:9;2326:7;2322:23;2318:33;2315:53;;;2364:1;2361;2354:12;2315:53;2403:9;2390:23;2422:31;2447:5;2422:31;:::i;:::-;2472:5;-1:-1:-1;2529:2:504;2514:18;;2501:32;2542:33;2501:32;2542:33;:::i;:::-;2594:7;-1:-1:-1;2653:2:504;2638:18;;2625:32;2666:33;2625:32;2666:33;:::i;:::-;2184:598;;;;-1:-1:-1;2718:7:504;;2772:2;2757:18;2744:32;;-1:-1:-1;;2184:598:504:o;2787:180::-;2846:6;2899:2;2887:9;2878:7;2874:23;2870:32;2867:52;;;2915:1;2912;2905:12;2867:52;-1:-1:-1;2938:23:504;;2787:180;-1:-1:-1;2787:180:504:o;3197:525::-;3283:6;3291;3299;3307;3360:3;3348:9;3339:7;3335:23;3331:33;3328:53;;;3377:1;3374;3367:12;3328:53;3416:9;3403:23;3435:31;3460:5;3435:31;:::i;:::-;3485:5;-1:-1:-1;3542:2:504;3527:18;;3514:32;3555:33;3514:32;3555:33;:::i;:::-;3197:525;;3607:7;;-1:-1:-1;;;;3661:2:504;3646:18;;3633:32;;3712:2;3697:18;3684:32;;3197:525::o;3727:456::-;3804:6;3812;3820;3873:2;3861:9;3852:7;3848:23;3844:32;3841:52;;;3889:1;3886;3879:12;3841:52;3928:9;3915:23;3947:31;3972:5;3947:31;:::i;:::-;3997:5;-1:-1:-1;4054:2:504;4039:18;;4026:32;4067:33;4026:32;4067:33;:::i;:::-;3727:456;;4119:7;;-1:-1:-1;;;4173:2:504;4158:18;;;;4145:32;;3727:456::o;4861:740::-;4956:6;4964;4972;4980;4988;5041:3;5029:9;5020:7;5016:23;5012:33;5009:53;;;5058:1;5055;5048:12;5009:53;5097:9;5084:23;5116:31;5141:5;5116:31;:::i;:::-;5166:5;-1:-1:-1;5223:2:504;5208:18;;5195:32;5236:33;5195:32;5236:33;:::i;:::-;5288:7;-1:-1:-1;5347:2:504;5332:18;;5319:32;5360:33;5319:32;5360:33;:::i;:::-;5412:7;-1:-1:-1;5471:2:504;5456:18;;5443:32;5484:33;5443:32;5484:33;:::i;:::-;4861:740;;;;-1:-1:-1;4861:740:504;;5590:3;5575:19;5562:33;;4861:740;-1:-1:-1;;4861:740:504:o;5606:315::-;5674:6;5682;5735:2;5723:9;5714:7;5710:23;5706:32;5703:52;;;5751:1;5748;5741:12;5703:52;5790:9;5777:23;5809:31;5834:5;5809:31;:::i;:::-;5859:5;5911:2;5896:18;;;;5883:32;;-1:-1:-1;;;5606:315:504:o;6159:594::-;6254:6;6262;6270;6278;6286;6339:3;6327:9;6318:7;6314:23;6310:33;6307:53;;;6356:1;6353;6346:12;6307:53;6395:9;6382:23;6414:31;6439:5;6414:31;:::i;:::-;6464:5;-1:-1:-1;6521:2:504;6506:18;;6493:32;6534:33;6493:32;6534:33;:::i;:::-;6159:594;;6586:7;;-1:-1:-1;;;;6640:2:504;6625:18;;6612:32;;6691:2;6676:18;;6663:32;;6742:3;6727:19;;;6714:33;;-1:-1:-1;6159:594:504:o;6758:657::-;6927:2;6979:21;;;7049:13;;6952:18;;;7071:22;;;6898:4;;6927:2;7150:15;;;;7124:2;7109:18;;;6898:4;7193:196;7207:6;7204:1;7201:13;7193:196;;;7272:13;;-1:-1:-1;;;;;;7268:40:504;7256:53;;7364:15;;;;7329:12;;;;7229:1;7222:9;7193:196;;;-1:-1:-1;7406:3:504;;6758:657;-1:-1:-1;;;;;;6758:657:504:o;8362:241::-;8418:6;8471:2;8459:9;8450:7;8446:23;8442:32;8439:52;;;8487:1;8484;8477:12;8439:52;8526:9;8513:23;8545:28;8567:5;8545:28;:::i;8608:675::-;8796:2;8848:21;;;8918:13;;8821:18;;;8940:22;;;8767:4;;8796:2;9019:15;;;;8993:2;8978:18;;;8767:4;9062:195;9076:6;9073:1;9070:13;9062:195;;;9141:13;;-1:-1:-1;;;;;9137:39:504;9125:52;;9232:15;;;;9197:12;;;;9173:1;9091:9;9062:195;;9288:347;9339:8;9349:6;9403:3;9396:4;9388:6;9384:17;9380:27;9370:55;;9421:1;9418;9411:12;9370:55;-1:-1:-1;9444:20:504;;9487:18;9476:30;;9473:50;;;9519:1;9516;9509:12;9473:50;9556:4;9548:6;9544:17;9532:29;;9608:3;9601:4;9592:6;9584;9580:19;9576:30;9573:39;9570:59;;;9625:1;9622;9615:12;9640:943;9746:6;9754;9762;9770;9778;9786;9839:3;9827:9;9818:7;9814:23;9810:33;9807:53;;;9856:1;9853;9846:12;9807:53;9895:9;9882:23;9945:4;9938:5;9934:16;9927:5;9924:27;9914:55;;9965:1;9962;9955:12;9914:55;9988:5;-1:-1:-1;10044:2:504;10029:18;;10016:32;10067:18;10097:14;;;10094:34;;;10124:1;10121;10114:12;10094:34;10163:58;10213:7;10204:6;10193:9;10189:22;10163:58;:::i;:::-;10240:8;;-1:-1:-1;10137:84:504;-1:-1:-1;10328:2:504;10313:18;;10300:32;;-1:-1:-1;10344:16:504;;;10341:36;;;10373:1;10370;10363:12;10341:36;;10412:60;10464:7;10453:8;10442:9;10438:24;10412:60;:::i;:::-;9640:943;;;;-1:-1:-1;9640:943:504;;;;;10573:2;10558:18;;;10545:32;;9640:943;-1:-1:-1;;;;9640:943:504:o;10588:127::-;10649:10;10644:3;10640:20;10637:1;10630:31;10680:4;10677:1;10670:15;10704:4;10701:1;10694:15;10720:1121;10804:6;10835:2;10878;10866:9;10857:7;10853:23;10849:32;10846:52;;;10894:1;10891;10884:12;10846:52;10934:9;10921:23;10963:18;11004:2;10996:6;10993:14;10990:34;;;11020:1;11017;11010:12;10990:34;11058:6;11047:9;11043:22;11033:32;;11103:7;11096:4;11092:2;11088:13;11084:27;11074:55;;11125:1;11122;11115:12;11074:55;11161:2;11148:16;11183:2;11179;11176:10;11173:36;;;11189:18;;:::i;:::-;11235:2;11232:1;11228:10;11267:2;11261:9;11330:2;11326:7;11321:2;11317;11313:11;11309:25;11301:6;11297:38;11385:6;11373:10;11370:22;11365:2;11353:10;11350:18;11347:46;11344:72;;;11396:18;;:::i;:::-;11432:2;11425:22;11482:18;;;11516:15;;;;-1:-1:-1;11558:11:504;;;11554:20;;;11586:19;;;11583:39;;;11618:1;11615;11608:12;11583:39;11642:11;;;;11662:148;11678:6;11673:3;11670:15;11662:148;;;11744:23;11763:3;11744:23;:::i;:::-;11732:36;;11695:12;;;;11788;;;;11662:148;;;11829:6;10720:1121;-1:-1:-1;;;;;;;;10720:1121:504:o;11846:632::-;12017:2;12069:21;;;12139:13;;12042:18;;;12161:22;;;11988:4;;12017:2;12240:15;;;;12214:2;12199:18;;;11988:4;12283:169;12297:6;12294:1;12291:13;12283:169;;;12358:13;;12346:26;;12427:15;;;;12392:12;;;;12319:1;12312:9;12283:169;;12736:367;12799:8;12809:6;12863:3;12856:4;12848:6;12844:17;12840:27;12830:55;;12881:1;12878;12871:12;12830:55;-1:-1:-1;12904:20:504;;12947:18;12936:30;;12933:50;;;12979:1;12976;12969:12;12933:50;13016:4;13008:6;13004:17;12992:29;;13076:3;13069:4;13059:6;13056:1;13052:14;13044:6;13040:27;13036:38;13033:47;13030:67;;;13093:1;13090;13083:12;13108:770;13227:6;13235;13243;13251;13304:2;13292:9;13283:7;13279:23;13275:32;13272:52;;;13320:1;13317;13310:12;13272:52;13360:9;13347:23;13389:18;13430:2;13422:6;13419:14;13416:34;;;13446:1;13443;13436:12;13416:34;13485:70;13547:7;13538:6;13527:9;13523:22;13485:70;:::i;:::-;13574:8;;-1:-1:-1;13459:96:504;-1:-1:-1;13662:2:504;13647:18;;13634:32;;-1:-1:-1;13678:16:504;;;13675:36;;;13707:1;13704;13697:12;13675:36;;13746:72;13810:7;13799:8;13788:9;13784:24;13746:72;:::i;:::-;13108:770;;;;-1:-1:-1;13837:8:504;-1:-1:-1;;;;13108:770:504:o;14444:184::-;14514:6;14567:2;14555:9;14546:7;14542:23;14538:32;14535:52;;;14583:1;14580;14573:12;14535:52;-1:-1:-1;14606:16:504;;14444:184;-1:-1:-1;14444:184:504:o;14633:127::-;14694:10;14689:3;14685:20;14682:1;14675:31;14725:4;14722:1;14715:15;14749:4;14746:1;14739:15;15445:127;15506:10;15501:3;15497:20;15494:1;15487:31;15537:4;15534:1;15527:15;15561:4;15558:1;15551:15;15577:125;15617:4;15645:1;15642;15639:8;15636:34;;;15650:18;;:::i;:::-;-1:-1:-1;15687:9:504;;15577:125::o;15707:128::-;15747:3;15778:1;15774:6;15771:1;15768:13;15765:39;;;15784:18;;:::i;:::-;-1:-1:-1;15820:9:504;;15707:128::o;18248:178::-;18285:3;18329:4;18322:5;18318:16;18353:7;18343:41;;18364:18;;:::i;:::-;-1:-1:-1;;18400:20:504;;18248:178;-1:-1:-1;;18248:178:504:o;18431:127::-;18492:10;18487:3;18483:20;18480:1;18473:31;18523:4;18520:1;18513:15;18547:4;18544:1;18537:15;18920:266;19008:6;19003:3;18996:19;19060:6;19053:5;19046:4;19041:3;19037:14;19024:43;-1:-1:-1;19112:1:504;19087:16;;;19105:4;19083:27;;;19076:38;;;;19168:2;19147:15;;;-1:-1:-1;;19143:29:504;19134:39;;;19130:50;;18920:266::o;19191:509::-;19440:4;19432:6;19428:17;19417:9;19410:36;19482:2;19477;19466:9;19462:18;19455:30;19391:4;19508:61;19565:2;19554:9;19550:18;19542:6;19534;19508:61;:::i;:::-;19617:9;19609:6;19605:22;19600:2;19589:9;19585:18;19578:50;19645:49;19687:6;19679;19671;19645:49;:::i;19705:251::-;19775:6;19828:2;19816:9;19807:7;19803:23;19799:32;19796:52;;;19844:1;19841;19834:12;19796:52;19876:9;19870:16;19895:31;19920:5;19895:31;:::i;20580:245::-;20647:6;20700:2;20688:9;20679:7;20675:23;20671:32;20668:52;;;20716:1;20713;20706:12;20668:52;20748:9;20742:16;20767:28;20789:5;20767:28;:::i;21514:135::-;21553:3;-1:-1:-1;;21574:17:504;;21571:43;;;21594:18;;:::i;:::-;-1:-1:-1;21641:1:504;21630:13;;21514:135::o;21999:481::-;-1:-1:-1;;;;;22284:15:504;;;22266:34;;22336:15;;;22331:2;22316:18;;22309:43;22388:15;;22383:2;22368:18;;22361:43;-1:-1:-1;;;;;;22440:33:504;;;22435:2;22420:18;;22413:61;22215:3;22200:19;;21999:481::o;22828:127::-;22889:10;22884:3;22880:20;22877:1;22870:31;22920:4;22917:1;22910:15;22944:4;22941:1;22934:15;24962:127;25023:10;25018:3;25014:20;25011:1;25004:31;25054:4;25051:1;25044:15;25078:4;25075:1;25068:15;25974:368;26071:6;26079;26087;26095;26148:3;26136:9;26127:7;26123:23;26119:33;26116:53;;;26165:1;26162;26155:12;26116:53;-1:-1:-1;;26188:16:504;;26244:2;26229:18;;26223:25;26288:2;26273:18;;26267:25;26332:2;26317:18;;;26311:25;26188:16;;26223:25;;-1:-1:-1;26311:25:504;;-1:-1:-1;25974:368:504;-1:-1:-1;25974:368:504:o;28572:168::-;28612:7;28678:1;28674;28670:6;28666:14;28663:1;28660:21;28655:1;28648:9;28641:17;28637:45;28634:71;;;28685:18;;:::i;:::-;-1:-1:-1;28725:9:504;;28572:168::o;28745:217::-;28785:1;28811;28801:132;;28855:10;28850:3;28846:20;28843:1;28836:31;28890:4;28887:1;28880:15;28918:4;28915:1;28908:15;28801:132;-1:-1:-1;28947:9:504;;28745:217::o;30662:597::-;30774:4;30803:2;30832;30821:9;30814:21;30864:6;30858:13;30907:6;30902:2;30891:9;30887:18;30880:34;30932:1;30942:140;30956:6;30953:1;30950:13;30942:140;;;31051:14;;;31047:23;;31041:30;31017:17;;;31036:2;31013:26;31006:66;30971:10;;30942:140;;;31100:6;31097:1;31094:13;31091:91;;;31170:1;31165:2;31156:6;31145:9;31141:22;31137:31;31130:42;31091:91;-1:-1:-1;31243:2:504;31222:15;-1:-1:-1;;31218:29:504;31203:45;;;;31250:2;31199:54;;30662:597;-1:-1:-1;;;30662:597:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_addRewardsDistributor(address)": "b9b5b153", + "_afterNonReentrant()": "632e5142", + "_becomeImplementation()": "5d72de62", + "_beforeNonReentrant()": "c90c20b1", + "_borrowGuardianPaused()": "e6653f3d", + "_deployMarket(uint8,bytes,bytes,uint256)": "b452ef62", + "_getExtensionFunctions()": "89f8132e", + "_mintGuardianPaused()": "3c94786f", + "_setCloseFactor(uint256)": "317b0b77", + "_setCollateralFactor(address,uint256)": "e4028eee", + "_setLiquidationIncentive(uint256)": "4fd42e17", + "_setPriceOracle(address)": "55ee1fe1", + "_setWhitelistEnforcement(bool)": "952adf5a", + "_setWhitelistStatuses(address[],bool[])": "c8c9c975", + "accountAssets(address,uint256)": "dce15449", + "admin()": "f851a440", + "adminHasRights()": "0a755ec2", + "allBorrowers(uint256)": "7515bafa", + "allMarkets(uint256)": "52d84d1e", + "borrowAllowed(address,address,uint256)": "da3d454c", + "borrowCapForCollateral(address,address)": "940cd6f1", + "borrowCapGuardian()": "21af4569", + "borrowCaps(address)": "4a584432", + "borrowGuardianPaused(address)": "6d154ea5", + "borrowWithinLimits(address,uint256)": "779b2294", + "borrowingAgainstCollateralBlacklist(address,address)": "1c819e43", + "cTokensByUnderlying(address)": "31ff47fa", + "checkMembership(address,address)": "929fe9a1", + "closeFactorMantissa()": "e8755446", + "enforceWhitelist()": "b0957210", + "enterMarkets(address[])": "c2998238", + "exitMarket(address)": "ede4edd0", + "getAccountLiquidity(address)": "5ec88c79", + "getAssetsIn(address)": "abfceffc", + "getHypotheticalAccountLiquidity(address,address,uint256,uint256,uint256)": "7e361b11", + "getMaxRedeemOrBorrow(address,address,bool)": "1976828e", + "ionicAdmin()": "c91a424f", + "ionicAdminHasRights()": "cf6bfd2d", + "isComptroller()": "007e3dd2", + "isDeprecated(address)": "94543c15", + "liquidateBorrowAllowed(address,address,address,address,uint256)": "5fc7e71e", + "liquidateCalculateSeizeTokens(address,address,uint256)": "c488847b", + "liquidationIncentiveMantissa()": "4ada90af", + "markets(address)": "8e8f294b", + "mintAllowed(address,address,uint256)": "4ef4c3e1", + "mintGuardianPaused(address)": "731f0c2b", + "mintVerify(address,address,uint256,uint256)": "41c728b9", + "nonAccruingRewardsDistributors(uint256)": "6bd02b8a", + "oracle()": "7dc0d1d0", + "pauseGuardian()": "24a3d622", + "pendingAdmin()": "26782247", + "redeemAllowed(address,address,uint256)": "eabe7d91", + "redeemVerify(address,address,uint256,uint256)": "51dff989", + "repayBorrowAllowed(address,address,address,uint256)": "24008a62", + "rewardsDistributors(uint256)": "c6c5b0dd", + "seizeAllowed(address,address,address,address,uint256)": "d02f7351", + "seizeGuardianPaused()": "ac0b0bb7", + "suppliers(address)": "16dc15fe", + "supplyCaps(address)": "02c3bcbb", + "transferAllowed(address,address,address,uint256)": "bdcdc258", + "transferGuardianPaused()": "87f76303", + "whitelist(address)": "9b19251a", + "whitelistArray(uint256)": "d251fefc" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/ComptrollerFirstExtension.json b/packages/sdk/deployments/bob/ComptrollerFirstExtension.json new file mode 100644 index 000000000..6633654ee --- /dev/null +++ b/packages/sdk/deployments/bob/ComptrollerFirstExtension.json @@ -0,0 +1,3292 @@ +{ + "address": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "abi": [ + { + "type": "function", + "name": "_blacklistBorrowingAgainstCollateral", + "inputs": [ + { + "name": "cTokenBorrow", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "blacklisted", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_blacklistBorrowingAgainstCollateralWhitelist", + "inputs": [ + { + "name": "cTokenBorrow", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "whitelisted", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_borrowCapWhitelist", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "whitelisted", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_borrowGuardianPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "_mintGuardianPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_removeFlywheel", + "inputs": [ + { + "name": "flywheelAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setBorrowCapForCollateral", + "inputs": [ + { + "name": "cTokenBorrow", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "borrowCap", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setBorrowCapForCollateralWhitelist", + "inputs": [ + { + "name": "cTokenBorrow", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "whitelisted", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setBorrowCapGuardian", + "inputs": [ + { + "name": "newBorrowCapGuardian", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setBorrowPaused", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "state", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setMarketBorrowCaps", + "inputs": [ + { + "name": "cTokens", + "type": "address[]", + "internalType": "contract ICErc20[]" + }, + { + "name": "newBorrowCaps", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setMarketSupplyCaps", + "inputs": [ + { + "name": "cTokens", + "type": "address[]", + "internalType": "contract ICErc20[]" + }, + { + "name": "newSupplyCaps", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setMintPaused", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "state", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPauseGuardian", + "inputs": [ + { + "name": "newPauseGuardian", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setSeizePaused", + "inputs": [ + { + "name": "state", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setTransferPaused", + "inputs": [ + { + "name": "state", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_supplyCapWhitelist", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "whitelisted", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_unsupportMarket", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "accountAssets", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "addNonAccruingFlywheel", + "inputs": [ + { + "name": "flywheelAddress", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "admin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "adminHasRights", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allBorrowers", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "allMarkets", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowCapForCollateral", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowCapGuardian", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowCaps", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowGuardianPaused", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "borrowingAgainstCollateralBlacklist", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "cTokensByUnderlying", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "closeFactorMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "enforceWhitelist", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAccruingFlywheels", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAllBorrowers", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAllBorrowersCount", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAllMarkets", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract ICErc20[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAssetAsCollateralValueCap", + "inputs": [ + { + "name": "collateral", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "cTokenModify", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "redeeming", + "type": "bool", + "internalType": "bool" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPaginatedBorrowers", + "inputs": [ + { + "name": "page", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "pageSize", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "_totalPages", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_pageOfBorrowers", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRewardsDistributors", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWhitelist", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWhitelistedBorrowersBorrows", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "borrowed", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWhitelistedSuppliersSupply", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "supplied", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address payable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "ionicAdminHasRights", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isBlacklistBorrowingAgainstCollateralWhitelisted", + "inputs": [ + { + "name": "cTokenBorrow", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isBorrowCapForCollateralWhitelisted", + "inputs": [ + { + "name": "cTokenBorrow", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenCollateral", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isBorrowCapWhitelisted", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isComptroller", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isSupplyCapWhitelisted", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isUserOfPool", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidationIncentiveMantissa", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "markets", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "isListed", + "type": "bool", + "internalType": "bool" + }, + { + "name": "collateralFactorMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "mintGuardianPaused", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "nonAccruingRewardsDistributors", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "oracle", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pauseGuardian", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingAdmin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "registerInSFS", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "rewardsDistributors", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "seizeGuardianPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "suppliers", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "supplyCaps", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "transferGuardianPaused", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "whitelist", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "whitelistArray", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "ActionPaused", + "inputs": [ + { + "name": "action", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "pauseState", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Failure", + "inputs": [ + { + "name": "error", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "info", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "detail", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MarketActionPaused", + "inputs": [ + { + "name": "cToken", + "type": "address", + "indexed": false, + "internalType": "contract ICErc20" + }, + { + "name": "action", + "type": "string", + "indexed": false, + "internalType": "string" + }, + { + "name": "pauseState", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "MarketUnlisted", + "inputs": [ + { + "name": "cToken", + "type": "address", + "indexed": false, + "internalType": "contract ICErc20" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewBorrowCap", + "inputs": [ + { + "name": "cToken", + "type": "address", + "indexed": true, + "internalType": "contract ICErc20" + }, + { + "name": "newBorrowCap", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewBorrowCapGuardian", + "inputs": [ + { + "name": "oldBorrowCapGuardian", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newBorrowCapGuardian", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPauseGuardian", + "inputs": [ + { + "name": "oldPauseGuardian", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPauseGuardian", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewSupplyCap", + "inputs": [ + { + "name": "cToken", + "type": "address", + "indexed": true, + "internalType": "contract ICErc20" + }, + { + "name": "newSupplyCap", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x1fe93a06fb1b9cc18e169dbd8905967ec6327bcba1255e14834e11bb78844631", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8ea3fc79D9E463464C5159578d38870b770f6E57", + "transactionIndex": 1, + "gasUsed": "3305892", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x60cdb438a9f9d0decd38e39b7f77baa86e292ce8bd8050900f328d41dceb8f63", + "transactionHash": "0x1fe93a06fb1b9cc18e169dbd8905967ec6327bcba1255e14834e11bb78844631", + "logs": [], + "blockNumber": 3777777, + "cumulativeGasUsed": "3349731", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "string", + "name": "action", + "type": "string", + "indexed": false + }, + { + "internalType": "bool", + "name": "pauseState", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "ActionPaused", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "error", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "info", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "detail", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "Failure", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + }, + { + "internalType": "string", + "name": "action", + "type": "string", + "indexed": false + }, + { + "internalType": "bool", + "name": "pauseState", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "MarketActionPaused", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "MarketUnlisted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "newBorrowCap", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewBorrowCap", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldBorrowCapGuardian", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newBorrowCapGuardian", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewBorrowCapGuardian", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPauseGuardian", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPauseGuardian", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPauseGuardian", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "newSupplyCap", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewSupplyCap", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "bool", + "name": "blacklisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_blacklistBorrowingAgainstCollateral" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_blacklistBorrowingAgainstCollateralWhitelist" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_borrowCapWhitelist" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "flywheelAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_removeFlywheel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "uint256", + "name": "borrowCap", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setBorrowCapForCollateral" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setBorrowCapForCollateralWhitelist" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newBorrowCapGuardian", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setBorrowCapGuardian" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setBorrowPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "cTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "newBorrowCaps", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setMarketBorrowCaps" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "cTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "newSupplyCaps", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setMarketSupplyCaps" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setMintPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPauseGuardian", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPauseGuardian", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setSeizePaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "state", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setTransferPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "bool", + "name": "whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_supplyCapWhitelist" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_unsupportMarket", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "accountAssets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "flywheelAddress", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addNonAccruingFlywheel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "adminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allBorrowers", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "allMarkets", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowCapForCollateral", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "borrowCapGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "borrowingAgainstCollateralBlacklist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "cTokensByUnderlying", + "outputs": [ + { + "internalType": "contract ICErc20", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "closeFactorMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "enforceWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAccruingFlywheels", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllBorrowers", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllBorrowersCount", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllMarkets", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "collateral", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "bool", + "name": "redeeming", + "type": "bool" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getAssetAsCollateralValueCap", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "page", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "pageSize", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPaginatedBorrowers", + "outputs": [ + { + "internalType": "uint256", + "name": "_totalPages", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "_pageOfBorrowers", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getRewardsDistributors", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getWhitelist", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getWhitelistedBorrowersBorrows", + "outputs": [ + { + "internalType": "uint256", + "name": "borrowed", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getWhitelistedSuppliersSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "supplied", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdmin", + "outputs": [ + { + "internalType": "address payable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ionicAdminHasRights", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isBlacklistBorrowingAgainstCollateralWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cTokenBorrow", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenCollateral", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isBorrowCapForCollateralWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isBorrowCapWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isComptroller", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isSupplyCapWhitelisted", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "isUserOfPool", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidationIncentiveMantissa", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "markets", + "outputs": [ + { + "internalType": "bool", + "name": "isListed", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "collateralFactorMantissa", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "mintGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "nonAccruingRewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "oracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "registerInSFS", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "rewardsDistributors", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "seizeGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "suppliers", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "supplyCaps", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "transferGuardianPaused", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "whitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "whitelistArray", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "_removeFlywheel(address)": { + "details": "Removes a flywheel from the accruing or non-accruing array", + "params": { + "flywheelAddress": "The address of the flywheel to remove from the accruing or non-accruing array" + }, + "returns": { + "_0": "true if the flywheel was found and removed" + } + }, + "_setBorrowCapGuardian(address)": { + "params": { + "newBorrowCapGuardian": "The address of the new Borrow Cap Guardian" + } + }, + "_setMarketBorrowCaps(address[],uint256[])": { + "details": "Admin or borrowCapGuardian function to set the borrow caps. A borrow cap of 0 corresponds to unlimited borrowing.", + "params": { + "cTokens": "The addresses of the markets (tokens) to change the borrow caps for", + "newBorrowCaps": "The new borrow cap values in underlying to be set. A value of 0 corresponds to unlimited borrowing." + } + }, + "_setMarketSupplyCaps(address[],uint256[])": { + "details": "Admin or borrowCapGuardian function to set the supply caps. A supply cap of 0 corresponds to unlimited supplying.", + "params": { + "cTokens": "The addresses of the markets (tokens) to change the supply caps for", + "newSupplyCaps": "The new supply cap values in underlying to be set. A value of 0 corresponds to unlimited supplying." + } + }, + "_setPauseGuardian(address)": { + "params": { + "newPauseGuardian": "The address of the new Pause Guardian" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See enum Error for details)" + } + }, + "_unsupportMarket(address)": { + "details": "Admin function unset isListed and collateralFactorMantissa and unadd support for the market", + "params": { + "cToken": "The address of the market (token) to unlist" + }, + "returns": { + "_0": "uint 0=success, otherwise a failure. (See enum Error for details)" + } + }, + "addNonAccruingFlywheel(address)": { + "details": "Adds a flywheel to the non-accruing list and if already in the accruing, removes it from that list", + "params": { + "flywheelAddress": "The address of the flywheel to add to the non-accruing" + } + }, + "getAllBorrowers()": { + "details": "The automatic getter may be used to access an individual borrower.", + "returns": { + "_0": "The list of borrower account addresses" + } + }, + "getAllMarkets()": { + "details": "The automatic getter may be used to access an individual market.", + "returns": { + "_0": "The list of market addresses" + } + }, + "getWhitelist()": { + "details": "The automatic getter may be used to access an individual whitelist status.", + "returns": { + "_0": "The list of borrower account addresses" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_setBorrowCapGuardian(address)": { + "notice": "Admin function to change the Borrow Cap Guardian" + }, + "_setMarketBorrowCaps(address[],uint256[])": { + "notice": "Set the given borrow caps for the given cToken markets. Borrowing that brings total borrows to or above borrow cap will revert." + }, + "_setMarketSupplyCaps(address[],uint256[])": { + "notice": "Set the given supply caps for the given cToken markets. Supplying that brings total underlying supply to or above supply cap will revert." + }, + "_setPauseGuardian(address)": { + "notice": "Admin function to change the Pause Guardian" + }, + "_unsupportMarket(address)": { + "notice": "Removed a market from the markets mapping and sets it as unlisted" + }, + "accountAssets(address,uint256)": { + "notice": "Per-account mapping of \"assets you are in\", capped by maxAssets" + }, + "addNonAccruingFlywheel(address)": { + "notice": "Returns true if the accruing flyhwheel was found and replaced" + }, + "admin()": { + "notice": "Administrator for this contract" + }, + "adminHasRights()": { + "notice": "Whether or not the admin has admin rights" + }, + "allBorrowers(uint256)": { + "notice": "A list of all borrowers who have entered markets" + }, + "allMarkets(uint256)": { + "notice": "A list of all markets" + }, + "borrowCapGuardian()": { + "notice": "The borrowCapGuardian can set borrowCaps to any number for any market. Lowering the borrow cap could disable borrowing on the given market." + }, + "borrowCaps(address)": { + "notice": "Borrow caps enforced by borrowAllowed for each cToken address. Defaults to zero which corresponds to unlimited borrowing." + }, + "cTokensByUnderlying(address)": { + "notice": "All cTokens addresses mapped by their underlying token addresses" + }, + "closeFactorMantissa()": { + "notice": "Multiplier used to calculate the maximum repayAmount when liquidating a borrow" + }, + "enforceWhitelist()": { + "notice": "Whether or not the supplier whitelist is enforced" + }, + "getAllBorrowers()": { + "notice": "Return all of the borrowers" + }, + "getAllMarkets()": { + "notice": "Return all of the markets" + }, + "getRewardsDistributors()": { + "notice": "Returns an array of all accruing and non-accruing flywheels" + }, + "getWhitelist()": { + "notice": "Return all of the whitelist" + }, + "ionicAdminHasRights()": { + "notice": "Whether or not the Ionic admin has admin rights" + }, + "isComptroller()": { + "notice": "Indicator that this is a Comptroller contract (for inspection)" + }, + "liquidationIncentiveMantissa()": { + "notice": "Multiplier representing the discount on collateral that a liquidator receives" + }, + "markets(address)": { + "notice": "Official mapping of cTokens -> Market metadata" + }, + "nonAccruingRewardsDistributors(uint256)": { + "notice": "RewardsDistributor to list for claiming, but not to notify of flywheel changes." + }, + "oracle()": { + "notice": "Oracle which gives the price of any given asset" + }, + "pauseGuardian()": { + "notice": "The Pause Guardian can pause certain actions as a safety mechanism. Actions which allow users to remove their own assets cannot be paused. Liquidation / seizing / transfer can only be paused globally, not by market." + }, + "pendingAdmin()": { + "notice": "Pending administrator for this contract" + }, + "rewardsDistributors(uint256)": { + "notice": "RewardsDistributor contracts to notify of flywheel changes." + }, + "supplyCaps(address)": { + "notice": "Supply caps enforced by mintAllowed for each cToken address. Defaults to zero which corresponds to unlimited supplying." + }, + "whitelist(address)": { + "notice": "Maps addresses to booleans indicating if they are allowed to supply assets (i.e., mint cTokens)" + }, + "whitelistArray(uint256)": { + "notice": "An array of all whitelisted accounts" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/ComptrollerFirstExtension.sol": "ComptrollerFirstExtension" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerFirstExtension.sol": { + "keccak256": "0xce557f923a742646198e20622a41155873a402af643cacfbedf649f0d26737d8", + "urls": [ + "bzz-raw://d91f73f1be9c830f32bd9f25b977e7c53fb19a13cdb517e82472870e8f39f334", + "dweb:/ipfs/QmbsUxyN1jNvb84LDzZGk5e2iRTxKU6sMnr5tE6PZ5sSxk" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040526002805461ffff60a01b191661010160a01b17905534801561002557600080fd5b50613a67806100356000396000f3fe608060405234801561001057600080fd5b50600436106103e55760003560e01c80637515bafa1161020a578063be945a6411610125578063d9e0ea6b116100b8578063e875544611610087578063e87554461461094a578063ee5b9a2f14610953578063f851a44014610966578063f874eb0c14610979578063fb6243fa1461098c57600080fd5b8063d9e0ea6b146108ef578063dce1544914610902578063e6653f3d14610915578063e68065911461092957600080fd5b8063cf6bfd2d116100f4578063cf6bfd2d146108ad578063d01f63f5146108c1578063d219fca7146108c9578063d251fefc146108dc57600080fd5b8063be945a6414610861578063c6c5b0dd14610874578063c76ae26014610887578063c91a424f1461089a57600080fd5b80638ebf63641161019d578063ac0b0bb71161016c578063ac0b0bb714610818578063b0772d0b1461082c578063b095721014610841578063b32538011461084e57600080fd5b80638ebf6364146107a4578063940cd6f1146107b75780639b19251a146107e2578063a5fb48571461080557600080fd5b8063819605a8116101d9578063819605a81461072457806387f763031461073757806389f8132e1461074b5780638e8f294b1461076057600080fd5b80637515bafa146106e3578063783f1096146106f65780637dc0d1d0146107095780637f15e2161461071c57600080fd5b80633605b51b1161030557806351a485e411610298578063607ef6c111610267578063607ef6c114610664578063692fd2a9146106775780636bd02b8a1461068a5780636d154ea51461069d578063731f0c2b146106c057600080fd5b806351a485e41461061857806351c8491d1461062b57806352d84d1e1461063e5780635f5af1aa1461065157600080fd5b80633c94786f116102d45780633c94786f146105d35780634a584432146105e75780634a76e727146106075780634ada90af1461060f57600080fd5b80633605b51b14610590578063391957d7146105985780633a72cb5e146105ad5780633bcf7ec1146105c057600080fd5b80631c819e431161037d578063267822471161034c578063267822471461052c5780632d70db781461053f57806331ff47fa1461055257806332abcdbe1461057b57600080fd5b80631c819e43146104ad57806321af4569146104db5780632273f40e1461050657806324a3d6221461051957600080fd5b8063109908ce116103b9578063109908ce1461045c57806315c3b9b01461046f57806316dc15fe1461047757806318c882a51461049a57600080fd5b80627e3dd2146103ea57806302c3bcbb14610407578063088e0fce146104355780630a755ec214610448575b600080fd5b6103f2600181565b60405190151581526020015b60405180910390f35b6104276104153660046133fb565b60186020526000908152604090205481565b6040519081526020016103fe565b6103f2610443366004613418565b61099f565b6002546103f290600160a81b900460ff1681565b6103f261046a3660046133fb565b6109d8565b600b54610427565b6103f26104853660046133fb565b600d6020526000908152604090205460ff1681565b6103f26104a8366004613478565b610c36565b6103f26104bb3660046134ad565b601d60209081526000928352604080842090915290825290205460ff1681565b6016546104ee906001600160a01b031681565b6040516001600160a01b0390911681526020016103fe565b6103f26105143660046134ad565b610d7c565b6013546104ee906001600160a01b031681565b6002546104ee906001600160a01b031681565b6103f261054d3660046134e6565b610da4565b6104ee6105603660046133fb565b600e602052600090815260409020546001600160a01b031681565b610583610e87565b6040516103fe9190613545565b610583610ee9565b6105ab6105a63660046133fb565b611051565b005b6104276105bb3660046133fb565b6110dc565b6103f26105ce366004613478565b6111c7565b6013546103f290600160a01b900460ff1681565b6104276105f53660046133fb565b60176020526000908152604090205481565b6105836112fe565b61042760055481565b6105ab61062636600461359d565b61135e565b6105ab610639366004613609565b6114e7565b6104ee61064c366004613650565b611559565b61042761065f3660046133fb565b611583565b6105ab61067236600461359d565b611603565b6103f26106853660046133fb565b611783565b6104ee610698366004613650565b61191e565b6103f26106ab3660046133fb565b60156020526000908152604090205460ff1681565b6103f26106ce3660046133fb565b60146020526000908152604090205460ff1681565b6104ee6106f1366004613650565b61192e565b610427610704366004613669565b61193e565b6003546104ee906001600160a01b031681565b610427611c32565b6104276107323660046133fb565b611da6565b6013546103f290600160b01b900460ff1681565b6107536120dc565b6040516103fe91906136c3565b61078d61076e3660046133fb565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016103fe565b6103f26107b23660046134e6565b6129b8565b6104276107c53660046134ad565b601c60209081526000928352604080842090915290825290205481565b6103f26107f03660046133fb565b60106020526000908152604090205460ff1681565b6105ab610813366004613711565b612a92565b6013546103f290600160b81b900460ff1681565b610834612ae2565b6040516103fe9190613752565b600f546103f29060ff1681565b6103f261085c3660046134ad565b612b42565b6105ab61086f366004613609565b612b64565b6104ee610882366004613650565b612bd2565b6105ab610895366004613793565b612be2565b6000546104ee906001600160a01b031681565b6002546103f290600160a01b900460ff1681565b610583612c77565b6105ab6108d7366004613793565b612cd7565b6104ee6108ea366004613650565b612d5f565b6103f26108fd3660046133fb565b612d6f565b6104ee6109103660046137ed565b612df0565b6013546103f290600160a81b900460ff1681565b61093c610937366004613819565b612e28565b6040516103fe92919061383b565b61042760045481565b6105ab610961366004613609565b612fad565b6001546104ee906001600160a01b031681565b6103f2610987366004613418565b61300b565b61042761099a3660046133fb565b61303c565b6001600160a01b038084166000908152601e6020908152604080832093861683529290529081206109d0908361311f565b949350505050565b60006109e2613141565b610a075760405162461bcd60e51b81526004016109fe90613854565b60405180910390fd5b6001600160a01b038216610a495760405162461bcd60e51b815260206004820152600960248201526808599b1e5dda19595b60ba1b60448201526064016109fe565b60005b601954811015610b505760198181548110610a6957610a69613874565b6000918252602090912001546001600160a01b0384811691161415610b3e5760198054610a98906001906138a0565b81548110610aa857610aa8613874565b600091825260209091200154601980546001600160a01b039092169183908110610ad457610ad4613874565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506019805480610b1357610b136138b7565b600082815260209020810160001990810180546001600160a01b031916905501905550600192915050565b80610b48816138cd565b915050610a4c565b5060005b601b54811015610c2d57601b8181548110610b7157610b71613874565b6000918252602090912001546001600160a01b0384811691161415610c1b57601b8054610ba0906001906138a0565b81548110610bb057610bb0613874565b600091825260209091200154601b80546001600160a01b039092169183908110610bdc57610bdc613874565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b805480610b1357610b136138b7565b80610c25816138cd565b915050610b54565b50600092915050565b6001600160a01b03821660009081526008602052604081205460ff16610c885760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b60448201526064016109fe565b6013546001600160a01b0316331480610ca45750610ca4613141565b610cc05760405162461bcd60e51b81526004016109fe906138e8565b610cc8613141565b80610cd557506001821515145b610cf15760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b038316600081815260156020908152604091829020805460ff19168615159081179091558251938452606091840182905260069184019190915265426f72726f7760d01b6080840152908201527f4ab2c577b7459254dd330a38beef1d66ae70ba1ab28db7147d52d3a752a03cdc9060a0015b60405180910390a150805b92915050565b6001600160a01b03821660009081526020805260408120610d9d908361311f565b9392505050565b6013546000906001600160a01b0316331480610dc35750610dc3613141565b610ddf5760405162461bcd60e51b81526004016109fe906138e8565b610de7613141565b80610df457506001821515145b610e105760405162461bcd60e51b81526004016109fe90613854565b60138054831515600160b81b0260ff60b81b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610e7b9084906040808252600590820152645365697a6560d81b6060820152901515602082015260800190565b60405180910390a15090565b6060600b805480602002602001604051908101604052809291908181526020018280548015610edf57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ec1575b5050505050905090565b601b54601954606091600091610eff919061390b565b67ffffffffffffffff811115610f1757610f17613923565b604051908082528060200260200182016040528015610f40578160200160208202803683370190505b50905060005b60195460ff82161015610fc65760198160ff1681548110610f6957610f69613874565b9060005260206000200160009054906101000a90046001600160a01b0316828260ff1681518110610f9c57610f9c613874565b6001600160a01b039092166020928302919091019091015280610fbe81613939565b915050610f46565b60005b601b5460ff8216101561104957601b8160ff1681548110610fec57610fec613874565b6000918252602090912001546001600160a01b03168361100c8385613959565b60ff168151811061101f5761101f613874565b6001600160a01b03909216602092830291909101909101528061104181613939565b915050610fc9565b509092915050565b6001546001600160a01b0316331461107b5760405162461bcd60e51b81526004016109fe90613854565b601680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527feda98690e518e9a05f8ec6837663e188211b2da8f4906648b323f2c1d4434e29910160405180910390a15050565b6001600160a01b038116600090815260216020526040812081906110ff90613195565b905060005b81518110156111c057836001600160a01b03166317bfdfbc83838151811061112e5761112e613874565b60200260200101516040518263ffffffff1660e01b815260040161116191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a2919061397e565b6111ac908461390b565b9250806111b8816138cd565b915050611104565b5050919050565b6001600160a01b03821660009081526008602052604081205460ff166112195760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b60448201526064016109fe565b6013546001600160a01b03163314806112355750611235613141565b6112515760405162461bcd60e51b81526004016109fe906138e8565b611259613141565b8061126657506001821515145b6112825760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b038316600081815260146020908152604091829020805460ff19168615159081179091558251938452606091840182905260049184019190915263135a5b9d60e21b6080840152908201527f4ab2c577b7459254dd330a38beef1d66ae70ba1ab28db7147d52d3a752a03cdc9060a001610d6b565b60606019805480602002602001604051908101604052809291908181526020018280548015610edf576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ec1575050505050905090565b6001546001600160a01b031633148061138157506016546001600160a01b031633145b61139d5760405162461bcd60e51b81526004016109fe90613854565b828181158015906113ad57508082145b6113e25760405162461bcd60e51b8152602060048201526006602482015265085a5b9c1d5d60d21b60448201526064016109fe565b60005b828110156114de578484828181106113ff576113ff613874565b905060200201356018600089898581811061141c5761141c613874565b905060200201602081019061143191906133fb565b6001600160a01b0316815260208101919091526040016000205586868281811061145d5761145d613874565b905060200201602081019061147291906133fb565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f88686848181106114ae576114ae613874565b905060200201356040516114c491815260200190565b60405180910390a2806114d6816138cd565b9150506113e5565b50505050505050565b6114ef613141565b61150b5760405162461bcd60e51b81526004016109fe90613854565b8015611538576001600160a01b0383166000908152602080526040902061153290836131a2565b50505050565b6001600160a01b0383166000908152602080526040902061153290836131b7565b6009818154811061156957600080fd5b6000918252602090912001546001600160a01b0316905081565b600061158d613141565b61159d57610d76600160176131cc565b601380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e910160405180910390a160009392505050565b6001546001600160a01b031633148061162657506016546001600160a01b031633145b6116425760405162461bcd60e51b81526004016109fe90613854565b8281811580159061165257508082145b6116875760405162461bcd60e51b8152602060048201526006602482015265085a5b9c1d5d60d21b60448201526064016109fe565b60005b828110156114de578484828181106116a4576116a4613874565b90506020020135601760008989858181106116c1576116c1613874565b90506020020160208101906116d691906133fb565b6001600160a01b0316815260208101919091526040016000205586868281811061170257611702613874565b905060200201602081019061171791906133fb565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f686868481811061175357611753613874565b9050602002013560405161176991815260200190565b60405180910390a28061177b816138cd565b91505061168a565b600061178d613141565b6117a95760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b0382166117eb5760405162461bcd60e51b815260206004820152600960248201526808599b1e5dda19595b60ba1b60448201526064016109fe565b60005b601b5481101561187457601b818154811061180b5761180b613874565b6000918252602090912001546001600160a01b03848116911614156118625760405162461bcd60e51b815260206004820152600d60248201526c08585b1c9958591e5859191959609a1b60448201526064016109fe565b8061186c816138cd565b9150506117ee565b50601b805460018101825560009182527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319166001600160a01b0385161790555b601954811015610c2d57601981815481106118dd576118dd613874565b6000918252602090912001546001600160a01b038481169116141561190c5760198054610a98906001906138a0565b80611916816138cd565b9150506118c0565b601b818154811061156957600080fd5b600b818154811061156957600080fd5b6000836001600160a01b0316856001600160a01b031614801561195f575082155b1561196c575060006109d0565b6000196001600160a01b03851615611ae6576001600160a01b038086166000908152601d60209081526040808320938a168352929052205460ff1680156119df57506001600160a01b038086166000908152601f60209081526040808320938a168352929052206119dd908461311f565b155b156119ec57506000611ae6565b6001600160a01b038086166000908152601c60209081526040808320938a16835292905220548015801590611a4d57506001600160a01b038087166000908152601e60209081526040808320938b16835292905220611a4b908561311f565b155b15611ae45760035460405163fc57d4df60e01b81526001600160a01b038881166004830152600092169063fc57d4df90602401602060405180830381865afa158015611a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac1919061397e565b9050670de0b6b3a7640000611ad682846139ad565b611ae091906139e2565b9250505b505b6001600160a01b03861660009081526018602052604090205415801590611b2b57506001600160a01b03861660009081526020805260409020611b29908461311f565b155b15611c295760035460405163fc57d4df60e01b81526001600160a01b038881166004830152600092169063fc57d4df90602401602060405180830381865afa158015611b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f919061397e565b6001600160a01b03881660009081526018602052604081205491925090670de0b6b3a764000090611bd19084906139ad565b611bdb91906139e2565b6001600160a01b038916600090815260086020526040902060010154909150670de0b6b3a764000090611c0e90836139ad565b611c1891906139e2565b905082811015611c26578092505b50505b95945050505050565b6000611c3c613141565b611c585760405162461bcd60e51b81526004016109fe90613854565b738680ceabcb9b56913c519c069add6bc3494b702060005b600954811015611d215760098181548110611c8d57611c8d613874565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316637f15e2166040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e919061397e565b5080611d19816138cd565b915050611c70565b50604051632210724360e11b8152738fba84867ba458e7c6e2c024d2de3d0b5c3ea1c260048201526001600160a01b03821690634420e486906024016020604051808303816000875af1158015611d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da0919061397e565b91505090565b6000611db0613141565b611dc057610d76600160186131cc565b6001600160a01b03821660009081526008602052604090205460ff16611dec57610d76600860196131cc565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e50919061397e565b1115611e6257610d766014601a6131cc565b6001600160a01b0382166000908152600860209081526040808320805460ff19168155600101839055600980548251818502810185019093528083529192909190830182828015611edc57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ebe575b5050835193945083925060009150505b82811015611f4157856001600160a01b0316848281518110611f1057611f10613874565b60200260200101516001600160a01b03161415611f2f57809150611f41565b80611f39816138cd565b915050611eec565b50818110611f5157611f516139f6565b60098054611f61906001906138a0565b81548110611f7157611f71613874565b600091825260209091200154600980546001600160a01b039092169183908110611f9d57611f9d613874565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506009805480611fdc57611fdc6138b7565b6001900381819060005260206000200160006101000a8154906001600160a01b03021916905590556000600e6000876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206c9190613a0c565b6001600160a01b039081168252602080830193909352604091820160002080546001600160a01b031916948216949094179093555191871682527f302feb03efd5741df80efe7f97f5d93d74d46a542a3d312d0faae64fa1f3e0e9910160405180910390a1600095945050505050565b60408051602180825261044082019092526060919060009082602082016104208036833701905050905063692fd2a960e01b8161211884613a29565b93508360ff168151811061212e5761212e613874565b6001600160e01b031990921660209283029190910190910152631469217960e21b8161215984613a29565b93508360ff168151811061216f5761216f613874565b6001600160e01b03199092166020928302919091019091015263607ef6c160e01b8161219a84613a29565b93508360ff16815181106121b0576121b0613874565b6001600160e01b03199092166020928302919091019091015263d219fca760e01b816121db84613a29565b93508360ff16815181106121f1576121f1613874565b6001600160e01b03199092166020928302919091019091015263063b571360e51b8161221c84613a29565b93508360ff168151811061223257612232613874565b6001600160e01b0319909216602092830291909101909101526351c8491d60e01b8161225d84613a29565b93508360ff168151811061227357612273613874565b6001600160e01b031990921660209283029190910190910152632fa5169960e21b8161229e84613a29565b93508360ff16815181106122b4576122b4613874565b6001600160e01b03199092166020928302919091019091015263391957d760e01b816122df84613a29565b93508360ff16815181106122f5576122f5613874565b6001600160e01b031990921660209283029190910190910152632fad78d560e11b8161232084613a29565b93508360ff168151811061233657612336613874565b6001600160e01b031990921660209283029190910190910152633bcf7ec160e01b8161236184613a29565b93508360ff168151811061237757612377613874565b6001600160e01b0319909216602092830291909101909101526318c882a560e01b816123a284613a29565b93508360ff16815181106123b8576123b8613874565b6001600160e01b0319909216602092830291909101909101526323afd8d960e21b816123e384613a29565b93508360ff16815181106123f9576123f9613874565b6001600160e01b0319909216602092830291909101909101526305ae1b6f60e31b8161242484613a29565b93508360ff168151811061243a5761243a613874565b6001600160e01b031990921660209283029190910190910152631032c0b560e31b8161246584613a29565b93508360ff168151811061247b5761247b613874565b6001600160e01b03199092166020928302919091019091015263b0772d0b60e01b816124a684613a29565b93508360ff16815181106124bc576124bc613874565b6001600160e01b031990921660209283029190910190910152631955e6df60e11b816124e784613a29565b93508360ff16815181106124fd576124fd613874565b6001600160e01b03199092166020928302919091019091015263015c3b9b60e41b8161252884613a29565b93508360ff168151811061253e5761253e613874565b6001600160e01b03199092166020928302919091019091015263e680659160e01b8161256984613a29565b93508360ff168151811061257f5761257f613874565b6001600160e01b03199092166020928302919091019091015263d01f63f560e01b816125aa84613a29565b93508360ff16815181106125c0576125c0613874565b6001600160e01b031990921660209283029190910190910152633605b51b60e01b816125eb84613a29565b93508360ff168151811061260157612601613874565b6001600160e01b03199092166020928302919091019091015263d9e0ea6b60e01b8161262c84613a29565b93508360ff168151811061264257612642613874565b6001600160e01b031990921660209283029190910190910152634a76e72760e01b8161266d84613a29565b93508360ff168151811061268357612683613874565b6001600160e01b03199092166020928302919091019091015263084c846760e11b816126ae84613a29565b93508360ff16815181106126c4576126c4613874565b6001600160e01b03199092166020928302919091019091015263a5fb485760e01b816126ef84613a29565b93508360ff168151811061270557612705613874565b6001600160e01b03199092166020928302919091019091015263ee5b9a2f60e01b8161273084613a29565b93508360ff168151811061274657612746613874565b6001600160e01b03199092166020928302919091019091015263044707e760e11b8161277184613a29565b93508360ff168151811061278757612787613874565b6001600160e01b031990921660209283029190910190910152633e1d3ac360e21b816127b284613a29565b93508360ff16815181106127c8576127c8613874565b6001600160e01b031990921660209283029190910190910152631139fa0760e11b816127f384613a29565b93508360ff168151811061280957612809613874565b6001600160e01b03199092166020928302919091019091015263b325380160e01b8161283484613a29565b93508360ff168151811061284a5761284a613874565b6001600160e01b031990921660209283029190910190910152637db121fd60e11b8161287584613a29565b93508360ff168151811061288b5761288b613874565b6001600160e01b031990921660209283029190910190910152631d3965af60e11b816128b684613a29565b93508360ff16815181106128cc576128cc613874565b6001600160e01b031990921660209283029190910190910152633c1f884b60e11b816128f784613a29565b93508360ff168151811061290d5761290d613874565b6001600160e01b031990921660209283029190910190910152633f8af10b60e11b8161293884613a29565b93508360ff168151811061294e5761294e613874565b6001600160e01b03199092166020928302919091019091015260ff821615610d765760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016109fe565b6013546000906001600160a01b03163314806129d757506129d7613141565b6129f35760405162461bcd60e51b81526004016109fe906138e8565b6129fb613141565b80612a0857506001821515145b612a245760405162461bcd60e51b81526004016109fe90613854565b60138054831515600160b01b0260ff60b01b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610e7b9084906040808252600890820152672a3930b739b332b960c11b6060820152901515602082015260800190565b612a9a613141565b612ab65760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b039283166000908152601c602090815260408083209490951682529290925291902055565b60606009805480602002602001604051908101604052809291908181526020018280548015610edf576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ec1575050505050905090565b6001600160a01b0382166000908152602160205260408120610d9d908361311f565b612b6c613141565b612b885760405162461bcd60e51b81526004016109fe90613854565b8015612bb0576001600160a01b038316600090815260216020526040902061153290836131a2565b6001600160a01b038316600090815260216020526040902061153290836131b7565b6019818154811061156957600080fd5b612bea613141565b612c065760405162461bcd60e51b81526004016109fe90613854565b8015612c41576001600160a01b038085166000908152601f60209081526040808320938716835292905220612c3b90836131a2565b50611532565b6001600160a01b038085166000908152601f60209081526040808320938716835292905220612c7090836131b7565b5050505050565b60606011805480602002602001604051908101604052809291908181526020018280548015610edf576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ec1575050505050905090565b612cdf613141565b612cfb5760405162461bcd60e51b81526004016109fe90613854565b8015612d30576001600160a01b038085166000908152601e60209081526040808320938716835292905220612c3b90836131a2565b6001600160a01b038085166000908152601e60209081526040808320938716835292905220612c7090836131b7565b6011818154811061156957600080fd5b6000805b600954811015610c2d57600060098281548110612d9257612d92613874565b60009182526020808320909101546001600160a01b03908116808452600883526040808520928916855260029092019092529091205490915060ff1615612ddd575060019392505050565b5080612de8816138cd565b915050612d73565b60076020528160005260406000208181548110612e0c57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600b5460009060609080612e5057604080516000808252602082019092529250925050612fa6565b83612e5b5761012c93505b836000612e688284613a46565b9050612e7486846139e2565b94508015612ea05784612e86816138cd565b9550859050612e9688600161390b565b1415612ea0578091505b84612eac88600161390b565b1115612ecc5750506040805160008152602081019091529150612fa69050565b6000612ed887896139ad565b90508267ffffffffffffffff811115612ef357612ef3613923565b604051908082528060200260200182016040528015612f1c578160200160208202803683370190505b50945060005b83811015612fa057600b612f36838361390b565b81548110612f4657612f46613874565b9060005260206000200160009054906101000a90046001600160a01b0316868281518110612f7657612f76613874565b6001600160a01b039092166020928302919091019091015280612f98816138cd565b915050612f22565b50505050505b9250929050565b612fb5613141565b612fd15760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b039283166000908152601d6020908152604080832094909516825292909252919020805460ff1916911515919091179055565b6001600160a01b038084166000908152601f6020908152604080832093861683529290529081206109d0908361311f565b6001600160a01b03811660009081526020805260408120819061305e90613195565b905060005b81518110156111c057836001600160a01b0316633af9e66983838151811061308d5761308d613874565b60200260200101516040518263ffffffff1660e01b81526004016130c091906001600160a01b0391909116815260200190565b602060405180830381865afa1580156130dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613101919061397e565b61310b908461390b565b925080613117816138cd565b915050613063565b6001600160a01b03811660009081526001830160205260408120541515610d9d565b6001546000906001600160a01b0316331480156131675750600254600160a81b900460ff165b8061319057506000546001600160a01b0316331480156131905750600254600160a01b900460ff165b905090565b60606000610d9d83613245565b6000610d9d836001600160a01b0384166132a1565b6000610d9d836001600160a01b0384166132f0565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083601481111561320157613201613997565b83601a81111561321357613213613997565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610d9d57610d9d613997565b60608160000180548060200260200160405190810160405280929190818152602001828054801561329557602002820191906000526020600020905b815481526020019060010190808311613281575b50505050509050919050565b60008181526001830160205260408120546132e857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d76565b506000610d76565b600081815260018301602052604081205480156133d95760006133146001836138a0565b8554909150600090613328906001906138a0565b905081811461338d57600086600001828154811061334857613348613874565b906000526020600020015490508087600001848154811061336b5761336b613874565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061339e5761339e6138b7565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d76565b6000915050610d76565b6001600160a01b03811681146133f857600080fd5b50565b60006020828403121561340d57600080fd5b8135610d9d816133e3565b60008060006060848603121561342d57600080fd5b8335613438816133e3565b92506020840135613448816133e3565b91506040840135613458816133e3565b809150509250925092565b8035801515811461347357600080fd5b919050565b6000806040838503121561348b57600080fd5b8235613496816133e3565b91506134a460208401613463565b90509250929050565b600080604083850312156134c057600080fd5b82356134cb816133e3565b915060208301356134db816133e3565b809150509250929050565b6000602082840312156134f857600080fd5b610d9d82613463565b600081518084526020808501945080840160005b8381101561353a5781516001600160a01b031687529582019590820190600101613515565b509495945050505050565b602081526000610d9d6020830184613501565b60008083601f84011261356a57600080fd5b50813567ffffffffffffffff81111561358257600080fd5b6020830191508360208260051b8501011115612fa657600080fd5b600080600080604085870312156135b357600080fd5b843567ffffffffffffffff808211156135cb57600080fd5b6135d788838901613558565b909650945060208701359150808211156135f057600080fd5b506135fd87828801613558565b95989497509550505050565b60008060006060848603121561361e57600080fd5b8335613629816133e3565b92506020840135613639816133e3565b915061364760408501613463565b90509250925092565b60006020828403121561366257600080fd5b5035919050565b6000806000806080858703121561367f57600080fd5b843561368a816133e3565b9350602085013561369a816133e3565b92506136a860408601613463565b915060608501356136b8816133e3565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b818110156137055783516001600160e01b031916835292840192918401916001016136df565b50909695505050505050565b60008060006060848603121561372657600080fd5b8335613731816133e3565b92506020840135613741816133e3565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156137055783516001600160a01b03168352928401929184019160010161376e565b600080600080608085870312156137a957600080fd5b84356137b4816133e3565b935060208501356137c4816133e3565b925060408501356137d4816133e3565b91506137e260608601613463565b905092959194509250565b6000806040838503121561380057600080fd5b823561380b816133e3565b946020939093013593505050565b6000806040838503121561382c57600080fd5b50508035926020909101359150565b8281526040602082015260006109d06040830184613501565b60208082526006908201526510b0b236b4b760d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156138b2576138b261388a565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156138e1576138e161388a565b5060010190565b60208082526009908201526810b3bab0b93234b0b760b91b604082015260600190565b6000821982111561391e5761391e61388a565b500190565b634e487b7160e01b600052604160045260246000fd5b600060ff821660ff8114156139505761395061388a565b60010192915050565b600060ff821660ff84168060ff038211156139765761397661388a565b019392505050565b60006020828403121561399057600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b60008160001904831182151516156139c7576139c761388a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826139f1576139f16139cc565b500490565b634e487b7160e01b600052600160045260246000fd5b600060208284031215613a1e57600080fd5b8151610d9d816133e3565b600060ff821680613a3c57613a3c61388a565b6000190192915050565b600082613a5557613a556139cc565b50069056fea164736f6c634300080a000a", + "sourceMap": "429:21428:18:-:0;;;622:38:20;;;-1:-1:-1;;;;732:33:20;-1:-1:-1;;;732:33:20;;;429:21428:18;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106103e55760003560e01c80637515bafa1161020a578063be945a6411610125578063d9e0ea6b116100b8578063e875544611610087578063e87554461461094a578063ee5b9a2f14610953578063f851a44014610966578063f874eb0c14610979578063fb6243fa1461098c57600080fd5b8063d9e0ea6b146108ef578063dce1544914610902578063e6653f3d14610915578063e68065911461092957600080fd5b8063cf6bfd2d116100f4578063cf6bfd2d146108ad578063d01f63f5146108c1578063d219fca7146108c9578063d251fefc146108dc57600080fd5b8063be945a6414610861578063c6c5b0dd14610874578063c76ae26014610887578063c91a424f1461089a57600080fd5b80638ebf63641161019d578063ac0b0bb71161016c578063ac0b0bb714610818578063b0772d0b1461082c578063b095721014610841578063b32538011461084e57600080fd5b80638ebf6364146107a4578063940cd6f1146107b75780639b19251a146107e2578063a5fb48571461080557600080fd5b8063819605a8116101d9578063819605a81461072457806387f763031461073757806389f8132e1461074b5780638e8f294b1461076057600080fd5b80637515bafa146106e3578063783f1096146106f65780637dc0d1d0146107095780637f15e2161461071c57600080fd5b80633605b51b1161030557806351a485e411610298578063607ef6c111610267578063607ef6c114610664578063692fd2a9146106775780636bd02b8a1461068a5780636d154ea51461069d578063731f0c2b146106c057600080fd5b806351a485e41461061857806351c8491d1461062b57806352d84d1e1461063e5780635f5af1aa1461065157600080fd5b80633c94786f116102d45780633c94786f146105d35780634a584432146105e75780634a76e727146106075780634ada90af1461060f57600080fd5b80633605b51b14610590578063391957d7146105985780633a72cb5e146105ad5780633bcf7ec1146105c057600080fd5b80631c819e431161037d578063267822471161034c578063267822471461052c5780632d70db781461053f57806331ff47fa1461055257806332abcdbe1461057b57600080fd5b80631c819e43146104ad57806321af4569146104db5780632273f40e1461050657806324a3d6221461051957600080fd5b8063109908ce116103b9578063109908ce1461045c57806315c3b9b01461046f57806316dc15fe1461047757806318c882a51461049a57600080fd5b80627e3dd2146103ea57806302c3bcbb14610407578063088e0fce146104355780630a755ec214610448575b600080fd5b6103f2600181565b60405190151581526020015b60405180910390f35b6104276104153660046133fb565b60186020526000908152604090205481565b6040519081526020016103fe565b6103f2610443366004613418565b61099f565b6002546103f290600160a81b900460ff1681565b6103f261046a3660046133fb565b6109d8565b600b54610427565b6103f26104853660046133fb565b600d6020526000908152604090205460ff1681565b6103f26104a8366004613478565b610c36565b6103f26104bb3660046134ad565b601d60209081526000928352604080842090915290825290205460ff1681565b6016546104ee906001600160a01b031681565b6040516001600160a01b0390911681526020016103fe565b6103f26105143660046134ad565b610d7c565b6013546104ee906001600160a01b031681565b6002546104ee906001600160a01b031681565b6103f261054d3660046134e6565b610da4565b6104ee6105603660046133fb565b600e602052600090815260409020546001600160a01b031681565b610583610e87565b6040516103fe9190613545565b610583610ee9565b6105ab6105a63660046133fb565b611051565b005b6104276105bb3660046133fb565b6110dc565b6103f26105ce366004613478565b6111c7565b6013546103f290600160a01b900460ff1681565b6104276105f53660046133fb565b60176020526000908152604090205481565b6105836112fe565b61042760055481565b6105ab61062636600461359d565b61135e565b6105ab610639366004613609565b6114e7565b6104ee61064c366004613650565b611559565b61042761065f3660046133fb565b611583565b6105ab61067236600461359d565b611603565b6103f26106853660046133fb565b611783565b6104ee610698366004613650565b61191e565b6103f26106ab3660046133fb565b60156020526000908152604090205460ff1681565b6103f26106ce3660046133fb565b60146020526000908152604090205460ff1681565b6104ee6106f1366004613650565b61192e565b610427610704366004613669565b61193e565b6003546104ee906001600160a01b031681565b610427611c32565b6104276107323660046133fb565b611da6565b6013546103f290600160b01b900460ff1681565b6107536120dc565b6040516103fe91906136c3565b61078d61076e3660046133fb565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016103fe565b6103f26107b23660046134e6565b6129b8565b6104276107c53660046134ad565b601c60209081526000928352604080842090915290825290205481565b6103f26107f03660046133fb565b60106020526000908152604090205460ff1681565b6105ab610813366004613711565b612a92565b6013546103f290600160b81b900460ff1681565b610834612ae2565b6040516103fe9190613752565b600f546103f29060ff1681565b6103f261085c3660046134ad565b612b42565b6105ab61086f366004613609565b612b64565b6104ee610882366004613650565b612bd2565b6105ab610895366004613793565b612be2565b6000546104ee906001600160a01b031681565b6002546103f290600160a01b900460ff1681565b610583612c77565b6105ab6108d7366004613793565b612cd7565b6104ee6108ea366004613650565b612d5f565b6103f26108fd3660046133fb565b612d6f565b6104ee6109103660046137ed565b612df0565b6013546103f290600160a81b900460ff1681565b61093c610937366004613819565b612e28565b6040516103fe92919061383b565b61042760045481565b6105ab610961366004613609565b612fad565b6001546104ee906001600160a01b031681565b6103f2610987366004613418565b61300b565b61042761099a3660046133fb565b61303c565b6001600160a01b038084166000908152601e6020908152604080832093861683529290529081206109d0908361311f565b949350505050565b60006109e2613141565b610a075760405162461bcd60e51b81526004016109fe90613854565b60405180910390fd5b6001600160a01b038216610a495760405162461bcd60e51b815260206004820152600960248201526808599b1e5dda19595b60ba1b60448201526064016109fe565b60005b601954811015610b505760198181548110610a6957610a69613874565b6000918252602090912001546001600160a01b0384811691161415610b3e5760198054610a98906001906138a0565b81548110610aa857610aa8613874565b600091825260209091200154601980546001600160a01b039092169183908110610ad457610ad4613874565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506019805480610b1357610b136138b7565b600082815260209020810160001990810180546001600160a01b031916905501905550600192915050565b80610b48816138cd565b915050610a4c565b5060005b601b54811015610c2d57601b8181548110610b7157610b71613874565b6000918252602090912001546001600160a01b0384811691161415610c1b57601b8054610ba0906001906138a0565b81548110610bb057610bb0613874565b600091825260209091200154601b80546001600160a01b039092169183908110610bdc57610bdc613874565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550601b805480610b1357610b136138b7565b80610c25816138cd565b915050610b54565b50600092915050565b6001600160a01b03821660009081526008602052604081205460ff16610c885760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b60448201526064016109fe565b6013546001600160a01b0316331480610ca45750610ca4613141565b610cc05760405162461bcd60e51b81526004016109fe906138e8565b610cc8613141565b80610cd557506001821515145b610cf15760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b038316600081815260156020908152604091829020805460ff19168615159081179091558251938452606091840182905260069184019190915265426f72726f7760d01b6080840152908201527f4ab2c577b7459254dd330a38beef1d66ae70ba1ab28db7147d52d3a752a03cdc9060a0015b60405180910390a150805b92915050565b6001600160a01b03821660009081526020805260408120610d9d908361311f565b9392505050565b6013546000906001600160a01b0316331480610dc35750610dc3613141565b610ddf5760405162461bcd60e51b81526004016109fe906138e8565b610de7613141565b80610df457506001821515145b610e105760405162461bcd60e51b81526004016109fe90613854565b60138054831515600160b81b0260ff60b81b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610e7b9084906040808252600590820152645365697a6560d81b6060820152901515602082015260800190565b60405180910390a15090565b6060600b805480602002602001604051908101604052809291908181526020018280548015610edf57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ec1575b5050505050905090565b601b54601954606091600091610eff919061390b565b67ffffffffffffffff811115610f1757610f17613923565b604051908082528060200260200182016040528015610f40578160200160208202803683370190505b50905060005b60195460ff82161015610fc65760198160ff1681548110610f6957610f69613874565b9060005260206000200160009054906101000a90046001600160a01b0316828260ff1681518110610f9c57610f9c613874565b6001600160a01b039092166020928302919091019091015280610fbe81613939565b915050610f46565b60005b601b5460ff8216101561104957601b8160ff1681548110610fec57610fec613874565b6000918252602090912001546001600160a01b03168361100c8385613959565b60ff168151811061101f5761101f613874565b6001600160a01b03909216602092830291909101909101528061104181613939565b915050610fc9565b509092915050565b6001546001600160a01b0316331461107b5760405162461bcd60e51b81526004016109fe90613854565b601680546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527feda98690e518e9a05f8ec6837663e188211b2da8f4906648b323f2c1d4434e29910160405180910390a15050565b6001600160a01b038116600090815260216020526040812081906110ff90613195565b905060005b81518110156111c057836001600160a01b03166317bfdfbc83838151811061112e5761112e613874565b60200260200101516040518263ffffffff1660e01b815260040161116191906001600160a01b0391909116815260200190565b602060405180830381865afa15801561117e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111a2919061397e565b6111ac908461390b565b9250806111b8816138cd565b915050611104565b5050919050565b6001600160a01b03821660009081526008602052604081205460ff166112195760405162461bcd60e51b8152602060048201526007602482015266085b585c9ad95d60ca1b60448201526064016109fe565b6013546001600160a01b03163314806112355750611235613141565b6112515760405162461bcd60e51b81526004016109fe906138e8565b611259613141565b8061126657506001821515145b6112825760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b038316600081815260146020908152604091829020805460ff19168615159081179091558251938452606091840182905260049184019190915263135a5b9d60e21b6080840152908201527f4ab2c577b7459254dd330a38beef1d66ae70ba1ab28db7147d52d3a752a03cdc9060a001610d6b565b60606019805480602002602001604051908101604052809291908181526020018280548015610edf576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ec1575050505050905090565b6001546001600160a01b031633148061138157506016546001600160a01b031633145b61139d5760405162461bcd60e51b81526004016109fe90613854565b828181158015906113ad57508082145b6113e25760405162461bcd60e51b8152602060048201526006602482015265085a5b9c1d5d60d21b60448201526064016109fe565b60005b828110156114de578484828181106113ff576113ff613874565b905060200201356018600089898581811061141c5761141c613874565b905060200201602081019061143191906133fb565b6001600160a01b0316815260208101919091526040016000205586868281811061145d5761145d613874565b905060200201602081019061147291906133fb565b6001600160a01b03167f9e0ad9cee10bdf36b7fbd38910c0bdff0f275ace679b45b922381c2723d676f88686848181106114ae576114ae613874565b905060200201356040516114c491815260200190565b60405180910390a2806114d6816138cd565b9150506113e5565b50505050505050565b6114ef613141565b61150b5760405162461bcd60e51b81526004016109fe90613854565b8015611538576001600160a01b0383166000908152602080526040902061153290836131a2565b50505050565b6001600160a01b0383166000908152602080526040902061153290836131b7565b6009818154811061156957600080fd5b6000918252602090912001546001600160a01b0316905081565b600061158d613141565b61159d57610d76600160176131cc565b601380546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527f0613b6ee6a04f0d09f390e4d9318894b9f6ac7fd83897cd8d18896ba579c401e910160405180910390a160009392505050565b6001546001600160a01b031633148061162657506016546001600160a01b031633145b6116425760405162461bcd60e51b81526004016109fe90613854565b8281811580159061165257508082145b6116875760405162461bcd60e51b8152602060048201526006602482015265085a5b9c1d5d60d21b60448201526064016109fe565b60005b828110156114de578484828181106116a4576116a4613874565b90506020020135601760008989858181106116c1576116c1613874565b90506020020160208101906116d691906133fb565b6001600160a01b0316815260208101919091526040016000205586868281811061170257611702613874565b905060200201602081019061171791906133fb565b6001600160a01b03167f6f1951b2aad10f3fc81b86d91105b413a5b3f847a34bbc5ce1904201b14438f686868481811061175357611753613874565b9050602002013560405161176991815260200190565b60405180910390a28061177b816138cd565b91505061168a565b600061178d613141565b6117a95760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b0382166117eb5760405162461bcd60e51b815260206004820152600960248201526808599b1e5dda19595b60ba1b60448201526064016109fe565b60005b601b5481101561187457601b818154811061180b5761180b613874565b6000918252602090912001546001600160a01b03848116911614156118625760405162461bcd60e51b815260206004820152600d60248201526c08585b1c9958591e5859191959609a1b60448201526064016109fe565b8061186c816138cd565b9150506117ee565b50601b805460018101825560009182527f3ad8aa4f87544323a9d1e5dd902f40c356527a7955687113db5f9a85ad579dc10180546001600160a01b0319166001600160a01b0385161790555b601954811015610c2d57601981815481106118dd576118dd613874565b6000918252602090912001546001600160a01b038481169116141561190c5760198054610a98906001906138a0565b80611916816138cd565b9150506118c0565b601b818154811061156957600080fd5b600b818154811061156957600080fd5b6000836001600160a01b0316856001600160a01b031614801561195f575082155b1561196c575060006109d0565b6000196001600160a01b03851615611ae6576001600160a01b038086166000908152601d60209081526040808320938a168352929052205460ff1680156119df57506001600160a01b038086166000908152601f60209081526040808320938a168352929052206119dd908461311f565b155b156119ec57506000611ae6565b6001600160a01b038086166000908152601c60209081526040808320938a16835292905220548015801590611a4d57506001600160a01b038087166000908152601e60209081526040808320938b16835292905220611a4b908561311f565b155b15611ae45760035460405163fc57d4df60e01b81526001600160a01b038881166004830152600092169063fc57d4df90602401602060405180830381865afa158015611a9d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ac1919061397e565b9050670de0b6b3a7640000611ad682846139ad565b611ae091906139e2565b9250505b505b6001600160a01b03861660009081526018602052604090205415801590611b2b57506001600160a01b03861660009081526020805260409020611b29908461311f565b155b15611c295760035460405163fc57d4df60e01b81526001600160a01b038881166004830152600092169063fc57d4df90602401602060405180830381865afa158015611b7b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b9f919061397e565b6001600160a01b03881660009081526018602052604081205491925090670de0b6b3a764000090611bd19084906139ad565b611bdb91906139e2565b6001600160a01b038916600090815260086020526040902060010154909150670de0b6b3a764000090611c0e90836139ad565b611c1891906139e2565b905082811015611c26578092505b50505b95945050505050565b6000611c3c613141565b611c585760405162461bcd60e51b81526004016109fe90613854565b738680ceabcb9b56913c519c069add6bc3494b702060005b600954811015611d215760098181548110611c8d57611c8d613874565b9060005260206000200160009054906101000a90046001600160a01b03166001600160a01b0316637f15e2166040518163ffffffff1660e01b81526004016020604051808303816000875af1158015611cea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0e919061397e565b5080611d19816138cd565b915050611c70565b50604051632210724360e11b8152738fba84867ba458e7c6e2c024d2de3d0b5c3ea1c260048201526001600160a01b03821690634420e486906024016020604051808303816000875af1158015611d7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611da0919061397e565b91505090565b6000611db0613141565b611dc057610d76600160186131cc565b6001600160a01b03821660009081526008602052604090205460ff16611dec57610d76600860196131cc565b6000826001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e50919061397e565b1115611e6257610d766014601a6131cc565b6001600160a01b0382166000908152600860209081526040808320805460ff19168155600101839055600980548251818502810185019093528083529192909190830182828015611edc57602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311611ebe575b5050835193945083925060009150505b82811015611f4157856001600160a01b0316848281518110611f1057611f10613874565b60200260200101516001600160a01b03161415611f2f57809150611f41565b80611f39816138cd565b915050611eec565b50818110611f5157611f516139f6565b60098054611f61906001906138a0565b81548110611f7157611f71613874565b600091825260209091200154600980546001600160a01b039092169183908110611f9d57611f9d613874565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055506009805480611fdc57611fdc6138b7565b6001900381819060005260206000200160006101000a8154906001600160a01b03021916905590556000600e6000876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061206c9190613a0c565b6001600160a01b039081168252602080830193909352604091820160002080546001600160a01b031916948216949094179093555191871682527f302feb03efd5741df80efe7f97f5d93d74d46a542a3d312d0faae64fa1f3e0e9910160405180910390a1600095945050505050565b60408051602180825261044082019092526060919060009082602082016104208036833701905050905063692fd2a960e01b8161211884613a29565b93508360ff168151811061212e5761212e613874565b6001600160e01b031990921660209283029190910190910152631469217960e21b8161215984613a29565b93508360ff168151811061216f5761216f613874565b6001600160e01b03199092166020928302919091019091015263607ef6c160e01b8161219a84613a29565b93508360ff16815181106121b0576121b0613874565b6001600160e01b03199092166020928302919091019091015263d219fca760e01b816121db84613a29565b93508360ff16815181106121f1576121f1613874565b6001600160e01b03199092166020928302919091019091015263063b571360e51b8161221c84613a29565b93508360ff168151811061223257612232613874565b6001600160e01b0319909216602092830291909101909101526351c8491d60e01b8161225d84613a29565b93508360ff168151811061227357612273613874565b6001600160e01b031990921660209283029190910190910152632fa5169960e21b8161229e84613a29565b93508360ff16815181106122b4576122b4613874565b6001600160e01b03199092166020928302919091019091015263391957d760e01b816122df84613a29565b93508360ff16815181106122f5576122f5613874565b6001600160e01b031990921660209283029190910190910152632fad78d560e11b8161232084613a29565b93508360ff168151811061233657612336613874565b6001600160e01b031990921660209283029190910190910152633bcf7ec160e01b8161236184613a29565b93508360ff168151811061237757612377613874565b6001600160e01b0319909216602092830291909101909101526318c882a560e01b816123a284613a29565b93508360ff16815181106123b8576123b8613874565b6001600160e01b0319909216602092830291909101909101526323afd8d960e21b816123e384613a29565b93508360ff16815181106123f9576123f9613874565b6001600160e01b0319909216602092830291909101909101526305ae1b6f60e31b8161242484613a29565b93508360ff168151811061243a5761243a613874565b6001600160e01b031990921660209283029190910190910152631032c0b560e31b8161246584613a29565b93508360ff168151811061247b5761247b613874565b6001600160e01b03199092166020928302919091019091015263b0772d0b60e01b816124a684613a29565b93508360ff16815181106124bc576124bc613874565b6001600160e01b031990921660209283029190910190910152631955e6df60e11b816124e784613a29565b93508360ff16815181106124fd576124fd613874565b6001600160e01b03199092166020928302919091019091015263015c3b9b60e41b8161252884613a29565b93508360ff168151811061253e5761253e613874565b6001600160e01b03199092166020928302919091019091015263e680659160e01b8161256984613a29565b93508360ff168151811061257f5761257f613874565b6001600160e01b03199092166020928302919091019091015263d01f63f560e01b816125aa84613a29565b93508360ff16815181106125c0576125c0613874565b6001600160e01b031990921660209283029190910190910152633605b51b60e01b816125eb84613a29565b93508360ff168151811061260157612601613874565b6001600160e01b03199092166020928302919091019091015263d9e0ea6b60e01b8161262c84613a29565b93508360ff168151811061264257612642613874565b6001600160e01b031990921660209283029190910190910152634a76e72760e01b8161266d84613a29565b93508360ff168151811061268357612683613874565b6001600160e01b03199092166020928302919091019091015263084c846760e11b816126ae84613a29565b93508360ff16815181106126c4576126c4613874565b6001600160e01b03199092166020928302919091019091015263a5fb485760e01b816126ef84613a29565b93508360ff168151811061270557612705613874565b6001600160e01b03199092166020928302919091019091015263ee5b9a2f60e01b8161273084613a29565b93508360ff168151811061274657612746613874565b6001600160e01b03199092166020928302919091019091015263044707e760e11b8161277184613a29565b93508360ff168151811061278757612787613874565b6001600160e01b031990921660209283029190910190910152633e1d3ac360e21b816127b284613a29565b93508360ff16815181106127c8576127c8613874565b6001600160e01b031990921660209283029190910190910152631139fa0760e11b816127f384613a29565b93508360ff168151811061280957612809613874565b6001600160e01b03199092166020928302919091019091015263b325380160e01b8161283484613a29565b93508360ff168151811061284a5761284a613874565b6001600160e01b031990921660209283029190910190910152637db121fd60e11b8161287584613a29565b93508360ff168151811061288b5761288b613874565b6001600160e01b031990921660209283029190910190910152631d3965af60e11b816128b684613a29565b93508360ff16815181106128cc576128cc613874565b6001600160e01b031990921660209283029190910190910152633c1f884b60e11b816128f784613a29565b93508360ff168151811061290d5761290d613874565b6001600160e01b031990921660209283029190910190910152633f8af10b60e11b8161293884613a29565b93508360ff168151811061294e5761294e613874565b6001600160e01b03199092166020928302919091019091015260ff821615610d765760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e6774680000000060448201526064016109fe565b6013546000906001600160a01b03163314806129d757506129d7613141565b6129f35760405162461bcd60e51b81526004016109fe906138e8565b6129fb613141565b80612a0857506001821515145b612a245760405162461bcd60e51b81526004016109fe90613854565b60138054831515600160b01b0260ff60b01b199091161790556040517fef159d9a32b2472e32b098f954f3ce62d232939f1c207070b584df1814de2de090610e7b9084906040808252600890820152672a3930b739b332b960c11b6060820152901515602082015260800190565b612a9a613141565b612ab65760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b039283166000908152601c602090815260408083209490951682529290925291902055565b60606009805480602002602001604051908101604052809291908181526020018280548015610edf576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ec1575050505050905090565b6001600160a01b0382166000908152602160205260408120610d9d908361311f565b612b6c613141565b612b885760405162461bcd60e51b81526004016109fe90613854565b8015612bb0576001600160a01b038316600090815260216020526040902061153290836131a2565b6001600160a01b038316600090815260216020526040902061153290836131b7565b6019818154811061156957600080fd5b612bea613141565b612c065760405162461bcd60e51b81526004016109fe90613854565b8015612c41576001600160a01b038085166000908152601f60209081526040808320938716835292905220612c3b90836131a2565b50611532565b6001600160a01b038085166000908152601f60209081526040808320938716835292905220612c7090836131b7565b5050505050565b60606011805480602002602001604051908101604052809291908181526020018280548015610edf576020028201919060005260206000209081546001600160a01b03168152600190910190602001808311610ec1575050505050905090565b612cdf613141565b612cfb5760405162461bcd60e51b81526004016109fe90613854565b8015612d30576001600160a01b038085166000908152601e60209081526040808320938716835292905220612c3b90836131a2565b6001600160a01b038085166000908152601e60209081526040808320938716835292905220612c7090836131b7565b6011818154811061156957600080fd5b6000805b600954811015610c2d57600060098281548110612d9257612d92613874565b60009182526020808320909101546001600160a01b03908116808452600883526040808520928916855260029092019092529091205490915060ff1615612ddd575060019392505050565b5080612de8816138cd565b915050612d73565b60076020528160005260406000208181548110612e0c57600080fd5b6000918252602090912001546001600160a01b03169150829050565b600b5460009060609080612e5057604080516000808252602082019092529250925050612fa6565b83612e5b5761012c93505b836000612e688284613a46565b9050612e7486846139e2565b94508015612ea05784612e86816138cd565b9550859050612e9688600161390b565b1415612ea0578091505b84612eac88600161390b565b1115612ecc5750506040805160008152602081019091529150612fa69050565b6000612ed887896139ad565b90508267ffffffffffffffff811115612ef357612ef3613923565b604051908082528060200260200182016040528015612f1c578160200160208202803683370190505b50945060005b83811015612fa057600b612f36838361390b565b81548110612f4657612f46613874565b9060005260206000200160009054906101000a90046001600160a01b0316868281518110612f7657612f76613874565b6001600160a01b039092166020928302919091019091015280612f98816138cd565b915050612f22565b50505050505b9250929050565b612fb5613141565b612fd15760405162461bcd60e51b81526004016109fe90613854565b6001600160a01b039283166000908152601d6020908152604080832094909516825292909252919020805460ff1916911515919091179055565b6001600160a01b038084166000908152601f6020908152604080832093861683529290529081206109d0908361311f565b6001600160a01b03811660009081526020805260408120819061305e90613195565b905060005b81518110156111c057836001600160a01b0316633af9e66983838151811061308d5761308d613874565b60200260200101516040518263ffffffff1660e01b81526004016130c091906001600160a01b0391909116815260200190565b602060405180830381865afa1580156130dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613101919061397e565b61310b908461390b565b925080613117816138cd565b915050613063565b6001600160a01b03811660009081526001830160205260408120541515610d9d565b6001546000906001600160a01b0316331480156131675750600254600160a81b900460ff165b8061319057506000546001600160a01b0316331480156131905750600254600160a01b900460ff165b905090565b60606000610d9d83613245565b6000610d9d836001600160a01b0384166132a1565b6000610d9d836001600160a01b0384166132f0565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa083601481111561320157613201613997565b83601a81111561321357613213613997565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610d9d57610d9d613997565b60608160000180548060200260200160405190810160405280929190818152602001828054801561329557602002820191906000526020600020905b815481526020019060010190808311613281575b50505050509050919050565b60008181526001830160205260408120546132e857508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610d76565b506000610d76565b600081815260018301602052604081205480156133d95760006133146001836138a0565b8554909150600090613328906001906138a0565b905081811461338d57600086600001828154811061334857613348613874565b906000526020600020015490508087600001848154811061336b5761336b613874565b6000918252602080832090910192909255918252600188019052604090208390555b855486908061339e5761339e6138b7565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610d76565b6000915050610d76565b6001600160a01b03811681146133f857600080fd5b50565b60006020828403121561340d57600080fd5b8135610d9d816133e3565b60008060006060848603121561342d57600080fd5b8335613438816133e3565b92506020840135613448816133e3565b91506040840135613458816133e3565b809150509250925092565b8035801515811461347357600080fd5b919050565b6000806040838503121561348b57600080fd5b8235613496816133e3565b91506134a460208401613463565b90509250929050565b600080604083850312156134c057600080fd5b82356134cb816133e3565b915060208301356134db816133e3565b809150509250929050565b6000602082840312156134f857600080fd5b610d9d82613463565b600081518084526020808501945080840160005b8381101561353a5781516001600160a01b031687529582019590820190600101613515565b509495945050505050565b602081526000610d9d6020830184613501565b60008083601f84011261356a57600080fd5b50813567ffffffffffffffff81111561358257600080fd5b6020830191508360208260051b8501011115612fa657600080fd5b600080600080604085870312156135b357600080fd5b843567ffffffffffffffff808211156135cb57600080fd5b6135d788838901613558565b909650945060208701359150808211156135f057600080fd5b506135fd87828801613558565b95989497509550505050565b60008060006060848603121561361e57600080fd5b8335613629816133e3565b92506020840135613639816133e3565b915061364760408501613463565b90509250925092565b60006020828403121561366257600080fd5b5035919050565b6000806000806080858703121561367f57600080fd5b843561368a816133e3565b9350602085013561369a816133e3565b92506136a860408601613463565b915060608501356136b8816133e3565b939692955090935050565b6020808252825182820181905260009190848201906040850190845b818110156137055783516001600160e01b031916835292840192918401916001016136df565b50909695505050505050565b60008060006060848603121561372657600080fd5b8335613731816133e3565b92506020840135613741816133e3565b929592945050506040919091013590565b6020808252825182820181905260009190848201906040850190845b818110156137055783516001600160a01b03168352928401929184019160010161376e565b600080600080608085870312156137a957600080fd5b84356137b4816133e3565b935060208501356137c4816133e3565b925060408501356137d4816133e3565b91506137e260608601613463565b905092959194509250565b6000806040838503121561380057600080fd5b823561380b816133e3565b946020939093013593505050565b6000806040838503121561382c57600080fd5b50508035926020909101359150565b8281526040602082015260006109d06040830184613501565b60208082526006908201526510b0b236b4b760d11b604082015260600190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000828210156138b2576138b261388a565b500390565b634e487b7160e01b600052603160045260246000fd5b60006000198214156138e1576138e161388a565b5060010190565b60208082526009908201526810b3bab0b93234b0b760b91b604082015260600190565b6000821982111561391e5761391e61388a565b500190565b634e487b7160e01b600052604160045260246000fd5b600060ff821660ff8114156139505761395061388a565b60010192915050565b600060ff821660ff84168060ff038211156139765761397661388a565b019392505050565b60006020828403121561399057600080fd5b5051919050565b634e487b7160e01b600052602160045260246000fd5b60008160001904831182151516156139c7576139c761388a565b500290565b634e487b7160e01b600052601260045260246000fd5b6000826139f1576139f16139cc565b500490565b634e487b7160e01b600052600160045260246000fd5b600060208284031215613a1e57600080fd5b8151610d9d816133e3565b600060ff821680613a3c57613a3c61388a565b6000190192915050565b600082613a5557613a556139cc565b50069056fea164736f6c634300080a000a", + "sourceMap": "429:21428:18:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9963:41:19;;10000:4;9963:41;;;;;179:14:504;;172:22;154:41;;142:2;127:18;9963:41:19;;;;;;;;4769:45:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;740:25:504;;;728:2;713:18;4769:45:20;594:177:504;14704:252:18;;;;;;:::i;:::-;;:::i;732:33:20:-;;;;;-1:-1:-1;;;732:33:20;;;;;;20305:889:18;;;;;;:::i;:::-;;:::i;18015:99::-;18090:12;:19;18015:99;;3013:41:20;;;;;;:::i;:::-;;;;;;;;;;;;;;;;11361:397:18;;;;;;:::i;:::-;;:::i;5549:87:20:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;4412:32;;;;;-1:-1:-1;;;;;4412:32:20;;;;;;-1:-1:-1;;;;;2369:32:504;;;2351:51;;2339:2;2324:18;4412:32:20;2205:203:504;16214:154:18;;;;;;:::i;:::-;;:::i;3912:28:20:-;;;;;-1:-1:-1;;;;;3912:28:20;;;517:27;;;;;-1:-1:-1;;;;;517:27:20;;;12063:288:18;;;;;;:::i;:::-;;:::i;3138:54:20:-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3138:54:20;;;17915:96:18;;;:::i;:::-;;;;;;;:::i;19438:506::-;;;:::i;9707:484::-;;;;;;:::i;:::-;;:::i;:::-;;17133:332;;;;;;:::i;:::-;;:::i;10966:391::-;;;;;;:::i;:::-;;:::i;3944:31:20:-;;;;;-1:-1:-1;;;3944:31:20;;;;;;4585:45;;;;;;:::i;:::-;;;;;;;;;;;;;;19948:110:18;;;:::i;1446:43:20:-;;;;;;8026:516:18;;;;;;:::i;:::-;;:::i;15945:265::-;;;;;;:::i;:::-;;:::i;2513:27:20:-;;;;;;:::i;:::-;;:::i;10410:552:18:-;;;;;;:::i;:::-;;:::i;9037:516::-;;;;;;:::i;:::-;;:::i;4520:773::-;;;;;;:::i;:::-;;:::i;5229:47:20:-;;;;;;:::i;:::-;;:::i;4143:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4089:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;2749:29;;;;;;:::i;:::-;;:::i;5297:2224:18:-;;;;;;:::i;:::-;;:::i;1166:29:20:-;;;;;-1:-1:-1;;;;;1166:29:20;;;21494:361:18;;;:::i;12690:1367::-;;;;;;:::i;:::-;;:::i;4016:34:20:-;;;;;-1:-1:-1;;;4016:34:20;;;;;;1510:2727:18;;;:::i;:::-;;;;;;;:::i;2431:41:20:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7389:14:504;;7382:22;7364:41;;7436:2;7421:18;;7414:34;;;;7337:18;2431:41:20;7196:258:504;11762:297:18;;;;;;:::i;:::-;;:::i;5380:77:20:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;3404:41;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14061:244:18;;;;;;:::i;:::-;;:::i;4054:31:20:-;;;;;-1:-1:-1;;;4054:31:20;;;;;;17637:92:18;;;:::i;:::-;;;;;;;:::i;3261:28:20:-;;;;;;;;;16975:154:18;;;;;;:::i;:::-;;:::i;16706:265::-;;;;;;:::i;:::-;;:::i;4893:36:20:-;;;;;;:::i;:::-;;:::i;15232:427:18:-;;;;;;:::i;:::-;;:::i;332:33:20:-;;;;;-1:-1:-1;;;;;332:33:20;;;622:38;;;;;-1:-1:-1;;;622:38:20;;;;;;19252:97:18;;;:::i;14309:391::-;;;;;;:::i;:::-;;:::i;3501:31:20:-;;;;;;:::i;:::-;;:::i;21198:292:18:-;;;;;;:::i;:::-;;:::i;1739:50:20:-;;;;;;:::i;:::-;;:::i;3979:33::-;;;;;-1:-1:-1;;;3979:33:20;;;;;;18118:940:18;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1304:34:20:-;;;;;;14960:268:18;;;;;;:::i;:::-;;:::i;427:20:20:-;;;;;-1:-1:-1;;;;;427:20:20;;;15663:278:18;;;;;;:::i;:::-;;:::i;16372:330::-;;;;;;:::i;:::-;;:::i;14704:252::-;-1:-1:-1;;;;;14870:45:18;;;14851:4;14870:45;;;:31;:45;;;;;;;;:63;;;;;;;;;;;:81;;14943:7;14870:72;:81::i;:::-;14863:88;14704:252;-1:-1:-1;;;;14704:252:18:o;20305:889::-;20373:4;20393:16;:14;:16::i;:::-;20385:35;;;;-1:-1:-1;;;20385:35:18;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1;;;;;20434:29:18;;20426:51;;;;-1:-1:-1;;;20426:51:18;;10873:2:504;20426:51:18;;;10855:21:504;10912:1;10892:18;;;10885:29;-1:-1:-1;;;10930:18:504;;;10923:39;10979:18;;20426:51:18;10671:332:504;20426:51:18;20524:9;20519:269;20543:19;:26;20539:30;;20519:269;;;20607:19;20627:1;20607:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20588:41:18;;;20607:22;;20588:41;20584:198;;;20666:19;20686:26;;:30;;20715:1;;20686:30;:::i;:::-;20666:51;;;;;;;;:::i;:::-;;;;;;;;;;;20641:19;:22;;-1:-1:-1;;;;;20666:51:18;;;;20661:1;;20641:22;;;;;;:::i;:::-;;;;;;;;;:76;;;;;-1:-1:-1;;;;;20641:76:18;;;;;-1:-1:-1;;;;;20641:76:18;;;;;;20727:19;:25;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;20727:25:18;;;;;-1:-1:-1;;;;;;20727:25:18;;;;;;-1:-1:-1;20727:25:18;;20305:889;-1:-1:-1;;20305:889:18:o;20584:198::-;20571:3;;;;:::i;:::-;;;;20519:269;;;;20841:9;20836:335;20860:30;:37;20856:41;;20836:335;;;20935:30;20966:1;20935:33;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;20916:52:18;;;20935:33;;20916:52;20912:253;;;21016:30;21047:37;;:41;;21087:1;;21047:41;:::i;:::-;21016:73;;;;;;;;:::i;:::-;;;;;;;;;;;20980:30;:33;;-1:-1:-1;;;;;21016:73:18;;;;21011:1;;20980:33;;;;;;:::i;:::-;;;;;;;;;:109;;;;;-1:-1:-1;;;;;20980:109:18;;;;;-1:-1:-1;;;;;20980:109:18;;;;;;21099:30;:36;;;;;;;:::i;20912:253::-;20899:3;;;;:::i;:::-;;;;20836:335;;;-1:-1:-1;21184:5:18;;20305:889;-1:-1:-1;;20305:889:18:o;11361:397::-;-1:-1:-1;;;;;11451:24:18;;11431:4;11451:24;;;:7;:24;;;;;:33;;;11443:53;;;;-1:-1:-1;;;11443:53:18;;11876:2:504;11443:53:18;;;11858:21:504;11915:1;11895:18;;;11888:29;-1:-1:-1;;;11933:18:504;;;11926:37;11980:18;;11443:53:18;11674:330:504;11443:53:18;11524:13;;-1:-1:-1;;;;;11524:13:18;11510:10;:27;;:47;;;11541:16;:14;:16::i;:::-;11502:69;;;;-1:-1:-1;;;11502:69:18;;;;;;;:::i;:::-;11585:16;:14;:16::i;:::-;:33;;;-1:-1:-1;11614:4:18;11605:13;;;;11585:33;11577:52;;;;-1:-1:-1;;;11577:52:18;;;;;;;:::i;:::-;-1:-1:-1;;;;;11636:37:18;;;;;;:20;:37;;;;;;;;;:45;;-1:-1:-1;;11636:45:18;;;;;;;;;;11692:43;;12597:51:504;;;12684:2;12664:18;;;12657:30;;;12723:1;12703:18;;;12696:29;;;;-1:-1:-1;;;12756:3:504;12741:19;;12734:37;12823:18;;;12816:50;11692:43:18;;12635:3:504;12788:19;11692:43:18;;;;;;;;-1:-1:-1;11748:5:18;11361:397;;;;;:::o;16214:154::-;-1:-1:-1;;;;;16319:26:18;;16300:4;16319:26;;;:18;:26;;;;;:44;;16355:7;16319:35;:44::i;:::-;16312:51;16214:154;-1:-1:-1;;;16214:154:18:o;12063:288::-;12150:13;;12116:4;;-1:-1:-1;;;;;12150:13:18;12136:10;:27;;:47;;;12167:16;:14;:16::i;:::-;12128:69;;;;-1:-1:-1;;;12128:69:18;;;;;;;:::i;:::-;12211:16;:14;:16::i;:::-;:33;;;-1:-1:-1;12240:4:18;12231:13;;;;12211:33;12203:52;;;;-1:-1:-1;;;12203:52:18;;;;;;;:::i;:::-;12262:19;:27;;;;;-1:-1:-1;;;12262:27:18;-1:-1:-1;;;;12262:27:18;;;;;;12300:28;;;;;;12284:5;;13101:2:504;13083:21;;;13140:1;13120:18;;;13113:29;-1:-1:-1;;;13173:2:504;13158:18;;13151:35;13267:14;;13260:22;13253:4;13238:20;;13231:52;13218:3;13203:19;;12877:412;12300:28:18;;;;;;;;-1:-1:-1;12341:5:18;12063:288::o;17915:96::-;17963:16;17994:12;17987:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17987:19:18;;;;;;;;;;;;;;;;;;;;;;;17915:96;:::o;19438:506::-;19594:30;:37;19565:19;:26;19495:16;;19519:29;;19565:66;;19594:37;19565:66;:::i;:::-;19551:81;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19551:81:18;;19519:113;;19639:7;19656:105;19667:19;:26;19663:30;;;;19656:105;;;19721:19;19741:1;19721:22;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19721:22:18;19703:12;19716:1;19703:15;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19703:40:18;;;:15;;;;;;;;;;;:40;19751:3;;;;:::i;:::-;;;;19656:105;;;19766:7;19783:131;19794:30;:37;19790:41;;;;19783:131;;;19863:30;19894:1;19863:33;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;19863:33:18;19841:12;19854:5;19858:1;19854;:5;:::i;:::-;19841:19;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19841:55:18;;;:19;;;;;;;;;;;:55;19904:3;;;;:::i;:::-;;;;19783:131;;;-1:-1:-1;19927:12:18;;19438:506;-1:-1:-1;;19438:506:18:o;9707:484::-;9805:5;;-1:-1:-1;;;;;9805:5:18;9791:10;:19;9783:38;;;;-1:-1:-1;;;9783:38:18;;;;;;;:::i;:::-;9906:17;;;-1:-1:-1;;;;;9993:40:18;;;-1:-1:-1;;;;;;9993:40:18;;;;;;;10122:64;;;9906:17;;;;14160:34:504;;;14225:2;14210:18;;14203:43;;;;10122:64:18;;14095:18:504;10122:64:18;;;;;;;9777:414;9707:484;:::o;17133:332::-;-1:-1:-1;;;;;17274:26:18;;17210:16;17274:26;;;:18;:26;;;;;17210:16;;17274:35;;:33;:35::i;:::-;17234:75;;17320:9;17315:146;17339:20;:27;17335:1;:31;17315:146;;;17401:6;-1:-1:-1;;;;;17393:36:18;;17430:20;17451:1;17430:23;;;;;;;;:::i;:::-;;;;;;;17393:61;;;;;;;;;;;;;;-1:-1:-1;;;;;2369:32:504;;;;2351:51;;2339:2;2324:18;;2205:203;17393:61:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17381:73;;;;:::i;:::-;;-1:-1:-1;17368:3:18;;;;:::i;:::-;;;;17315:146;;;;17228:237;17133:332;;;:::o;10966:391::-;-1:-1:-1;;;;;11054:24:18;;11034:4;11054:24;;;:7;:24;;;;;:33;;;11046:53;;;;-1:-1:-1;;;11046:53:18;;11876:2:504;11046:53:18;;;11858:21:504;11915:1;11895:18;;;11888:29;-1:-1:-1;;;11933:18:504;;;11926:37;11980:18;;11046:53:18;11674:330:504;11046:53:18;11127:13;;-1:-1:-1;;;;;11127:13:18;11113:10;:27;;:47;;;11144:16;:14;:16::i;:::-;11105:69;;;;-1:-1:-1;;;11105:69:18;;;;;;;:::i;:::-;11188:16;:14;:16::i;:::-;:33;;;-1:-1:-1;11217:4:18;11208:13;;;;11188:33;11180:52;;;;-1:-1:-1;;;11180:52:18;;;;;;;:::i;:::-;-1:-1:-1;;;;;11239:35:18;;;;;;:18;:35;;;;;;;;;:43;;-1:-1:-1;;11239:43:18;;;;;;;;;;11293:41;;14697:51:504;;;14784:2;14764:18;;;14757:30;;;14823:1;14803:18;;;14796:29;;;;-1:-1:-1;;;14856:3:504;14841:19;;14834:35;14921:18;;;14914:50;11293:41:18;;14735:3:504;14886:19;11293:41:18;14446:524:504;19948:110:18;20003:16;20034:19;20027:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20027:26:18;;;;;;;;;;;;;;;;;;;;;;19948:110;:::o;8026:516::-;8155:5;;-1:-1:-1;;;;;8155:5:18;8141:10;:19;;:54;;-1:-1:-1;8178:17:18;;-1:-1:-1;;;;;8178:17:18;8164:10;:31;8141:54;8133:73;;;;-1:-1:-1;;;8133:73:18;;;;;;;:::i;:::-;8234:7;8278:13;8313:15;;;;;:46;;;8346:13;8332:10;:27;8313:46;8305:65;;;;-1:-1:-1;;;8305:65:18;;15177:2:504;8305:65:18;;;15159:21:504;15216:1;15196:18;;;15189:29;-1:-1:-1;;;15234:18:504;;;15227:36;15280:18;;8305:65:18;14975:329:504;8305:65:18;8382:9;8377:161;8401:10;8397:1;:14;8377:161;;;8460:13;;8474:1;8460:16;;;;;;;:::i;:::-;;;;;;;8426:10;:31;8445:7;;8453:1;8445:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8426:31:18;;;;;;;;;;;;-1:-1:-1;8426:31:18;:50;8502:7;;8510:1;8502:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8489:42:18;;8514:13;;8528:1;8514:16;;;;;;;:::i;:::-;;;;;;;8489:42;;;;740:25:504;;728:2;713:18;;594:177;8489:42:18;;;;;;;;8413:3;;;;:::i;:::-;;;;8377:161;;;;8127:415;;8026:516;;;;:::o;15945:265::-;16062:16;:14;:16::i;:::-;16054:35;;;;-1:-1:-1;;;16054:35:18;;;;;;;:::i;:::-;16100:11;16096:109;;;-1:-1:-1;;;;;16113:26:18;;;;;;:18;:26;;;;;:39;;16144:7;16113:30;:39::i;:::-;;15945:265;;;:::o;16096:109::-;-1:-1:-1;;;;;16163:26:18;;;;;;:18;:26;;;;;:42;;16197:7;16163:33;:42::i;2513:27:20:-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2513:27:20;;-1:-1:-1;2513:27:20;:::o;10410:552:18:-;10479:7;10499:16;:14;:16::i;:::-;10494:113;;10532:68;10537:18;10557:42;10532:4;:68::i;10494:113::-;10687:13;;;-1:-1:-1;;;;;10762:32:18;;;-1:-1:-1;;;;;;10762:32:18;;;;;;;10871:49;;;10687:13;;;;14160:34:504;;;14225:2;14210:18;;14203:43;;;;10871:49:18;;14095:18:504;10871:49:18;;;;;;;10942:14;10927:30;10410:552;-1:-1:-1;;;10410:552:18:o;9037:516::-;9166:5;;-1:-1:-1;;;;;9166:5:18;9152:10;:19;;:54;;-1:-1:-1;9189:17:18;;-1:-1:-1;;;;;9189:17:18;9175:10;:31;9152:54;9144:73;;;;-1:-1:-1;;;9144:73:18;;;;;;;:::i;:::-;9245:7;9289:13;9324:15;;;;;:46;;;9357:13;9343:10;:27;9324:46;9316:65;;;;-1:-1:-1;;;9316:65:18;;15177:2:504;9316:65:18;;;15159:21:504;15216:1;15196:18;;;15189:29;-1:-1:-1;;;15234:18:504;;;15227:36;15280:18;;9316:65:18;14975:329:504;9316:65:18;9393:9;9388:161;9412:10;9408:1;:14;9388:161;;;9471:13;;9485:1;9471:16;;;;;;;:::i;:::-;;;;;;;9437:10;:31;9456:7;;9464:1;9456:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9437:31:18;;;;;;;;;;;;-1:-1:-1;9437:31:18;:50;9513:7;;9521:1;9513:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9500:42:18;;9525:13;;9539:1;9525:16;;;;;;;:::i;:::-;;;;;;;9500:42;;;;740:25:504;;728:2;713:18;;594:177;9500:42:18;;;;;;;;9424:3;;;;:::i;:::-;;;;9388:161;;4520:773;4595:4;4615:16;:14;:16::i;:::-;4607:35;;;;-1:-1:-1;;;4607:35:18;;;;;;;:::i;:::-;-1:-1:-1;;;;;4656:29:18;;4648:51;;;;-1:-1:-1;;;4648:51:18;;10873:2:504;4648:51:18;;;10855:21:504;10912:1;10892:18;;;10885:29;-1:-1:-1;;;10930:18:504;;;10923:39;10979:18;;4648:51:18;10671:332:504;4648:51:18;4711:9;4706:161;4730:30;:37;4726:41;;4706:161;;;4809:30;4840:1;4809:33;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;4790:52:18;;;4809:33;;4790:52;;4782:78;;;;-1:-1:-1;;;4782:78:18;;15643:2:504;4782:78:18;;;15625:21:504;15682:2;15662:18;;;15655:30;-1:-1:-1;;;15701:18:504;;;15694:43;15754:18;;4782:78:18;15441:337:504;4782:78:18;4769:3;;;;:::i;:::-;;;;4706:161;;;-1:-1:-1;4907:30:18;:52;;;;;;;-1:-1:-1;4907:52:18;;;;;;;-1:-1:-1;;;;;;4907:52:18;-1:-1:-1;;;;;4907:52:18;;;;;5001:269;5025:19;:26;5021:30;;5001:269;;;5089:19;5109:1;5089:22;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;5070:41:18;;;5089:22;;5070:41;5066:198;;;5148:19;5168:26;;:30;;5197:1;;5168:30;:::i;5066:198::-;5053:3;;;;:::i;:::-;;;;5001:269;;5229:47:20;;;;;;;;;;;;2749:29;;;;;;;;;;;;5297:2224:18;5453:7;5503:12;-1:-1:-1;;;;;5472:44:18;5480:10;-1:-1:-1;;;;;5472:44:18;;:58;;;;;5521:9;5520:10;5472:58;5468:153;;;-1:-1:-1;5613:1:18;5606:8;;5468:153;-1:-1:-1;;;;;;;5690:35:18;;;5686:1208;;-1:-1:-1;;;;;5847:58:18;;;;;;;:35;:58;;;;;;;;:79;;;;;;;;;;;;:198;;;;-1:-1:-1;;;;;;5939:67:18;;;;;;;:44;:67;;;;;;;;:88;;;;;;;;;:106;;6037:7;5939:97;:106::i;:::-;5938:107;5847:198;5834:1054;;;-1:-1:-1;6092:1:18;5834:1054;;;-1:-1:-1;;;;;6302:45:18;;;6269:30;6302:45;;;:22;:45;;;;;;;;:66;;;;;;;;;;6459:27;;;;;:135;;-1:-1:-1;;;;;;6501:54:18;;;;;;;:31;:54;;;;;;;;:75;;;;;;;;;:93;;6586:7;6501:84;:93::i;:::-;6500:94;6459:135;6444:436;;;6646:6;;:39;;-1:-1:-1;;;6646:39:18;;-1:-1:-1;;;;;2369:32:504;;;6646:39:18;;;2351:51:504;6617:26:18;;6646:6;;:25;;2324:18:504;;6646:39:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6617:68;-1:-1:-1;6865:4:18;6818:43;6617:68;6818:22;:43;:::i;:::-;6817:52;;;;:::i;:::-;6789:80;;6605:275;6444:436;6108:780;5834:1054;-1:-1:-1;;;;;6998:31:18;;7032:1;6998:31;;;:10;:31;;;;;;:35;;;;:97;;-1:-1:-1;;;;;;7038:39:18;;;;;;:18;:39;;;;;:57;;7087:7;7038:48;:57::i;:::-;7037:58;6998:97;6994:484;;;7136:6;;:37;;-1:-1:-1;;;7136:37:18;;-1:-1:-1;;;;;2369:32:504;;;7136:37:18;;;2351:51:504;7105:28:18;;7136:6;;:25;;2324:18:504;;7136:37:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7207:31:18;;7181:22;7207:31;;;:10;:31;;;;;;7105:68;;-1:-1:-1;7181:22:18;7265:4;;7207:54;;7105:68;;7207:54;:::i;:::-;7206:63;;;;:::i;:::-;-1:-1:-1;;;;;7312:28:18;;;;;;:7;:28;;;;;:53;;;7181:88;;-1:-1:-1;7369:4:18;;7295:70;;7181:88;7295:70;:::i;:::-;7294:79;;;;:::i;:::-;7277:96;;7402:25;7385:14;:42;7381:90;;;7457:14;7429:42;;7381:90;7097:381;;6994:484;7491:25;5297:2224;-1:-1:-1;;;;;5297:2224:18:o;21494:361::-;21537:7;21560:16;:14;:16::i;:::-;21552:35;;;;-1:-1:-1;;;21552:35:18;;;;;;;:::i;:::-;21631:42;21593:23;21681:92;21705:10;:17;21701:21;;21681:92;;;21737:10;21748:1;21737:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;21737:13:18;-1:-1:-1;;;;;21737:27:18;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;21724:3:18;;;;:::i;:::-;;;;21681:92;;;-1:-1:-1;21786:64:18;;-1:-1:-1;;;21786:64:18;;21807:42;21786:64;;;2351:51:504;-1:-1:-1;;;;;21786:20:18;;;;;2324:18:504;;21786:64:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21779:71;;;21494:361;:::o;12690:1367::-;12750:7;12796:16;:14;:16::i;:::-;12791:96;;12821:66;12826:18;12846:40;12821:4;:66::i;12791:96::-;-1:-1:-1;;;;;12942:24:18;;;;;;:7;:24;;;;;:33;;;12937:127;;12990:74;12995:23;13020:43;12990:4;:74::i;12937:127::-;13131:1;13108:6;-1:-1:-1;;;;;13108:18:18;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:24;13104:106;;;13141:69;13146:26;13174:35;13141:4;:69::i;13104:106::-;-1:-1:-1;;;;;13245:24:18;;;;;;:7;:24;;;;;;;;13238:31;;-1:-1:-1;;13238:31:18;;;;;;;;13392:10;13361:41;;;;;;;;;;;;;;;;;;;13392:10;;13361:41;;;13392:10;13361:41;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13361:41:18;;;;;;;;;;;;;;;;-1:-1:-1;;13422:18:18;;13361:41;;-1:-1:-1;13422:18:18;;-1:-1:-1;13408:11:18;;-1:-1:-1;;13476:126:18;13500:3;13496:1;:7;13476:126;;;13540:6;-1:-1:-1;;;;;13522:24:18;:11;13534:1;13522:14;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13522:24:18;;13518:78;;;13571:1;13558:14;;13582:5;;13518:78;13505:3;;;;:::i;:::-;;;;13476:126;;;;13720:3;13707:10;:16;13700:24;;;;:::i;:::-;13840:10;13851:17;;:21;;13871:1;;13851:21;:::i;:::-;13840:33;;;;;;;;:::i;:::-;;;;;;;;;;;13815:10;:22;;-1:-1:-1;;;;;13840:33:18;;;;13826:10;;13815:22;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1;;;;;13815:58:18;;;;;-1:-1:-1;;;;;13815:58:18;;;;;;13879:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13879:16:18;;;;;;;13979:1;13902:19;:58;13938:6;-1:-1:-1;;;;;13922:35:18;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13902:58:18;;;;;;;;;;;;;;;;;-1:-1:-1;13902:58:18;:80;;-1:-1:-1;;;;;;13902:80:18;;;;;;;;;;;13993:22;2369:32:504;;;2351:51;;13993:22:18;;2324:18:504;13993:22:18;;;;;;;14037:14;14022:30;12690:1367;-1:-1:-1;;;;;12690:1367:18:o;1510:2727::-;1668:22;;;1624:2;1668:22;;;;;;;;;1584:15;;1624:2;1607:14;;1624:2;1668:22;;;;;;;;;;-1:-1:-1;;1632:58:18;-1:-1:-1;;;;1632:58:18;1714:10;;;:::i;:::-;;;;1696:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1696:68:18;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;1770:17:18;1788:10;;;:::i;:::-;;;;1770:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1770:66:18;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;1842:17:18;1860:10;;;:::i;:::-;;;;1842:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1842:66:18;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;1914:17:18;1932:10;;;:::i;:::-;;;;1914:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1914:81:18;;;:29;;;;;;;;;;;:81;-1:-1:-1;;;2001:17:18;2019:10;;;:::i;:::-;;;;2001:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2001:91:18;;;:29;;;;;;;;;;;:91;-1:-1:-1;;;2098:17:18;2116:10;;;:::i;:::-;;;;2098:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2098:65:18;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2169:17:18;2187:10;;;:::i;:::-;;;;2169:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2169:65:18;;;:29;;;;;;;;;;;:65;-1:-1:-1;;;2240:17:18;2258:10;;;:::i;:::-;;;;2240:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2240:67:18;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;2313:17:18;2331:10;;;:::i;:::-;;;;2313:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2313:63:18;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;2382:17:18;2400:10;;;:::i;:::-;;;;2382:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2382:60:18;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;2448:17:18;2466:10;;;:::i;:::-;;;;2448:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2448:62:18;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;2516:17:18;2534:10;;;:::i;:::-;;;;2516:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2516:64:18;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;2586:17:18;2604:10;;;:::i;:::-;;;;2586:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2586:61:18;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2653:17:18;2671:10;;;:::i;:::-;;;;2653:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2653:62:18;;;:29;;;;;;;;;;;:62;-1:-1:-1;;;2721:17:18;2739:10;;;:::i;:::-;;;;2721:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2721:59:18;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;2786:17:18;2804:10;;;:::i;:::-;;;;2786:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2786:61:18;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;2853:17:18;2871:10;;;:::i;:::-;;;;2853:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2853:66:18;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;2925:17:18;2943:10;;;:::i;:::-;;;;2925:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2925:67:18;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;2998:17:18;3016:10;;;:::i;:::-;;;;2998:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2998:58:18;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;3062:17:18;3080:10;;;:::i;:::-;;;;3062:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3062:68:18;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;3136:17:18;3154:10;;;:::i;:::-;;;;3136:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3136:58:18;;;:29;;;;;;;;;;;:58;-1:-1:-1;;;3200:17:18;3218:10;;;:::i;:::-;;;;3200:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3200:66:18;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;3272:17:18;3290:10;;;:::i;:::-;;;;3272:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3272:61:18;;;:29;;;;;;;;;;;:61;-1:-1:-1;;;3339:17:18;3357:10;;;:::i;:::-;;;;3339:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3339:72:18;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;3417:17:18;3435:10;;;:::i;:::-;;;;3417:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3417:82:18;;;:29;;;;;;;;;;;:82;-1:-1:-1;;;3505:17:18;3523:10;;;:::i;:::-;;;;3505:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3505:81:18;;;:29;;;;;;;;;;;:81;-1:-1:-1;;;3592:17:18;3610:10;;;:::i;:::-;;;;3592:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3592:94:18;;;:29;;;;;;;;;;;:94;-1:-1:-1;;;3692:17:18;3710:10;;;:::i;:::-;;;;3692:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3692:68:18;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;3766:17:18;3784:10;;;:::i;:::-;;;;3766:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3766:68:18;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;3840:17:18;3858:10;;;:::i;:::-;;;;3840:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3840:75:18;;;:29;;;;;;;;;;;:75;-1:-1:-1;;;3921:17:18;3939:10;;;:::i;:::-;;;;3921:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;3921:76:18;;;:29;;;;;;;;;;;:76;-1:-1:-1;;;4003:17:18;4021:10;;;:::i;:::-;;;;4003:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4003:74:18;;;:29;;;;;;;;;;;:74;-1:-1:-1;;;4083:17:18;4101:10;;;:::i;:::-;;;;4083:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;4083:59:18;;;:29;;;;;;;;;;;:59;4156:13;;;;4148:54;;;;-1:-1:-1;;;4148:54:18;;16986:2:504;4148:54:18;;;16968:21:504;17025:2;17005:18;;;16998:30;17064;17044:18;;;17037:58;17112:18;;4148:54:18;16784:352:504;11762:297:18;11852:13;;11818:4;;-1:-1:-1;;;;;11852:13:18;11838:10;:27;;:47;;;11869:16;:14;:16::i;:::-;11830:69;;;;-1:-1:-1;;;11830:69:18;;;;;;;:::i;:::-;11913:16;:14;:16::i;:::-;:33;;;-1:-1:-1;11942:4:18;11933:13;;;;11913:33;11905:52;;;;-1:-1:-1;;;11905:52:18;;;;;;;:::i;:::-;11964:22;:30;;;;;-1:-1:-1;;;11964:30:18;-1:-1:-1;;;;11964:30:18;;;;;;12005:31;;;;;;11989:5;;17365:2:504;17347:21;;;17404:1;17384:18;;;17377:29;-1:-1:-1;;;17437:2:504;17422:18;;17415:38;17534:14;;17527:22;17520:4;17505:20;;17498:52;17485:3;17470:19;;17141:415;14061:244:18;14201:16;:14;:16::i;:::-;14193:35;;;;-1:-1:-1;;;14193:35:18;;;;;;;:::i;:::-;-1:-1:-1;;;;;14234:36:18;;;;;;;:22;:36;;;;;;;;:54;;;;;;;;;;;;;:66;14061:244::o;17637:92::-;17683:16;17714:10;17707:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;17707:17:18;;;;;;;;;;;;;;;;;;;;;;17637:92;:::o;16975:154::-;-1:-1:-1;;;;;17080:26:18;;17061:4;17080:26;;;:18;:26;;;;;:44;;17116:7;17080:35;:44::i;16706:265::-;16823:16;:14;:16::i;:::-;16815:35;;;;-1:-1:-1;;;16815:35:18;;;;;;;:::i;:::-;16861:11;16857:109;;;-1:-1:-1;;;;;16874:26:18;;;;;;:18;:26;;;;;:39;;16905:7;16874:30;:39::i;16857:109::-;-1:-1:-1;;;;;16924:26:18;;;;;;:18;:26;;;;;:42;;16958:7;16924:33;:42::i;4893:36:20:-;;;;;;;;;;;;15232:427:18;15411:16;:14;:16::i;:::-;15403:35;;;;-1:-1:-1;;;15403:35:18;;;;;;;:::i;:::-;15449:11;15445:209;;;-1:-1:-1;;;;;15462:58:18;;;;;;;:44;:58;;;;;;;;:76;;;;;;;;;:89;;15543:7;15462:80;:89::i;:::-;;15445:209;;;-1:-1:-1;;;;;15562:58:18;;;;;;;:44;:58;;;;;;;;:76;;;;;;;;;:92;;15646:7;15562:83;:92::i;:::-;;15232:427;;;;:::o;19252:97::-;19299:16;19330:14;19323:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19323:21:18;;;;;;;;;;;;;;;;;;;;;;19252:97;:::o;14309:391::-;14478:16;:14;:16::i;:::-;14470:35;;;;-1:-1:-1;;;14470:35:18;;;;;;;:::i;:::-;14516:11;14512:183;;;-1:-1:-1;;;;;14529:45:18;;;;;;;:31;:45;;;;;;;;:63;;;;;;;;;:76;;14597:7;14529:67;:76::i;14512:183::-;-1:-1:-1;;;;;14616:45:18;;;;;;;:31;:45;;;;;;;;:63;;;;;;;;;:79;;14687:7;14616:70;:79::i;3501:31:20:-;;;;;;;;;;;;21198:292:18;21257:4;;21269:198;21293:10;:17;21289:21;;21269:198;;;21325:21;21357:10;21368:1;21357:13;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;21357:13:18;;;21383:22;;;:7;:22;;;;;;:46;;;;;:40;;;;:46;;;;;;;21357:13;;-1:-1:-1;21383:46:18;;21379:82;;;-1:-1:-1;21448:4:18;;21198:292;-1:-1:-1;;;21198:292:18:o;21379:82::-;-1:-1:-1;21312:3:18;;;;:::i;:::-;;;;21269:198;;1739:50:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1739:50:20;;-1:-1:-1;1739:50:20;;-1:-1:-1;1739:50:20:o;18118:940:18:-;18306:12;:19;18214;;18235:33;;18335:22;18331:71;;18378:16;;;18375:1;18378:16;;;;;;;;;18367:28;;;;;;;18331:71;18412:13;18408:33;;18438:3;18427:14;;18408:33;18473:8;18447:23;18521:28;18473:8;18521:17;:28;:::i;:::-;18487:62;-1:-1:-1;18570:28:18;18590:8;18570:17;:28;:::i;:::-;18556:42;-1:-1:-1;18608:27:18;;18604:157;;18645:13;;;;:::i;:::-;;-1:-1:-1;18645:13:18;;-1:-1:-1;18670:8:18;:4;18677:1;18670:8;:::i;:::-;:23;18666:89;;;18723:23;18705:41;;18666:89;18782:11;18771:8;:4;18778:1;18771:8;:::i;:::-;:22;18767:81;;;-1:-1:-1;;18824:16:18;;;18838:1;18824:16;;;;;;;;;-1:-1:-1;18803:38:18;;-1:-1:-1;18803:38:18;18767:81;18854:14;18871:15;18878:8;18871:4;:15;:::i;:::-;18854:32;;18925:15;18911:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18911:30:18;;18892:49;;18952:9;18947:107;18971:15;18967:1;:19;18947:107;;;19023:12;19036:10;19040:6;19036:1;:10;:::i;:::-;19023:24;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;19023:24:18;19001:16;19018:1;19001:19;;;;;;;;:::i;:::-;-1:-1:-1;;;;;19001:46:18;;;:19;;;;;;;;;;;:46;18988:3;;;;:::i;:::-;;;;18947:107;;;;18272:786;;;;18118:940;;;;;;:::o;14960:268::-;15109:16;:14;:16::i;:::-;15101:35;;;;-1:-1:-1;;;15101:35:18;;;;;;;:::i;:::-;-1:-1:-1;;;;;15142:49:18;;;;;;;:35;:49;;;;;;;;:67;;;;;;;;;;;;;:81;;-1:-1:-1;;15142:81:18;;;;;;;;;;14960:268::o;15663:278::-;-1:-1:-1;;;;;15842:58:18;;;15823:4;15842:58;;;:44;:58;;;;;;;;:76;;;;;;;;;;;:94;;15928:7;15842:85;:94::i;16372:330::-;-1:-1:-1;;;;;16512:26:18;;16448:16;16512:26;;;:18;:26;;;;;16448:16;;16512:35;;:33;:35::i;:::-;16472:75;;16558:9;16553:145;16577:20;:27;16573:1;:31;16553:145;;;16639:6;-1:-1:-1;;;;;16631:35:18;;16667:20;16688:1;16667:23;;;;;;;;:::i;:::-;;;;;;;16631:60;;;;;;;;;;;;;;-1:-1:-1;;;;;2369:32:504;;;;2351:51;;2339:2;2324:18;;2205:203;16631:60:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16619:72;;;;:::i;:::-;;-1:-1:-1;16606:3:18;;;;:::i;:::-;;;;16553:145;;8852:165:487;-1:-1:-1;;;;;8985:23:487;;8932:4;4343:19;;;:12;;;:19;;;;;;:24;;8955:55;4247:127;855:174:20;938:5;;904:4;;-1:-1:-1;;;;;938:5:20;924:10;:19;:37;;;;-1:-1:-1;947:14:20;;-1:-1:-1;;;947:14:20;;;;924:37;923:101;;;-1:-1:-1;989:10:20;;-1:-1:-1;;;;;989:10:20;967;:33;:56;;;;-1:-1:-1;1004:19:20;;-1:-1:-1;;;1004:19:20;;;;967:56;916:108;;855:174;:::o;10251:300:487:-;10314:16;10342:22;10367:19;10375:3;10367:7;:19::i;8297:150::-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:487;;8390:4;:50::i;8615:156::-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:487;;8711:7;:53::i;2065:151:23:-;2126:7;2146:39;2162:3;2154:12;;;;;;;;:::i;:::-;2176:4;2168:13;;;;;;;;:::i;:::-;2146:39;;;17888:25:504;;;17944:2;17929:18;;17922:34;;;;2183:1:23;17972:18:504;;;17965:34;17876:2;17861:18;2146:39:23;;;;;;;2207:3;2199:12;;;;;;;;:::i;5562:109:487:-;5618:16;5653:3;:11;;5646:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:109;;;:::o;2206:404::-;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:487;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:487;2581:12;;2778:1388;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:487;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;206:131:504;-1:-1:-1;;;;;281:31:504;;271:42;;261:70;;327:1;324;317:12;261:70;206:131;:::o;342:247::-;401:6;454:2;442:9;433:7;429:23;425:32;422:52;;;470:1;467;460:12;422:52;509:9;496:23;528:31;553:5;528:31;:::i;776:529::-;853:6;861;869;922:2;910:9;901:7;897:23;893:32;890:52;;;938:1;935;928:12;890:52;977:9;964:23;996:31;1021:5;996:31;:::i;:::-;1046:5;-1:-1:-1;1103:2:504;1088:18;;1075:32;1116:33;1075:32;1116:33;:::i;:::-;1168:7;-1:-1:-1;1227:2:504;1212:18;;1199:32;1240:33;1199:32;1240:33;:::i;:::-;1292:7;1282:17;;;776:529;;;;;:::o;1310:160::-;1375:20;;1431:13;;1424:21;1414:32;;1404:60;;1460:1;1457;1450:12;1404:60;1310:160;;;:::o;1475:332::-;1557:6;1565;1618:2;1606:9;1597:7;1593:23;1589:32;1586:52;;;1634:1;1631;1624:12;1586:52;1673:9;1660:23;1692:31;1717:5;1692:31;:::i;:::-;1742:5;-1:-1:-1;1766:35:504;1797:2;1782:18;;1766:35;:::i;:::-;1756:45;;1475:332;;;;;:::o;1812:388::-;1880:6;1888;1941:2;1929:9;1920:7;1916:23;1912:32;1909:52;;;1957:1;1954;1947:12;1909:52;1996:9;1983:23;2015:31;2040:5;2015:31;:::i;:::-;2065:5;-1:-1:-1;2122:2:504;2107:18;;2094:32;2135:33;2094:32;2135:33;:::i;:::-;2187:7;2177:17;;;1812:388;;;;;:::o;2413:180::-;2469:6;2522:2;2510:9;2501:7;2497:23;2493:32;2490:52;;;2538:1;2535;2528:12;2490:52;2561:26;2577:9;2561:26;:::i;2823:461::-;2876:3;2914:5;2908:12;2941:6;2936:3;2929:19;2967:4;2996:2;2991:3;2987:12;2980:19;;3033:2;3026:5;3022:14;3054:1;3064:195;3078:6;3075:1;3072:13;3064:195;;;3143:13;;-1:-1:-1;;;;;3139:39:504;3127:52;;3199:12;;;;3234:15;;;;3175:1;3093:9;3064:195;;;-1:-1:-1;3275:3:504;;2823:461;-1:-1:-1;;;;;2823:461:504:o;3289:261::-;3468:2;3457:9;3450:21;3431:4;3488:56;3540:2;3529:9;3525:18;3517:6;3488:56;:::i;3555:376::-;3627:8;3637:6;3691:3;3684:4;3676:6;3672:17;3668:27;3658:55;;3709:1;3706;3699:12;3658:55;-1:-1:-1;3732:20:504;;3775:18;3764:30;;3761:50;;;3807:1;3804;3797:12;3761:50;3844:4;3836:6;3832:17;3820:29;;3904:3;3897:4;3887:6;3884:1;3880:14;3872:6;3868:27;3864:38;3861:47;3858:67;;;3921:1;3918;3911:12;3936:808;4075:6;4083;4091;4099;4152:2;4140:9;4131:7;4127:23;4123:32;4120:52;;;4168:1;4165;4158:12;4120:52;4208:9;4195:23;4237:18;4278:2;4270:6;4267:14;4264:34;;;4294:1;4291;4284:12;4264:34;4333:79;4404:7;4395:6;4384:9;4380:22;4333:79;:::i;:::-;4431:8;;-1:-1:-1;4307:105:504;-1:-1:-1;4519:2:504;4504:18;;4491:32;;-1:-1:-1;4535:16:504;;;4532:36;;;4564:1;4561;4554:12;4532:36;;4603:81;4676:7;4665:8;4654:9;4650:24;4603:81;:::i;:::-;3936:808;;;;-1:-1:-1;4703:8:504;-1:-1:-1;;;;3936:808:504:o;4749:456::-;4823:6;4831;4839;4892:2;4880:9;4871:7;4867:23;4863:32;4860:52;;;4908:1;4905;4898:12;4860:52;4947:9;4934:23;4966:31;4991:5;4966:31;:::i;:::-;5016:5;-1:-1:-1;5073:2:504;5058:18;;5045:32;5086:33;5045:32;5086:33;:::i;:::-;5138:7;-1:-1:-1;5164:35:504;5195:2;5180:18;;5164:35;:::i;:::-;5154:45;;4749:456;;;;;:::o;5210:180::-;5269:6;5322:2;5310:9;5301:7;5297:23;5293:32;5290:52;;;5338:1;5335;5328:12;5290:52;-1:-1:-1;5361:23:504;;5210:180;-1:-1:-1;5210:180:504:o;5395:632::-;5512:6;5520;5528;5536;5589:3;5577:9;5568:7;5564:23;5560:33;5557:53;;;5606:1;5603;5596:12;5557:53;5645:9;5632:23;5664:31;5689:5;5664:31;:::i;:::-;5714:5;-1:-1:-1;5771:2:504;5756:18;;5743:32;5784:33;5743:32;5784:33;:::i;:::-;5836:7;-1:-1:-1;5862:35:504;5893:2;5878:18;;5862:35;:::i;:::-;5852:45;;5949:2;5938:9;5934:18;5921:32;5962:33;5987:7;5962:33;:::i;:::-;5395:632;;;;-1:-1:-1;5395:632:504;;-1:-1:-1;;5395:632:504:o;6534:657::-;6703:2;6755:21;;;6825:13;;6728:18;;;6847:22;;;6674:4;;6703:2;6926:15;;;;6900:2;6885:18;;;6674:4;6969:196;6983:6;6980:1;6977:13;6969:196;;;7048:13;;-1:-1:-1;;;;;;7044:40:504;7032:53;;7140:15;;;;7105:12;;;;7005:1;6998:9;6969:196;;;-1:-1:-1;7182:3:504;;6534:657;-1:-1:-1;;;;;;6534:657:504:o;7459:456::-;7536:6;7544;7552;7605:2;7593:9;7584:7;7580:23;7576:32;7573:52;;;7621:1;7618;7611:12;7573:52;7660:9;7647:23;7679:31;7704:5;7679:31;:::i;:::-;7729:5;-1:-1:-1;7786:2:504;7771:18;;7758:32;7799:33;7758:32;7799:33;:::i;:::-;7459:456;;7851:7;;-1:-1:-1;;;7905:2:504;7890:18;;;;7877:32;;7459:456::o;7920:675::-;8108:2;8160:21;;;8230:13;;8133:18;;;8252:22;;;8079:4;;8108:2;8331:15;;;;8305:2;8290:18;;;8079:4;8374:195;8388:6;8385:1;8382:13;8374:195;;;8453:13;;-1:-1:-1;;;;;8449:39:504;8437:52;;8544:15;;;;8509:12;;;;8485:1;8403:9;8374:195;;8600:598;8683:6;8691;8699;8707;8760:3;8748:9;8739:7;8735:23;8731:33;8728:53;;;8777:1;8774;8767:12;8728:53;8816:9;8803:23;8835:31;8860:5;8835:31;:::i;:::-;8885:5;-1:-1:-1;8942:2:504;8927:18;;8914:32;8955:33;8914:32;8955:33;:::i;:::-;9007:7;-1:-1:-1;9066:2:504;9051:18;;9038:32;9079:33;9038:32;9079:33;:::i;:::-;9131:7;-1:-1:-1;9157:35:504;9188:2;9173:18;;9157:35;:::i;:::-;9147:45;;8600:598;;;;;;;:::o;9427:315::-;9495:6;9503;9556:2;9544:9;9535:7;9531:23;9527:32;9524:52;;;9572:1;9569;9562:12;9524:52;9611:9;9598:23;9630:31;9655:5;9630:31;:::i;:::-;9680:5;9732:2;9717:18;;;;9704:32;;-1:-1:-1;;;9427:315:504:o;9747:248::-;9815:6;9823;9876:2;9864:9;9855:7;9851:23;9847:32;9844:52;;;9892:1;9889;9882:12;9844:52;-1:-1:-1;;9915:23:504;;;9985:2;9970:18;;;9957:32;;-1:-1:-1;9747:248:504:o;10000:332::-;10207:6;10196:9;10189:25;10250:2;10245;10234:9;10230:18;10223:30;10170:4;10270:56;10322:2;10311:9;10307:18;10299:6;10270:56;:::i;10337:329::-;10539:2;10521:21;;;10578:1;10558:18;;;10551:29;-1:-1:-1;;;10611:2:504;10596:18;;10589:36;10657:2;10642:18;;10337:329::o;11008:127::-;11069:10;11064:3;11060:20;11057:1;11050:31;11100:4;11097:1;11090:15;11124:4;11121:1;11114:15;11140:127;11201:10;11196:3;11192:20;11189:1;11182:31;11232:4;11229:1;11222:15;11256:4;11253:1;11246:15;11272:125;11312:4;11340:1;11337;11334:8;11331:34;;;11345:18;;:::i;:::-;-1:-1:-1;11382:9:504;;11272:125::o;11402:127::-;11463:10;11458:3;11454:20;11451:1;11444:31;11494:4;11491:1;11484:15;11518:4;11515:1;11508:15;11534:135;11573:3;-1:-1:-1;;11594:17:504;;11591:43;;;11614:18;;:::i;:::-;-1:-1:-1;11661:1:504;11650:13;;11534:135::o;12009:332::-;12211:2;12193:21;;;12250:1;12230:18;;;12223:29;-1:-1:-1;;;12283:2:504;12268:18;;12261:39;12332:2;12317:18;;12009:332::o;13294:128::-;13334:3;13365:1;13361:6;13358:1;13355:13;13352:39;;;13371:18;;:::i;:::-;-1:-1:-1;13407:9:504;;13294:128::o;13427:127::-;13488:10;13483:3;13479:20;13476:1;13469:31;13519:4;13516:1;13509:15;13543:4;13540:1;13533:15;13559:175;13596:3;13640:4;13633:5;13629:16;13669:4;13660:7;13657:17;13654:43;;;13677:18;;:::i;:::-;13726:1;13713:15;;13559:175;-1:-1:-1;;13559:175:504:o;13739:204::-;13777:3;13813:4;13810:1;13806:12;13845:4;13842:1;13838:12;13880:3;13874:4;13870:14;13865:3;13862:23;13859:49;;;13888:18;;:::i;:::-;13924:13;;13739:204;-1:-1:-1;;;13739:204:504:o;14257:184::-;14327:6;14380:2;14368:9;14359:7;14355:23;14351:32;14348:52;;;14396:1;14393;14386:12;14348:52;-1:-1:-1;14419:16:504;;14257:184;-1:-1:-1;14257:184:504:o;15309:127::-;15370:10;15365:3;15361:20;15358:1;15351:31;15401:4;15398:1;15391:15;15425:4;15422:1;15415:15;15783:168;15823:7;15889:1;15885;15881:6;15877:14;15874:1;15871:21;15866:1;15859:9;15852:17;15848:45;15845:71;;;15896:18;;:::i;:::-;-1:-1:-1;15936:9:504;;15783:168::o;15956:127::-;16017:10;16012:3;16008:20;16005:1;15998:31;16048:4;16045:1;16038:15;16072:4;16069:1;16062:15;16088:120;16128:1;16154;16144:35;;16159:18;;:::i;:::-;-1:-1:-1;16193:9:504;;16088:120::o;16213:127::-;16274:10;16269:3;16265:20;16262:1;16255:31;16305:4;16302:1;16295:15;16329:4;16326:1;16319:15;16345:251;16415:6;16468:2;16456:9;16447:7;16443:23;16439:32;16436:52;;;16484:1;16481;16474:12;16436:52;16516:9;16510:16;16535:31;16560:5;16535:31;:::i;16601:178::-;16638:3;16682:4;16675:5;16671:16;16706:7;16696:41;;16717:18;;:::i;:::-;-1:-1:-1;;16753:20:504;;16601:178;-1:-1:-1;;16601:178:504:o;17561:112::-;17593:1;17619;17609:35;;17624:18;;:::i;:::-;-1:-1:-1;17658:9:504;;17561:112::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_blacklistBorrowingAgainstCollateral(address,address,bool)": "ee5b9a2f", + "_blacklistBorrowingAgainstCollateralWhitelist(address,address,address,bool)": "c76ae260", + "_borrowCapWhitelist(address,address,bool)": "be945a64", + "_borrowGuardianPaused()": "e6653f3d", + "_getExtensionFunctions()": "89f8132e", + "_mintGuardianPaused()": "3c94786f", + "_removeFlywheel(address)": "109908ce", + "_setBorrowCapForCollateral(address,address,uint256)": "a5fb4857", + "_setBorrowCapForCollateralWhitelist(address,address,address,bool)": "d219fca7", + "_setBorrowCapGuardian(address)": "391957d7", + "_setBorrowPaused(address,bool)": "18c882a5", + "_setMarketBorrowCaps(address[],uint256[])": "607ef6c1", + "_setMarketSupplyCaps(address[],uint256[])": "51a485e4", + "_setMintPaused(address,bool)": "3bcf7ec1", + "_setPauseGuardian(address)": "5f5af1aa", + "_setSeizePaused(bool)": "2d70db78", + "_setTransferPaused(bool)": "8ebf6364", + "_supplyCapWhitelist(address,address,bool)": "51c8491d", + "_unsupportMarket(address)": "819605a8", + "accountAssets(address,uint256)": "dce15449", + "addNonAccruingFlywheel(address)": "692fd2a9", + "admin()": "f851a440", + "adminHasRights()": "0a755ec2", + "allBorrowers(uint256)": "7515bafa", + "allMarkets(uint256)": "52d84d1e", + "borrowCapForCollateral(address,address)": "940cd6f1", + "borrowCapGuardian()": "21af4569", + "borrowCaps(address)": "4a584432", + "borrowGuardianPaused(address)": "6d154ea5", + "borrowingAgainstCollateralBlacklist(address,address)": "1c819e43", + "cTokensByUnderlying(address)": "31ff47fa", + "closeFactorMantissa()": "e8755446", + "enforceWhitelist()": "b0957210", + "getAccruingFlywheels()": "4a76e727", + "getAllBorrowers()": "32abcdbe", + "getAllBorrowersCount()": "15c3b9b0", + "getAllMarkets()": "b0772d0b", + "getAssetAsCollateralValueCap(address,address,bool,address)": "783f1096", + "getPaginatedBorrowers(uint256,uint256)": "e6806591", + "getRewardsDistributors()": "3605b51b", + "getWhitelist()": "d01f63f5", + "getWhitelistedBorrowersBorrows(address)": "3a72cb5e", + "getWhitelistedSuppliersSupply(address)": "fb6243fa", + "ionicAdmin()": "c91a424f", + "ionicAdminHasRights()": "cf6bfd2d", + "isBlacklistBorrowingAgainstCollateralWhitelisted(address,address,address)": "f874eb0c", + "isBorrowCapForCollateralWhitelisted(address,address,address)": "088e0fce", + "isBorrowCapWhitelisted(address,address)": "b3253801", + "isComptroller()": "007e3dd2", + "isSupplyCapWhitelisted(address,address)": "2273f40e", + "isUserOfPool(address)": "d9e0ea6b", + "liquidationIncentiveMantissa()": "4ada90af", + "markets(address)": "8e8f294b", + "mintGuardianPaused(address)": "731f0c2b", + "nonAccruingRewardsDistributors(uint256)": "6bd02b8a", + "oracle()": "7dc0d1d0", + "pauseGuardian()": "24a3d622", + "pendingAdmin()": "26782247", + "registerInSFS()": "7f15e216", + "rewardsDistributors(uint256)": "c6c5b0dd", + "seizeGuardianPaused()": "ac0b0bb7", + "suppliers(address)": "16dc15fe", + "supplyCaps(address)": "02c3bcbb", + "transferGuardianPaused()": "87f76303", + "whitelist(address)": "9b19251a", + "whitelistArray(uint256)": "d251fefc" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/DefaultProxyAdmin.json b/packages/sdk/deployments/bob/DefaultProxyAdmin.json new file mode 100644 index 000000000..99fe72c30 --- /dev/null +++ b/packages/sdk/deployments/bob/DefaultProxyAdmin.json @@ -0,0 +1,259 @@ +{ + "address": "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "initialOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeProxyAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyAdmin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + } + ], + "name": "getProxyImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "upgrade", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract TransparentUpgradeableProxy", + "name": "proxy", + "type": "address" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + } + ], + "transactionHash": "0xd4a1a0d5a8d8bbfec3536439b4434d78d527cc41af3ead374fb49a7807a595d3", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "transactionIndex": 1, + "gasUsed": "644163", + "logsBloom": "0x00000020000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000100100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000010000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x0e363e41d99880f6e8885440202610004e61fc32c04c68842987b370dbfdbd6d", + "transactionHash": "0xd4a1a0d5a8d8bbfec3536439b4434d78d527cc41af3ead374fb49a7807a595d3", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777639, + "transactionHash": "0xd4a1a0d5a8d8bbfec3536439b4434d78d527cc41af3ead374fb49a7807a595d3", + "address": "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x0e363e41d99880f6e8885440202610004e61fc32c04c68842987b370dbfdbd6d" + } + ], + "blockNumber": 3777639, + "cumulativeGasUsed": "688002", + "status": 1, + "byzantium": true + }, + "args": [ + "0x1155b614971f16758C92c4890eD338C9e3ede6b7" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"initialOwner\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeProxyAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyAdmin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"}],\"name\":\"getProxyImplementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"upgrade\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contract TransparentUpgradeableProxy\",\"name\":\"proxy\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"}],\"devdoc\":{\"details\":\"This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\",\"kind\":\"dev\",\"methods\":{\"changeProxyAdmin(address,address)\":{\"details\":\"Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`.\"},\"getProxyAdmin(address)\":{\"details\":\"Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"getProxyImplementation(address)\":{\"details\":\"Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`.\"},\"owner()\":{\"details\":\"Returns the address of the current owner.\"},\"renounceOwnership()\":{\"details\":\"Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner.\"},\"transferOwnership(address)\":{\"details\":\"Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.\"},\"upgrade(address,address)\":{\"details\":\"Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`.\"},\"upgradeAndCall(address,address,bytes)\":{\"details\":\"Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":\"ProxyAdmin\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/access/Ownable.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../utils/Context.sol\\\";\\n\\n/**\\n * @dev Contract module which provides a basic access control mechanism, where\\n * there is an account (an owner) that can be granted exclusive access to\\n * specific functions.\\n *\\n * By default, the owner account will be the one that deploys the contract. This\\n * can later be changed with {transferOwnership}.\\n *\\n * This module is used through inheritance. It will make available the modifier\\n * `onlyOwner`, which can be applied to your functions to restrict their use to\\n * the owner.\\n */\\nabstract contract Ownable is Context {\\n address private _owner;\\n\\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\\n\\n /**\\n * @dev Initializes the contract setting the deployer as the initial owner.\\n */\\n constructor (address initialOwner) {\\n _transferOwnership(initialOwner);\\n }\\n\\n /**\\n * @dev Returns the address of the current owner.\\n */\\n function owner() public view virtual returns (address) {\\n return _owner;\\n }\\n\\n /**\\n * @dev Throws if called by any account other than the owner.\\n */\\n modifier onlyOwner() {\\n require(owner() == _msgSender(), \\\"Ownable: caller is not the owner\\\");\\n _;\\n }\\n\\n /**\\n * @dev Leaves the contract without owner. It will not be possible to call\\n * `onlyOwner` functions anymore. Can only be called by the current owner.\\n *\\n * NOTE: Renouncing ownership will leave the contract without an owner,\\n * thereby removing any functionality that is only available to the owner.\\n */\\n function renounceOwnership() public virtual onlyOwner {\\n _transferOwnership(address(0));\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Can only be called by the current owner.\\n */\\n function transferOwnership(address newOwner) public virtual onlyOwner {\\n require(newOwner != address(0), \\\"Ownable: new owner is the zero address\\\");\\n _transferOwnership(newOwner);\\n }\\n\\n /**\\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\\n * Internal function without access restriction.\\n */\\n function _transferOwnership(address newOwner) internal virtual {\\n address oldOwner = _owner;\\n _owner = newOwner;\\n emit OwnershipTransferred(oldOwner, newOwner);\\n }\\n}\\n\",\"keccak256\":\"0x9b2bbba5bb04f53f277739c1cdff896ba8b3bf591cfc4eab2098c655e8ac251e\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"./TransparentUpgradeableProxy.sol\\\";\\nimport \\\"../../access/Ownable.sol\\\";\\n\\n/**\\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\\n */\\ncontract ProxyAdmin is Ownable {\\n\\n constructor (address initialOwner) Ownable(initialOwner) {}\\n\\n /**\\n * @dev Returns the current implementation of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"implementation()\\\")) == 0x5c60da1b\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"5c60da1b\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Returns the current admin of `proxy`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\\n // We need to manually run the static call since the getter cannot be flagged as view\\n // bytes4(keccak256(\\\"admin()\\\")) == 0xf851a440\\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\\\"f851a440\\\");\\n require(success);\\n return abi.decode(returndata, (address));\\n }\\n\\n /**\\n * @dev Changes the admin of `proxy` to `newAdmin`.\\n *\\n * Requirements:\\n *\\n * - This contract must be the current admin of `proxy`.\\n */\\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\\n proxy.changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\\n proxy.upgradeTo(implementation);\\n }\\n\\n /**\\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\\n *\\n * Requirements:\\n *\\n * - This contract must be the admin of `proxy`.\\n */\\n function upgradeAndCall(\\n TransparentUpgradeableProxy proxy,\\n address implementation,\\n bytes memory data\\n ) public payable virtual onlyOwner {\\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\\n }\\n}\\n\",\"keccak256\":\"0x754888b9c9ab5525343460b0a4fa2e2f4fca9b6a7e0e7ddea4154e2b1182a45d\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Context.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Provides information about the current execution context, including the\\n * sender of the transaction and its data. While these are generally available\\n * via msg.sender and msg.data, they should not be accessed in such a direct\\n * manner, since when dealing with meta-transactions the account sending and\\n * paying for execution may not be the actual sender (as far as an application\\n * is concerned).\\n *\\n * This contract is only required for intermediate, library-like contracts.\\n */\\nabstract contract Context {\\n function _msgSender() internal view virtual returns (address) {\\n return msg.sender;\\n }\\n\\n function _msgData() internal view virtual returns (bytes calldata) {\\n return msg.data;\\n }\\n}\\n\",\"keccak256\":\"0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x608060405234801561001057600080fd5b50604051610b17380380610b1783398101604081905261002f91610090565b8061003981610040565b50506100c0565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100a257600080fd5b81516001600160a01b03811681146100b957600080fd5b9392505050565b610a48806100cf6000396000f3fe60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "deployedBytecode": "0x60806040526004361061007b5760003560e01c80639623609d1161004e5780639623609d1461012b57806399a88ec41461013e578063f2fde38b1461015e578063f3b7dead1461017e57600080fd5b8063204e1c7a14610080578063715018a6146100c95780637eff275e146100e05780638da5cb5b14610100575b600080fd5b34801561008c57600080fd5b506100a061009b3660046107e4565b61019e565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100d557600080fd5b506100de610255565b005b3480156100ec57600080fd5b506100de6100fb366004610808565b6102e7565b34801561010c57600080fd5b5060005473ffffffffffffffffffffffffffffffffffffffff166100a0565b6100de610139366004610870565b6103ee565b34801561014a57600080fd5b506100de610159366004610808565b6104fc565b34801561016a57600080fd5b506100de6101793660046107e4565b6105d1565b34801561018a57600080fd5b506100a06101993660046107e4565b610701565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907f5c60da1b00000000000000000000000000000000000000000000000000000000815260040190565b600060405180830381855afa9150503d8060008114610225576040519150601f19603f3d011682016040523d82523d6000602084013e61022a565b606091505b50915091508161023957600080fd5b8080602001905181019061024d9190610964565b949350505050565b60005473ffffffffffffffffffffffffffffffffffffffff1633146102db576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064015b60405180910390fd5b6102e5600061074d565b565b60005473ffffffffffffffffffffffffffffffffffffffff163314610368576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f8f28397000000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690638f283970906024015b600060405180830381600087803b1580156103d257600080fd5b505af11580156103e6573d6000803e3d6000fd5b505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461046f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f4f1ef28600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff841690634f1ef2869034906104c59086908690600401610981565b6000604051808303818588803b1580156104de57600080fd5b505af11580156104f2573d6000803e3d6000fd5b5050505050505050565b60005473ffffffffffffffffffffffffffffffffffffffff16331461057d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b6040517f3659cfe600000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff8281166004830152831690633659cfe6906024016103b8565b60005473ffffffffffffffffffffffffffffffffffffffff163314610652576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102d2565b73ffffffffffffffffffffffffffffffffffffffff81166106f5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f646472657373000000000000000000000000000000000000000000000000000060648201526084016102d2565b6106fe8161074d565b50565b60008060008373ffffffffffffffffffffffffffffffffffffffff166040516101ea907ff851a44000000000000000000000000000000000000000000000000000000000815260040190565b6000805473ffffffffffffffffffffffffffffffffffffffff8381167fffffffffffffffffffffffff0000000000000000000000000000000000000000831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b73ffffffffffffffffffffffffffffffffffffffff811681146106fe57600080fd5b6000602082840312156107f657600080fd5b8135610801816107c2565b9392505050565b6000806040838503121561081b57600080fd5b8235610826816107c2565b91506020830135610836816107c2565b809150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60008060006060848603121561088557600080fd5b8335610890816107c2565b925060208401356108a0816107c2565b9150604084013567ffffffffffffffff808211156108bd57600080fd5b818601915086601f8301126108d157600080fd5b8135818111156108e3576108e3610841565b604051601f82017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0908116603f0116810190838211818310171561092957610929610841565b8160405282815289602084870101111561094257600080fd5b8260208601602083013760006020848301015280955050505050509250925092565b60006020828403121561097657600080fd5b8151610801816107c2565b73ffffffffffffffffffffffffffffffffffffffff8316815260006020604081840152835180604085015260005b818110156109cb578581018301518582016060015282016109af565b818111156109dd576000606083870101525b50601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160600194935050505056fea2646970667358221220bd6c09ab03bfaf9ec60a4bf8cd98903cecb891974e17e2d76a3b2002c97eeb8964736f6c634300080a0033", + "devdoc": { + "details": "This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.", + "kind": "dev", + "methods": { + "changeProxyAdmin(address,address)": { + "details": "Changes the admin of `proxy` to `newAdmin`. Requirements: - This contract must be the current admin of `proxy`." + }, + "getProxyAdmin(address)": { + "details": "Returns the current admin of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "getProxyImplementation(address)": { + "details": "Returns the current implementation of `proxy`. Requirements: - This contract must be the admin of `proxy`." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + }, + "upgrade(address,address)": { + "details": "Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}. Requirements: - This contract must be the admin of `proxy`." + }, + "upgradeAndCall(address,address,bytes)": { + "details": "Upgrades `proxy` to `implementation` and calls a function on the new implementation. See {TransparentUpgradeableProxy-upgradeToAndCall}. Requirements: - This contract must be the admin of `proxy`." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [ + { + "astId": 7, + "contract": "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol:ProxyAdmin", + "label": "_owner", + "offset": 0, + "slot": "0", + "type": "t_address" + } + ], + "types": { + "t_address": { + "encoding": "inplace", + "label": "address", + "numberOfBytes": "20" + } + } + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/FeeDistributor.json b/packages/sdk/deployments/bob/FeeDistributor.json new file mode 100644 index 000000000..9b4693342 --- /dev/null +++ b/packages/sdk/deployments/bob/FeeDistributor.json @@ -0,0 +1,1022 @@ +{ + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_callPool", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_callPool", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_registerComptrollerExtension", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address payable" + }, + { + "name": "extensionToAdd", + "type": "address", + "internalType": "contract DiamondExtension" + }, + { + "name": "extensionToReplace", + "type": "address", + "internalType": "contract DiamondExtension" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setCErc20DelegateExtensions", + "inputs": [ + { + "name": "cErc20Delegate", + "type": "address", + "internalType": "address" + }, + { + "name": "extensions", + "type": "address[]", + "internalType": "contract DiamondExtension[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setComptrollerExtensions", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "extensions", + "type": "address[]", + "internalType": "contract DiamondExtension[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setCustomInterestFeeRate", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "rate", + "type": "int256", + "internalType": "int256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setDefaultInterestFeeRate", + "inputs": [ + { + "name": "_defaultInterestFeeRate", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setLatestCErc20Delegate", + "inputs": [ + { + "name": "delegateType", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "becomeImplementationData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setLatestComptrollerImplementation", + "inputs": [ + { + "name": "oldImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setLatestPluginImplementation", + "inputs": [ + { + "name": "oldImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPoolLimits", + "inputs": [ + { + "name": "_minBorrowEth", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_maxUtilizationRate", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_upgradePluginToLatestImplementation", + "inputs": [ + { + "name": "cDelegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_withdrawAssets", + "inputs": [ + { + "name": "erc20Contract", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "authoritiesRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract AuthoritiesRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "autoUpgradePool", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "cErc20DelegateExtensions", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract DiamondExtension" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "canCall", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + }, + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "functionSig", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "comptrollerExtensions", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract DiamondExtension" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "customInterestFeeRates", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultInterestFeeRate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployCErc20", + "inputs": [ + { + "name": "delegateType", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "constructorData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "becomeImplData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getCErc20DelegateExtensions", + "inputs": [ + { + "name": "cErc20Delegate", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract DiamondExtension[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getComptrollerExtensions", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract DiamondExtension[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMinBorrowEth", + "inputs": [ + { + "name": "_ctoken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_defaultInterestFeeRate", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "interestFeeRate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestCErc20Delegate", + "inputs": [ + { + "name": "delegateType", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestComptrollerImplementation", + "inputs": [ + { + "name": "oldImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestPluginImplementation", + "inputs": [ + { + "name": "oldImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "marketsCounter", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxUtilizationRate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minBorrowEth", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "reinitialize", + "inputs": [ + { + "name": "_ar", + "type": "address", + "internalType": "contract AuthoritiesRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "transactionIndex": 1, + "gasUsed": "816791", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800020000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000020000000000000000000000000000000020000000000000800000800000000800000000000000000000000400000000000000000000000000000000000000000001080000000000000c00000000000000000000000000000000400000000000000000004000000080000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a", + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000009bad1f7685f33ad855ae81089dfe79040864e2f6" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + }, + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + }, + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + }, + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + }, + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + } + ], + "blockNumber": 3777647, + "cumulativeGasUsed": "860630", + "status": 1, + "byzantium": true + }, + "args": [ + "0x9BAD1f7685f33ad855AE81089dFe79040864E2F6", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xfe4b84df000000000000000000000000000000000000000000000000016345785d8a0000" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + { + "type": "BigNumber", + "hex": "0x016345785d8a0000" + } + ] + }, + "implementation": "0x9BAD1f7685f33ad855AE81089dFe79040864E2F6", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/FeeDistributor_Implementation.json b/packages/sdk/deployments/bob/FeeDistributor_Implementation.json new file mode 100644 index 000000000..c7925a6a1 --- /dev/null +++ b/packages/sdk/deployments/bob/FeeDistributor_Implementation.json @@ -0,0 +1,2050 @@ +{ + "address": "0x9BAD1f7685f33ad855AE81089dFe79040864E2F6", + "abi": [ + { + "type": "receive", + "stateMutability": "payable" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_callPool", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "data", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_callPool", + "inputs": [ + { + "name": "targets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "data", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_registerComptrollerExtension", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address payable" + }, + { + "name": "extensionToAdd", + "type": "address", + "internalType": "contract DiamondExtension" + }, + { + "name": "extensionToReplace", + "type": "address", + "internalType": "contract DiamondExtension" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setCErc20DelegateExtensions", + "inputs": [ + { + "name": "cErc20Delegate", + "type": "address", + "internalType": "address" + }, + { + "name": "extensions", + "type": "address[]", + "internalType": "contract DiamondExtension[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setComptrollerExtensions", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "extensions", + "type": "address[]", + "internalType": "contract DiamondExtension[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setCustomInterestFeeRate", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "rate", + "type": "int256", + "internalType": "int256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setDefaultInterestFeeRate", + "inputs": [ + { + "name": "_defaultInterestFeeRate", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setLatestCErc20Delegate", + "inputs": [ + { + "name": "delegateType", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "becomeImplementationData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setLatestComptrollerImplementation", + "inputs": [ + { + "name": "oldImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setLatestPluginImplementation", + "inputs": [ + { + "name": "oldImplementation", + "type": "address", + "internalType": "address" + }, + { + "name": "newImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPoolLimits", + "inputs": [ + { + "name": "_minBorrowEth", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_maxUtilizationRate", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_upgradePluginToLatestImplementation", + "inputs": [ + { + "name": "cDelegator", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_withdrawAssets", + "inputs": [ + { + "name": "erc20Contract", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "authoritiesRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract AuthoritiesRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "autoUpgradePool", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "cErc20DelegateExtensions", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract DiamondExtension" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "canCall", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "address" + }, + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "target", + "type": "address", + "internalType": "address" + }, + { + "name": "functionSig", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "comptrollerExtensions", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract DiamondExtension" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "customInterestFeeRates", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultInterestFeeRate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployCErc20", + "inputs": [ + { + "name": "delegateType", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "constructorData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "becomeImplData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getCErc20DelegateExtensions", + "inputs": [ + { + "name": "cErc20Delegate", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract DiamondExtension[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getComptrollerExtensions", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract DiamondExtension[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMinBorrowEth", + "inputs": [ + { + "name": "_ctoken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_defaultInterestFeeRate", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "interestFeeRate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestCErc20Delegate", + "inputs": [ + { + "name": "delegateType", + "type": "uint8", + "internalType": "uint8" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestComptrollerImplementation", + "inputs": [ + { + "name": "oldImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "latestPluginImplementation", + "inputs": [ + { + "name": "oldImplementation", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "marketsCounter", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "maxUtilizationRate", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "minBorrowEth", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "reinitialize", + "inputs": [ + { + "name": "_ar", + "type": "address", + "internalType": "contract AuthoritiesRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xdd4f54504533c223304a1cf56ce6ea43deb0344cacc47116831e6cfe63f698a7", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x9BAD1f7685f33ad855AE81089dFe79040864E2F6", + "transactionIndex": 1, + "gasUsed": "4670561", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xd7fb1c8b81b489cf3526a4e90ce9044ebd3b9f46f4af4b9f5768672b38108bf2", + "transactionHash": "0xdd4f54504533c223304a1cf56ce6ea43deb0344cacc47116831e6cfe63f698a7", + "logs": [], + "blockNumber": 3777644, + "cumulativeGasUsed": "4714400", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "data", + "type": "bytes[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_callPool" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "targets", + "type": "address[]" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_callPool" + }, + { + "inputs": [ + { + "internalType": "address payable", + "name": "pool", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_registerComptrollerExtension" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cErc20Delegate", + "type": "address" + }, + { + "internalType": "contract DiamondExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setCErc20DelegateExtensions" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "contract DiamondExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setComptrollerExtensions" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "int256", + "name": "rate", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setCustomInterestFeeRate" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_defaultInterestFeeRate", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setDefaultInterestFeeRate" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "becomeImplementationData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLatestCErc20Delegate" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLatestComptrollerImplementation" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + }, + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLatestPluginImplementation" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_minBorrowEth", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_maxUtilizationRate", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPoolLimits" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cDelegator", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_upgradePluginToLatestImplementation", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "erc20Contract", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_withdrawAssets" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "authoritiesRegistry", + "outputs": [ + { + "internalType": "contract AuthoritiesRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "autoUpgradePool" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "cErc20DelegateExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "target", + "type": "address" + }, + { + "internalType": "bytes4", + "name": "functionSig", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "canCall", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "comptrollerExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "customInterestFeeRates", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "defaultInterestFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bytes", + "name": "becomeImplData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "deployCErc20", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "cErc20Delegate", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getCErc20DelegateExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getComptrollerExtensions", + "outputs": [ + { + "internalType": "contract DiamondExtension[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_ctoken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getMinBorrowEth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_defaultInterestFeeRate", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "interestFeeRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "delegateType", + "type": "uint8" + } + ], + "stateMutability": "view", + "type": "function", + "name": "latestCErc20Delegate", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bytes", + "name": "", + "type": "bytes" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "latestComptrollerImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldImplementation", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "latestPluginImplementation", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "marketsCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "maxUtilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "minBorrowEth", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract AuthoritiesRegistry", + "name": "_ar", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reinitialize" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [], + "stateMutability": "payable", + "type": "receive" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_callPool(address[],bytes)": { + "details": "Sends data to a contract.", + "params": { + "data": "The data to be sent to each of `targets`.", + "targets": "The contracts to which `data` will be sent." + } + }, + "_callPool(address[],bytes[])": { + "details": "Sends data to a contract.", + "params": { + "data": "The data to be sent to each of `targets`.", + "targets": "The contracts to which `data` will be sent." + } + }, + "_setCustomInterestFeeRate(address,int256)": { + "details": "Sets the proportion of Ionic pool interest taken as a protocol fee.", + "params": { + "comptroller": "The Unitroller (Comptroller proxy) address.", + "rate": "The proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + } + }, + "_setDefaultInterestFeeRate(uint256)": { + "details": "Sets the default proportion of Ionic pool interest taken as a protocol fee.", + "params": { + "_defaultInterestFeeRate": "The default proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + } + }, + "_setLatestCErc20Delegate(uint8,address,bytes)": { + "details": "Sets the latest `CErc20Delegate` upgrade implementation address and data.", + "params": { + "becomeImplementationData": "Data passed to the new implementation via `becomeImplementation` after upgrade.", + "delegateType": "The old `CErc20Delegate` implementation address to upgrade from.", + "newImplementation": "Latest `CErc20Delegate` implementation address." + } + }, + "_setLatestComptrollerImplementation(address,address)": { + "details": "Sets the latest `Comptroller` upgrade implementation address.", + "params": { + "newImplementation": "Latest `Comptroller` implementation address.", + "oldImplementation": "The old `Comptroller` implementation address to upgrade from." + } + }, + "_setLatestPluginImplementation(address,address)": { + "details": "Sets the latest plugin upgrade implementation address.", + "params": { + "newImplementation": "Latest plugin implementation address.", + "oldImplementation": "The old plugin implementation address to upgrade from." + } + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "_setPoolLimits(uint256,uint256)": { + "details": "Sets the proportion of Ionic pool interest taken as a protocol fee.", + "params": { + "_maxUtilizationRate": "Maximum utilization rate (scaled by 1e18) for Ionic pool assets (only checked on new borrows, not redemptions).", + "_minBorrowEth": "Minimum borrow balance (in ETH) per user per Ionic pool asset (only checked on new borrows, not redemptions)." + } + }, + "_upgradePluginToLatestImplementation(address)": { + "details": "Upgrades a plugin of a CErc20PluginDelegate market to the latest implementation", + "params": { + "cDelegator": "the proxy address" + }, + "returns": { + "_0": "if the plugin was upgraded or not" + } + }, + "_withdrawAssets(address)": { + "details": "Withdraws accrued fees on interest.", + "params": { + "erc20Contract": "The ERC20 token address to withdraw. Set to the zero address to withdraw ETH." + } + }, + "deployCErc20(uint8,bytes,bytes)": { + "details": "Deploys a CToken for an underlying ERC20", + "params": { + "constructorData": "Encoded construction data for `CToken initialize()`" + } + }, + "initialize(uint256)": { + "details": "Initializer that sets initial values of state variables.", + "params": { + "_defaultInterestFeeRate": "The default proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + } + }, + "latestCErc20Delegate(uint8)": { + "details": "Latest CErc20Delegate implementation for each existing implementation." + }, + "latestComptrollerImplementation(address)": { + "details": "Latest Comptroller implementation for each existing implementation." + }, + "latestPluginImplementation(address)": { + "details": "Latest Plugin implementation for each existing implementation." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "customInterestFeeRates(address)": { + "notice": "Maps Unitroller (Comptroller proxy) addresses to the proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + }, + "defaultInterestFeeRate()": { + "notice": "The proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + }, + "interestFeeRate()": { + "notice": "Returns the proportion of Ionic pool interest taken as a protocol fee (scaled by 1e18)." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/FeeDistributor.sol": "FeeDistributor" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/FeeDistributor.sol": { + "keccak256": "0x5785c93499f16642fef38aa423cacf7c9d286f6ec0e4873d75165279fdab72c7", + "urls": [ + "bzz-raw://129be44e3e7c21dcaef33dac46bdad1a4accfcfe53a3a2b7fd423e54f3f5b510", + "dweb:/ipfs/QmZNmJeAL2R7EoRC1SfsUHtQPcaoHCMv3kJ6znpXjKG7Xq" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20Delegate.sol": { + "keccak256": "0x64f72d66ae0f29c8400dd922cf2d5f453c1de98a72d7041fa8b39ec2aba25402", + "urls": [ + "bzz-raw://9aee1bf689d90471876505e65535d00d8aa8ae0583c1501080f6f6bcde58ccce", + "dweb:/ipfs/QmdKN6kHFzzbPJN83Dje8xqC2io3KMGA7MmXW6JLFmdikR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20Delegator.sol": { + "keccak256": "0x3844a222bf350de1ae1e28d7d9dad173c8f8299077ea97c5328cc414cb812d16", + "urls": [ + "bzz-raw://fccfc01a3b1d04f1789a0565411b9e6b0bfe992d1493e4f229fc06dcf9b0e13d", + "dweb:/ipfs/QmZvpwkzQuMt9yz9J2gNMtUHNBebjf6gTNT3muYydnRcFa" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CErc20PluginDelegate.sol": { + "keccak256": "0x095cc54097ac06a9b6232222c5197df72c4cc4a0f2c69261bf22ebba2dfead3f", + "urls": [ + "bzz-raw://5641c9c2222825360f0dedcd0706028c062ee42540e55f1088fb10b408d4ed9a", + "dweb:/ipfs/QmW1VLeKMfHNNvcst9uz5PD7QcJizVQ8iRApUE1NJDQ9e3" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CToken.sol": { + "keccak256": "0xb4e55b530281190b49188adca80815b2005de43d543c1ef069d9c154303c4844", + "urls": [ + "bzz-raw://d4c6377302fd9fbd4730f66e3e4b68ad28621b2b504ecd7f9bb99b354e9b98ce", + "dweb:/ipfs/QmYXpMtP6Uxf3T3xY3vgB3zXJP8kev3T6aiXv6G6aAUkvn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IERC4626.sol": { + "keccak256": "0x1dc7b6dc2f1202ca16bff4eb488bb5bfcd6a48202996663a7220a888b261d7cb", + "urls": [ + "bzz-raw://35f5dfa93bcb6e10c2b83a15fd376fcd57baba83d1a09e4ba300859b8cbda1be", + "dweb:/ipfs/QmbnBkjAsEn97WyATWGF8ftifX55S4efA9RYyiuFZ4juhP" + ], + "license": null + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506153b1806100206000396000f3fe608060405260043610620002635760003560e01c8063a71d085d1162000147578063e35a480111620000b9578063fa7cc72d1162000078578063fa7cc72d1462000778578063fc4d33f9146200079d578063fc773d3314620007b5578063fdb25fb114620007da578063fe4b84df14620007f257600080fd5b8063e35a480114620006bf578063e95600be14620006e4578063eab8a3881462000709578063f2fde38b146200072e578063f7e7d1fd146200075357600080fd5b8063cbc505f81162000106578063cbc505f81462000623578063dd86fea11462000648578063df595cb81462000660578063dfcb48bd1462000685578063e30c3978146200069d57600080fd5b8063a71d085d146200055b578063aa84161c1462000573578063b01b86fd14620005a8578063bbcdd6d314620005cd578063c5232b4714620005f257600080fd5b8063642843a511620001e157806384651d7311620001a057806384651d7314620004b757806388457be114620004cf5780638aac2f0c14620004f45780638da5cb5b1462000516578063930d2438146200053657600080fd5b8063642843a514620003fa5780636e96dfd7146200041f578063715018a614620004445780637a1133d6146200045c57806381218ea9146200049257600080fd5b80632203abb5116200022e5780632203abb514620003285780632acbff3914620003665780633465b6e1146200038b5780633ddd836d14620003b057806351f02d6a14620003d557600080fd5b806306bc461114620002705780630b2a2394146200029757806311a0e21714620002cf5780631259821c146200030357600080fd5b366200026b57005b600080fd5b3480156200027d57600080fd5b50620002956200028f366004620028c9565b62000817565b005b348015620002a457600080fd5b50620002bc620002b6366004620028f8565b62000871565b6040519081526020015b60405180910390f35b348015620002dc57600080fd5b50620002f4620002ee366004620028f8565b62000b83565b604051620002c6919062002918565b3480156200031057600080fd5b50620002956200032236600462002967565b62000bfb565b3480156200033557600080fd5b506200034d62000347366004620028c9565b62000c33565b6040516001600160a01b039091168152602001620002c6565b3480156200037357600080fd5b506200029562000385366004620029f4565b62000c6c565b3480156200039857600080fd5b5062000295620003aa366004620028f8565b62000db4565b348015620003bd57600080fd5b5062000295620003cf36600462002a67565b62000ff1565b348015620003e257600080fd5b506200034d620003f436600462002b0e565b62001065565b3480156200040757600080fd5b50620002956200041936600462002b9a565b620014bd565b3480156200042c57600080fd5b50620002956200043e366004620028f8565b620014d2565b3480156200045157600080fd5b50620002956200153e565b3480156200046957600080fd5b50620004816200047b366004620028f8565b62001584565b6040519015158152602001620002c6565b3480156200049f57600080fd5b506200034d620004b1366004620028f8565b620016f9565b348015620004c457600080fd5b50620002bc60705481565b348015620004dc57600080fd5b5062000295620004ee36600462002bbd565b62001744565b3480156200050157600080fd5b50606c546200034d906001600160a01b031681565b3480156200052357600080fd5b506033546001600160a01b03166200034d565b3480156200054357600080fd5b50620002956200055536600462002967565b620017ea565b3480156200056857600080fd5b50620002bc606d5481565b3480156200058057600080fd5b50620005986200059236600462002c1e565b62001822565b604051620002c692919062002c9b565b348015620005b557600080fd5b5062000295620005c736600462002cc1565b62001926565b348015620005da57600080fd5b506200034d620005ec366004620028f8565b620019f3565b348015620005ff57600080fd5b50620002bc62000611366004620028f8565b60666020526000908152604090205481565b3480156200063057600080fd5b50620002f462000642366004620028f8565b62001a3b565b3480156200065557600080fd5b50620002bc62001ab1565b3480156200066d57600080fd5b50620004816200067f36600462002d28565b62001bb2565b3480156200069257600080fd5b50620002bc606f5481565b348015620006aa57600080fd5b506065546200034d906001600160a01b031681565b348015620006cc57600080fd5b5062000295620006de36600462002d99565b62001c4f565b348015620006f157600080fd5b50620002956200070336600462002db3565b62001c89565b3480156200071657600080fd5b50620002956200072836600462002db3565b62001cbe565b3480156200073b57600080fd5b50620002956200074d366004620028f8565b62001ced565b3480156200076057600080fd5b506200029562000772366004620028f8565b62001d60565b3480156200078557600080fd5b506200029562000797366004620028f8565b62001e46565b348015620007aa57600080fd5b506200029562001fac565b348015620007c257600080fd5b506200034d620007d4366004620028c9565b620020c6565b348015620007e757600080fd5b50620002bc606e5481565b348015620007ff57600080fd5b50620002956200081136600462002d99565b620020e3565b6200082162002232565b670de0b6b3a7640000811315620008555760405162461bcd60e51b81526004016200084c9062002e0e565b60405180910390fd5b6001600160a01b03909116600090815260666020526040902055565b6000806001600160a01b03831663c37f68e2336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401608060405180830381865afa158015620008c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ef919062002e59565b50925050508062000904575050606e54919050565b6000836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096b919062002e90565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009d4919062002e90565b90506000816001600160a01b031663aea91078876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a4c919062002e90565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801562000a91573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ab7919062002eb0565b90506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000afa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b20919062002eca565b60ff169050600062000b3482600a62002ffd565b62000b4087856200300b565b62000b4c91906200302d565b9050606e5481111562000b6757506000979650505050505050565b80606e5462000b77919062003050565b98975050505050505050565b6001600160a01b0381166000908152606b602090815260409182902080548351818402810184019094528084526060939283018282801562000bef57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000bd0575b50505050509050919050565b62000c0562002232565b6001600160a01b03918216600090815260696020526040902080546001600160a01b03191691909216179055565b606b602052816000526040600020818154811062000c5057600080fd5b6000918252602090912001546001600160a01b03169150829050565b62000c7662002232565b821580159062000c8557508281145b62000ceb5760405162461bcd60e51b815260206004820152602f60248201527f4172726179206c656e67746873206d75737420626520657175616c20616e642060448201526e33b932b0ba32b9103a3430b710181760891b60648201526084016200084c565b60005b8381101562000dad5762000d9783838381811062000d105762000d106200306a565b905060200281019062000d24919062003080565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811062000d705762000d706200306a565b905060200201602081019062000d879190620028f8565b6001600160a01b03169062002290565b508062000da481620030ca565b91505062000cee565b5050505050565b6001600160a01b03811662000ef157478062000e1d5760405162461bcd60e51b815260206004820152602160248201527f4e6f2062616c616e636520617661696c61626c6520746f2077697468647261776044820152601760f91b60648201526084016200084c565b600062000e326033546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d806000811462000e7e576040519150601f19603f3d011682016040523d82523d6000602084013e62000e83565b606091505b505090508062000eec5760405162461bcd60e51b815260206004820152602d60248201527f4661696c656420746f207472616e73666572204554482062616c616e6365207460448201526c379036b9b39739b2b73232b91760991b60648201526084016200084c565b505050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f61919062002eb0565b90506000811162000fc55760405162461bcd60e51b815260206004820152602760248201527f4e6f20746f6b656e2062616c616e636520617661696c61626c6520746f2077696044820152663a34323930bb9760c91b60648201526084016200084c565b62000eec62000fdc6033546001600160a01b031690565b6001600160a01b0384169083620022dd565b50565b62000ffb62002232565b6040516389cd985560e01b81526001600160a01b03838116600483015282811660248301528416906389cd985590604401600060405180830381600087803b1580156200104757600080fd5b505af11580156200105c573d6000803e3d6000fd5b50505050505050565b6000808062001078604082888a620030e8565b81019062001087919062002967565b90925090506001600160a01b0381163314620010e65760405162461bcd60e51b815260206004820152601a60248201527f436f6d7074726f6c6c6572206973206e6f742073656e6465722e00000000000060448201526064016200084c565b60003383606d60008154620010fb90620030ca565b91829055506040516bffffffffffffffffffffffff19606094851b811660208301529290931b909116603483015260488201526068016040516020818303038152906040528051906020012090506000604051806020016200115d90620027a9565b601f1982820381018352601f9091011660408190526200118591908b908b9060200162003114565b60405160208183030381529060405290506000620011a66000848462002331565b60ff8c166000908152606860209081526040808320815180830190925280546001600160a01b03168252600181018054959650939491939092840191620011ed906200313e565b80601f01602080910402602001604051908101604052809291908181526020018280546200121b906200313e565b80156200126c5780601f1062001240576101008083540402835291602001916200126c565b820191906000526020600020905b8154815290600101906020018083116200124e57829003601f168201915b50505091909252505081516040516389cd985560e01b81526001600160a01b038083166004830152600060248301529394509092851691506389cd985590604401600060405180830381600087803b158015620012c857600080fd5b505af1158015620012dd573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606b60209081526040808320805482518185028101850190935280835291929091908301828280156200134d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200132e575b5050505050905060005b81518110156200144557826001600160a01b03168282815181106200138057620013806200306a565b60200260200101516001600160a01b031614156200139e5762001430565b846001600160a01b03166389cd9855838381518110620013c257620013c26200306a565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401600060405180830381600087803b1580156200141657600080fd5b505af11580156200142b573d6000803e3d6000fd5b505050505b806200143c81620030ca565b91505062001357565b50604051630adccee560e31b81526001600160a01b038516906356e677289062001476908e908e906004016200317b565b600060405180830381600087803b1580156200149157600080fd5b505af1158015620014a6573d6000803e3d6000fd5b50959a505050505050505050505095945050505050565b620014c762002232565b606e91909155606f55565b620014dc62002232565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6200154862002232565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016200084c565b60006200159062002232565b60008290506000816001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620015d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015fc919062002e90565b6001600160a01b038181166000908152606960205260409081902054905163033e92d960e31b815290821660048201529192508316906319f496c890602401600060405180830381600087803b1580156200165657600080fd5b505af11580156200166b573d6000803e3d6000fd5b505050506000826001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d6919062002e90565b9050816001600160a01b0316816001600160a01b0316141593505050505b919050565b6001600160a01b038181166000908152606960205260408120549091166200172257816200173e565b6001600160a01b03808316600090815260696020526040902054165b92915050565b6200174e62002232565b6040518060400160405280846001600160a01b0316815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060ff87168152606860209081526040909120835181546001600160a01b0319166001600160a01b039091161781558382015180519193506200105c926001850192910190620027b7565b620017f462002232565b6001600160a01b03918216600090815260676020526040902080546001600160a01b03191691909216179055565b60ff81166000908152606860209081526040808320815180830190925280546001600160a01b03168252600181018054606094869493929084019162001868906200313e565b80601f016020809104026020016040519081016040528092919081815260200182805462001896906200313e565b8015620018e75780601f10620018bb57610100808354040283529160200191620018e7565b820191906000526020600020905b815481529060010190602001808311620018c957829003601f168201915b50505091909252505081519192506060916001600160a01b03161515905062001913576000816200191b565b815160208301515b935093505050915091565b6200193062002232565b826200197f5760405162461bcd60e51b815260206004820152601e60248201527f4e6f2074617267657420616464726573736573207370656369666965642e000060448201526064016200084c565b60005b8381101562000dad57620019dd83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811062000d705762000d706200306a565b5080620019ea81620030ca565b91505062001982565b6001600160a01b0381811660009081526067602052604081205490911662001a1c57816200173e565b506001600160a01b039081166000908152606760205260409020541690565b6001600160a01b0381166000908152606a602090815260409182902080548351818402810184019094528084526060939283018282801562000bef576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000bd05750505050509050919050565b60408051600481526024810182526020810180516001600160e01b0316635fe3b56760e01b179052905160009182918291339162001af09190620031aa565b600060405180830381855afa9150503d806000811462001b2d576040519150601f19603f3d011682016040523d82523d6000602084013e62001b32565b606091505b509150915081801562001b46575080516020145b1562001ba85760008180602001905181019062001b64919062002e90565b6001600160a01b03811660009081526066602052604081205491925081131562001b9057949350505050565b600081121562001ba557600094505050505090565b50505b6070549250505090565b606c54604051631beb2b9760e31b81526001600160a01b038681166004830152858116602483015284811660448301526001600160e01b031984166064830152600092169063df595cb890608401602060405180830381865afa15801562001c1e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c449190620031c8565b90505b949350505050565b62001c5962002232565b670de0b6b3a764000081111562001c845760405162461bcd60e51b81526004016200084c9062002e0e565b607055565b62001c9362002232565b6001600160a01b0383166000908152606a6020526040902062001cb890838362002846565b50505050565b62001cc862002232565b6001600160a01b0383166000908152606b6020526040902062001cb890838362002846565b62001cf762002232565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633148062001e2357600062001da87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b03811633148062001e205760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b60648201526084016200084c565b50505b50606c80546001600160a01b0319166001600160a01b0392909216919091179055565b62001e5062002232565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ebb91908101906200320f565b9050816001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001ef957600080fd5b505af115801562001f0e573d6000803e3d6000fd5b5050505060005b81518160ff16101562000eec57818160ff168151811062001f3a5762001f3a6200306a565b60200260200101516001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001f7d57600080fd5b505af115801562001f92573d6000803e3d6000fd5b50505050808062001fa390620032d6565b91505062001f15565b6065546001600160a01b03163314620020005760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016200084c565b6000620020156033546001600160a01b031690565b6065549091506001600160a01b03166200202f8162002438565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910162001532565b606a602052816000526040600020818154811062000c5057600080fd5b600054610100900460ff1615808015620021045750600054600160ff909116105b80620021205750303b15801562002120575060005460ff166001145b620021855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016200084c565b6000805460ff191660011790558015620021a9576000805461ff0019166101001790555b670de0b6b3a7640000821115620021d45760405162461bcd60e51b81526004016200084c9062002e0e565b620021df336200248a565b6070829055600019606f5580156200222e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200162001532565b5050565b6033546001600160a01b031633146200228e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200084c565b565b6060620022d6838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250620024c9565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905262000eec908490620025ac565b600083471015620023855760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064016200084c565b8151620023d55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016200084c565b8282516020840186f590506001600160a01b038116620022d65760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016200084c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620024b45760405162461bcd60e51b81526004016200084c90620032f9565b620024be62002685565b62000fee8162002438565b6060824710156200252c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200084c565b600080866001600160a01b031685876040516200254a9190620031aa565b60006040518083038185875af1925050503d806000811462002589576040519150601f19603f3d011682016040523d82523d6000602084013e6200258e565b606091505b5091509150620025a187838387620026b9565b979650505050505050565b600062002603826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620027369092919063ffffffff16565b80519091501562000eec5780806020019051810190620026249190620031c8565b62000eec5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200084c565b600054610100900460ff16620026af5760405162461bcd60e51b81526004016200084c90620032f9565b6200228e62002747565b606083156200272a57825162002722576001600160a01b0385163b620027225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200084c565b508162001c47565b62001c4783836200277c565b606062001c478484600085620024c9565b600054610100900460ff16620027715760405162461bcd60e51b81526004016200084c90620032f9565b6200228e3362002438565b8151156200278d5781518083602001fd5b8060405162461bcd60e51b81526004016200084c919062003344565b61204b806200335a83390190565b828054620027c5906200313e565b90600052602060002090601f016020900481019282620027e9576000855562002834565b82601f106200280457805160ff191683800117855562002834565b8280016001018555821562002834579182015b828111156200283457825182559160200191906001019062002817565b50620028429291506200289c565b5090565b82805482825590600052602060002090810192821562002834579160200282015b82811115620028345781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019062002867565b5b808211156200284257600081556001016200289d565b6001600160a01b038116811462000fee57600080fd5b60008060408385031215620028dd57600080fd5b8235620028ea81620028b3565b946020939093013593505050565b6000602082840312156200290b57600080fd5b8135620022d681620028b3565b6020808252825182820181905260009190848201906040850190845b818110156200295b5783516001600160a01b03168352928401929184019160010162002934565b50909695505050505050565b600080604083850312156200297b57600080fd5b82356200298881620028b3565b915060208301356200299a81620028b3565b809150509250929050565b60008083601f840112620029b857600080fd5b50813567ffffffffffffffff811115620029d157600080fd5b6020830191508360208260051b8501011115620029ed57600080fd5b9250929050565b6000806000806040858703121562002a0b57600080fd5b843567ffffffffffffffff8082111562002a2457600080fd5b62002a3288838901620029a5565b9096509450602087013591508082111562002a4c57600080fd5b5062002a5b87828801620029a5565b95989497509550505050565b60008060006060848603121562002a7d57600080fd5b833562002a8a81620028b3565b9250602084013562002a9c81620028b3565b9150604084013562002aae81620028b3565b809150509250925092565b60ff8116811462000fee57600080fd5b60008083601f84011262002adc57600080fd5b50813567ffffffffffffffff81111562002af557600080fd5b602083019150836020828501011115620029ed57600080fd5b60008060008060006060868803121562002b2757600080fd5b853562002b348162002ab9565b9450602086013567ffffffffffffffff8082111562002b5257600080fd5b62002b6089838a0162002ac9565b9096509450604088013591508082111562002b7a57600080fd5b5062002b898882890162002ac9565b969995985093965092949392505050565b6000806040838503121562002bae57600080fd5b50508035926020909101359150565b6000806000806060858703121562002bd457600080fd5b843562002be18162002ab9565b9350602085013562002bf381620028b3565b9250604085013567ffffffffffffffff81111562002c1057600080fd5b62002a5b8782880162002ac9565b60006020828403121562002c3157600080fd5b8135620022d68162002ab9565b60005b8381101562002c5b57818101518382015260200162002c41565b8381111562001cb85750506000910152565b6000815180845262002c8781602086016020860162002c3e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009062001c479083018462002c6d565b6000806000806040858703121562002cd857600080fd5b843567ffffffffffffffff8082111562002cf157600080fd5b62002cff88838901620029a5565b9096509450602087013591508082111562002d1957600080fd5b5062002a5b8782880162002ac9565b6000806000806080858703121562002d3f57600080fd5b843562002d4c81620028b3565b9350602085013562002d5e81620028b3565b9250604085013562002d7081620028b3565b915060608501356001600160e01b03198116811462002d8e57600080fd5b939692955090935050565b60006020828403121562002dac57600080fd5b5035919050565b60008060006040848603121562002dc957600080fd5b833562002dd681620028b3565b9250602084013567ffffffffffffffff81111562002df357600080fd5b62002e0186828701620029a5565b9497909650939450505050565b6020808252602b908201527f496e7465726573742066656520726174652063616e6e6f74206265206d6f726560408201526a103a3430b710189818129760a91b606082015260800190565b6000806000806080858703121562002e7057600080fd5b505082516020840151604085015160609095015191969095509092509050565b60006020828403121562002ea357600080fd5b8151620022d681620028b3565b60006020828403121562002ec357600080fd5b5051919050565b60006020828403121562002edd57600080fd5b8151620022d68162002ab9565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562002f4157816000190482111562002f255762002f2562002eea565b8085161562002f3357918102915b93841c939080029062002f05565b509250929050565b60008262002f5a575060016200173e565b8162002f69575060006200173e565b816001811462002f82576002811462002f8d5762002fad565b60019150506200173e565b60ff84111562002fa15762002fa162002eea565b50506001821b6200173e565b5060208310610133831016604e8410600b841016171562002fd2575081810a6200173e565b62002fde838362002f00565b806000190482111562002ff55762002ff562002eea565b029392505050565b6000620022d6838362002f49565b600081600019048311821515161562003028576200302862002eea565b500290565b6000826200304b57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101562003065576200306562002eea565b500390565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126200309857600080fd5b83018035915067ffffffffffffffff821115620030b457600080fd5b602001915036819003821315620029ed57600080fd5b6000600019821415620030e157620030e162002eea565b5060010190565b60008085851115620030f957600080fd5b838611156200310757600080fd5b5050820193919092039150565b600084516200312881846020890162002c3e565b8201838582376000930192835250909392505050565b600181811c908216806200315357607f821691505b602082108114156200317557634e487b7160e01b600052602260045260246000fd5b50919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60008251620031be81846020870162002c3e565b9190910192915050565b600060208284031215620031db57600080fd5b81518015158114620022d657600080fd5b634e487b7160e01b600052604160045260246000fd5b8051620016f481620028b3565b600060208083850312156200322357600080fd5b825167ffffffffffffffff808211156200323c57600080fd5b818501915085601f8301126200325157600080fd5b815181811115620032665762003266620031ec565b8060051b604051601f19603f830116810181811085821117156200328e576200328e620031ec565b604052918252848201925083810185019188831115620032ad57600080fd5b938501935b8285101562000b7757620032c68562003202565b84529385019392850192620032b2565b600060ff821660ff811415620032f057620032f062002eea565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b602081526000620022d6602083018462002c6d56fe60806040523480156200001157600080fd5b506040516200204b3803806200204b8339810160408190526200003491620006b1565b336001600160a01b038716146200007b5760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064015b60405180910390fd5b6000886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e2919062000784565b600080546001600160a01b0319166001600160a01b038a8116919091179091556702c68af0bb14000060055560038054610100600160a81b0319166101008c84160217905543600955670de0b6b3a7640000600a55604080516310c8fc9560e11b8152905192935090881691632191f92a916004808201926020929091908290030181865afa1580156200017a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a09190620007b0565b620001d85760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b604482015260640162000072565b600480546001600160a01b0319166001600160a01b038816908117909155604080516000815260208101929092527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926910160405180910390a184516200024690600190602088019062000525565b5083516200025c90600290602087019062000525565b506003805460ff191660ff8316179055600754600654670de0b6b3a76400009190620002899086620007d4565b620002959190620007d4565b1115620002cf5760405162461bcd60e51b8152602060048201526007602482015266085c998e9cd95d60ca1b604482015260640162000072565b60088390556040805160008152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460910160405180910390a16000198214156200031f5760065491505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620007fb565b9050670de0b6b3a76400008184600854620003b69190620007d4565b620003c29190620007d4565b1115620004025760405162461bcd60e51b815260206004820152600d60248201526c0858591b5a5b9199594e9cd95d609a1b604482015260640162000072565b60068390556040805160008152602081018590527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a160078190556040805160008152602081018390527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1506000805460ff60a01b1916600160a01b179055601380546001600160a01b038b166001600160a01b03199091168117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa158015620004ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005159190620007fb565b5050505050505050505062000852565b828054620005339062000815565b90600052602060002090601f016020900481019282620005575760008555620005a2565b82601f106200057257805160ff1916838001178555620005a2565b82800160010185558215620005a2579182015b82811115620005a257825182559160200191906001019062000585565b50620005b0929150620005b4565b5090565b5b80821115620005b05760008155600101620005b5565b6001600160a01b0381168114620005e157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200060c57600080fd5b81516001600160401b0380821115620006295762000629620005e4565b604051601f8301601f19908116603f01168101908282118183101715620006545762000654620005e4565b816040528381526020925086838588010111156200067157600080fd5b600091505b8382101562000695578582018301518183018401529082019062000676565b83821115620006a75760008385830101525b9695505050505050565b600080600080600080600080610100898b031215620006cf57600080fd5b8851620006dc81620005cb565b60208a0151909850620006ef81620005cb565b60408a01519097506200070281620005cb565b60608a01519096506200071581620005cb565b60808a01519095506001600160401b03808211156200073357600080fd5b620007418c838d01620005fa565b955060a08b01519150808211156200075857600080fd5b50620007678b828c01620005fa565b60c08b015160e0909b0151999c989b509699959894979350505050565b6000602082840312156200079757600080fd5b815160ff81168114620007a957600080fd5b9392505050565b600060208284031215620007c357600080fd5b81518015158114620007a957600080fd5b60008219821115620007f657634e487b7160e01b600052601160045260246000fd5b500190565b6000602082840312156200080e57600080fd5b5051919050565b600181811c908216806200082a57607f821691505b602082108114156200084c57634e487b7160e01b600052602260045260246000fd5b50919050565b6117e980620008626000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806389cd9855116100c3578063ba49f54a1161007c578063ba49f54a146102f6578063be99f119146102fe578063c3bf11cd1461030d578063c91a424f14610316578063e207afe214610329578063f3fdb15a1461033c57610158565b806389cd9855146102b55780638d02d9a1146102ca5780638f840ddd146102d357806395d89b41146102dc5780639826394b146102e4578063aa5af0fd146102ed57610158565b80635fe3b567116101155780635fe3b5671461025557806361feacff1461026d5780636333d001146102765780636752e7021461028b5780636c540baf146102995780636f307dc3146102a257610158565b806306fdde03146101cf578063173b9904146101ed57806318160ddd14610204578063313ce5671461020d57806347bd37181461022c5780635c60da1b14610235575b600061016f6000356001600160e01b03191661034f565b90506001600160a01b0381166101ab57604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156101ca573d6000f35b3d6000fd5b6101d761036f565b6040516101e491906112a9565b60405180910390f35b6101f660085481565b6040519081526020016101e4565b6101f6600f5481565b60035461021a9060ff1681565b60405160ff90911681526020016101e4565b6101f6600b5481565b61023d6103fd565b6040516001600160a01b0390911681526020016101e4565b60035461023d9061010090046001600160a01b031681565b6101f6600d5481565b61027e610453565b6040516101e491906112c3565b6101f6666379da05b6000081565b6101f660095481565b60135461023d906001600160a01b031681565b6102c86102c3366004611328565b61045d565b005b6101f660065481565b6101f6600c5481565b6101d76104b5565b6101f6600e5481565b6101f6600a5481565b6102c86104c2565b6101f667016345785d8a000081565b6101f660075481565b60005461023d906001600160a01b031681565b6102c8610337366004611361565b6106a7565b60045461023d906001600160a01b031681565b6000610369826000805160206117bd833981519152610729565b92915050565b6001805461037c906113e6565b80601f01602080910402602001604051908101604052809291908181526020018280546103a8906113e6565b80156103f55780601f106103ca576101008083540402835291602001916103f5565b820191906000526020600020905b8154815290600101906020018083116103d857829003601f168201915b505050505081565b60408051808201909152600e81526d64656c656761746554797065282960901b602090910152600061044e7f2c436e5bba88e403c36d7a2822cd2b39b360d5c6296839bbf72c5a05167fd3ff61034f565b905090565b606061044e6107cf565b6000546001600160a01b031633146104a75760405162461bcd60e51b815260206004820152600d60248201526c085d5b985d5d1a1bdc9a5e9959609a1b60448201526064016101a2565b6104b18282610841565b5050565b6002805461037c906113e6565b333014806104d357506104d3610862565b6105105760405162461bcd60e51b815260206004820152600e60248201526d10b9b2b6331037b91030b236b4b760911b60448201526064016101a2565b60408051600481526024810182526020810180516001600160e01b0316632c436e5b60e01b17905290516000918291309161054a91611421565b600060405180830381855afa9150503d8060008114610585576040519150601f19603f3d011682016040523d82523d6000602084013e61058a565b606091505b5091509150816105cf5760405162461bcd60e51b815260206004820152601060248201526f6e6f2064656c6567617465207479706560801b60448201526064016101a2565b6000818060200190518101906105e5919061143d565b60008054604051632aa1058760e21b815260ff84166004820152929350909182916001600160a01b03169063aa84161c90602401600060405180830381865afa158015610636573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261065e91908101906114a7565b91509150600061066c6103fd565b9050826001600160a01b0316816001600160a01b0316146106965761069183836109df565b61069f565b61069f81610ab7565b505050505050565b6106af610862565b6106e45760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016101a2565b6107248383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109df92505050565b505050565b8054600090815b818110156107c457846001600160e01b03191684600001828154811061075857610758611551565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156107b25783600001818154811061079357610793611551565b6000918252602090912001546001600160a01b03169250610369915050565b806107bc8161157d565b915050610730565b506000949350505050565b60606000805160206117bd83398151915260010180548060200260200160405190810160405280929190818152602001828054801561083757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610819575b5050505050905090565b6001600160a01b038116156108595761085981610bbf565b6104b182610cef565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611598565b6001600160a01b0316336001600160a01b031614801561095c5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095c91906115b5565b806109d957506000546001600160a01b0316331480156109d95750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d991906115b5565b91505090565b60006109e96103fd565b90506109f483610ab7565b610a6e306356e6772860e01b84604051602401610a1191906112a9565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280600c81526020016b08589958dbdb59481a5b5c1b60a21b815250610de7565b50604080516001600160a01b038084168252851660208201527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a1505050565b600080546040516311a0e21760e01b81526001600160a01b038481166004830152909116906311a0e21790602401600060405180830381865afa158015610b02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2a91908101906115fb565b90506000610b366107cf565b905060005b8151811015610b7857610b66828281518110610b5957610b59611551565b6020026020010151610bbf565b80610b708161157d565b915050610b3b565b5060005b8251811015610bb957610ba7838281518110610b9a57610b9a611551565b6020026020010151610cef565b80610bb18161157d565b915050610b7c565b50505050565b6000805160206117bd833981519152610bd782610e83565b60005b600182015460ff8216101561072457826001600160a01b0316826001018260ff1681548110610c0b57610c0b611551565b6000918252602090912001546001600160a01b03161415610cdd57600180830180549091610c389161169a565b81548110610c4857610c48611551565b6000918252602090912001546001830180546001600160a01b039092169160ff8416908110610c7957610c79611551565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600101805480610cba57610cba6116b1565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610ce7816116c7565b915050610bda565b6000805160206117bd83398151915260005b600182015460ff82161015610da757826001600160a01b0316826001018260ff1681548110610d3257610d32611551565b6000918252602090912001546001600160a01b03161415610d955760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c726561647920616464656400000000000000000060448201526064016101a2565b80610d9f816116c7565b915050610d01565b50610db182611042565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b031685604051610e049190611421565b6000604051808303816000865af19150503d8060008114610e41576040519150601f19603f3d011682016040523d82523d6000602084013e610e46565b606091505b509150915081610e7a57805115610e605780518082602001fd5b8360405162461bcd60e51b81526004016101a291906112a9565b95945050505050565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eeb91908101906116e7565b90506000805160206117bd83398151915260005b82518161ffff161015610bb9576000838261ffff1681518110610f2457610f24611551565b60200260200101519050610f388184610729565b6001600160a01b0316856001600160a01b031614610f5857610f58611784565b6000610f6482856111c9565b84549091508490610f779060019061169a565b81548110610f8757610f87611551565b90600052602060002001846000018261ffff1681548110610faa57610faa611551565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff16909102179055835484908061100b5761100b6116b1565b600082815260209020810160001990810180546001600160c01b03191690550190555081905061103a8161179a565b915050610eff565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110aa91908101906116e7565b6000805160206117bd83398151915280549192509060005b83518110156111c25760008482815181106110df576110df611551565b6020026020010151905060006110f58286610729565b90506001600160a01b0381161561113a57604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b03821660248201526044016101a2565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b03199092169390921692909217919091179055836111aa8161179a565b945050505080806111ba9061157d565b9150506110c2565b5050505050565b8054600090815b8161ffff168161ffff16101561124557846001600160e01b031916846000018261ffff168154811061120457611204611551565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156112335791506103699050565b8061123d8161179a565b9150506111d0565b5061ffff949350505050565b60005b8381101561126c578181015183820152602001611254565b83811115610bb95750506000910152565b60008151808452611295816020860160208601611251565b601f01601f19169290920160200192915050565b6020815260006112bc602083018461127d565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156113045783516001600160a01b0316835292840192918401916001016112df565b50909695505050505050565b6001600160a01b038116811461132557600080fd5b50565b6000806040838503121561133b57600080fd5b823561134681611310565b9150602083013561135681611310565b809150509250929050565b60008060006040848603121561137657600080fd5b833561138181611310565b9250602084013567ffffffffffffffff8082111561139e57600080fd5b818601915086601f8301126113b257600080fd5b8135818111156113c157600080fd5b8760208285010111156113d357600080fd5b6020830194508093505050509250925092565b600181811c908216806113fa57607f821691505b6020821081141561141b57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251611433818460208701611251565b9190910192915050565b60006020828403121561144f57600080fd5b815160ff811681146112bc57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561149f5761149f611460565b604052919050565b600080604083850312156114ba57600080fd5b82516114c581611310565b602084015190925067ffffffffffffffff808211156114e357600080fd5b818501915085601f8301126114f757600080fd5b81518181111561150957611509611460565b61151c601f8201601f1916602001611476565b915080825286602082850101111561153357600080fd5b611544816020840160208601611251565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561159157611591611567565b5060010190565b6000602082840312156115aa57600080fd5b81516112bc81611310565b6000602082840312156115c757600080fd5b815180151581146112bc57600080fd5b600067ffffffffffffffff8211156115f1576115f1611460565b5060051b60200190565b6000602080838503121561160e57600080fd5b825167ffffffffffffffff81111561162557600080fd5b8301601f8101851361163657600080fd5b8051611649611644826115d7565b611476565b81815260059190911b8201830190838101908783111561166857600080fd5b928401925b8284101561168f57835161168081611310565b8252928401929084019061166d565b979650505050505050565b6000828210156116ac576116ac611567565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156116de576116de611567565b60010192915050565b600060208083850312156116fa57600080fd5b825167ffffffffffffffff81111561171157600080fd5b8301601f8101851361172257600080fd5b8051611730611644826115d7565b81815260059190911b8201830190838101908783111561174f57600080fd5b928401925b8284101561168f5783516001600160e01b0319811681146117755760008081fd5b82529284019290840190611754565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156117b2576117b2611567565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "2984:11718:0:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405260043610620002635760003560e01c8063a71d085d1162000147578063e35a480111620000b9578063fa7cc72d1162000078578063fa7cc72d1462000778578063fc4d33f9146200079d578063fc773d3314620007b5578063fdb25fb114620007da578063fe4b84df14620007f257600080fd5b8063e35a480114620006bf578063e95600be14620006e4578063eab8a3881462000709578063f2fde38b146200072e578063f7e7d1fd146200075357600080fd5b8063cbc505f81162000106578063cbc505f81462000623578063dd86fea11462000648578063df595cb81462000660578063dfcb48bd1462000685578063e30c3978146200069d57600080fd5b8063a71d085d146200055b578063aa84161c1462000573578063b01b86fd14620005a8578063bbcdd6d314620005cd578063c5232b4714620005f257600080fd5b8063642843a511620001e157806384651d7311620001a057806384651d7314620004b757806388457be114620004cf5780638aac2f0c14620004f45780638da5cb5b1462000516578063930d2438146200053657600080fd5b8063642843a514620003fa5780636e96dfd7146200041f578063715018a614620004445780637a1133d6146200045c57806381218ea9146200049257600080fd5b80632203abb5116200022e5780632203abb514620003285780632acbff3914620003665780633465b6e1146200038b5780633ddd836d14620003b057806351f02d6a14620003d557600080fd5b806306bc461114620002705780630b2a2394146200029757806311a0e21714620002cf5780631259821c146200030357600080fd5b366200026b57005b600080fd5b3480156200027d57600080fd5b50620002956200028f366004620028c9565b62000817565b005b348015620002a457600080fd5b50620002bc620002b6366004620028f8565b62000871565b6040519081526020015b60405180910390f35b348015620002dc57600080fd5b50620002f4620002ee366004620028f8565b62000b83565b604051620002c6919062002918565b3480156200031057600080fd5b50620002956200032236600462002967565b62000bfb565b3480156200033557600080fd5b506200034d62000347366004620028c9565b62000c33565b6040516001600160a01b039091168152602001620002c6565b3480156200037357600080fd5b506200029562000385366004620029f4565b62000c6c565b3480156200039857600080fd5b5062000295620003aa366004620028f8565b62000db4565b348015620003bd57600080fd5b5062000295620003cf36600462002a67565b62000ff1565b348015620003e257600080fd5b506200034d620003f436600462002b0e565b62001065565b3480156200040757600080fd5b50620002956200041936600462002b9a565b620014bd565b3480156200042c57600080fd5b50620002956200043e366004620028f8565b620014d2565b3480156200045157600080fd5b50620002956200153e565b3480156200046957600080fd5b50620004816200047b366004620028f8565b62001584565b6040519015158152602001620002c6565b3480156200049f57600080fd5b506200034d620004b1366004620028f8565b620016f9565b348015620004c457600080fd5b50620002bc60705481565b348015620004dc57600080fd5b5062000295620004ee36600462002bbd565b62001744565b3480156200050157600080fd5b50606c546200034d906001600160a01b031681565b3480156200052357600080fd5b506033546001600160a01b03166200034d565b3480156200054357600080fd5b50620002956200055536600462002967565b620017ea565b3480156200056857600080fd5b50620002bc606d5481565b3480156200058057600080fd5b50620005986200059236600462002c1e565b62001822565b604051620002c692919062002c9b565b348015620005b557600080fd5b5062000295620005c736600462002cc1565b62001926565b348015620005da57600080fd5b506200034d620005ec366004620028f8565b620019f3565b348015620005ff57600080fd5b50620002bc62000611366004620028f8565b60666020526000908152604090205481565b3480156200063057600080fd5b50620002f462000642366004620028f8565b62001a3b565b3480156200065557600080fd5b50620002bc62001ab1565b3480156200066d57600080fd5b50620004816200067f36600462002d28565b62001bb2565b3480156200069257600080fd5b50620002bc606f5481565b348015620006aa57600080fd5b506065546200034d906001600160a01b031681565b348015620006cc57600080fd5b5062000295620006de36600462002d99565b62001c4f565b348015620006f157600080fd5b50620002956200070336600462002db3565b62001c89565b3480156200071657600080fd5b50620002956200072836600462002db3565b62001cbe565b3480156200073b57600080fd5b50620002956200074d366004620028f8565b62001ced565b3480156200076057600080fd5b506200029562000772366004620028f8565b62001d60565b3480156200078557600080fd5b506200029562000797366004620028f8565b62001e46565b348015620007aa57600080fd5b506200029562001fac565b348015620007c257600080fd5b506200034d620007d4366004620028c9565b620020c6565b348015620007e757600080fd5b50620002bc606e5481565b348015620007ff57600080fd5b50620002956200081136600462002d99565b620020e3565b6200082162002232565b670de0b6b3a7640000811315620008555760405162461bcd60e51b81526004016200084c9062002e0e565b60405180910390fd5b6001600160a01b03909116600090815260666020526040902055565b6000806001600160a01b03831663c37f68e2336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401608060405180830381865afa158015620008c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620008ef919062002e59565b50925050508062000904575050606e54919050565b6000836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000945573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200096b919062002e90565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015620009ae573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620009d4919062002e90565b90506000816001600160a01b031663aea91078876001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000a26573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000a4c919062002e90565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801562000a91573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000ab7919062002eb0565b90506000866001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000afa573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b20919062002eca565b60ff169050600062000b3482600a62002ffd565b62000b4087856200300b565b62000b4c91906200302d565b9050606e5481111562000b6757506000979650505050505050565b80606e5462000b77919062003050565b98975050505050505050565b6001600160a01b0381166000908152606b602090815260409182902080548351818402810184019094528084526060939283018282801562000bef57602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831162000bd0575b50505050509050919050565b62000c0562002232565b6001600160a01b03918216600090815260696020526040902080546001600160a01b03191691909216179055565b606b602052816000526040600020818154811062000c5057600080fd5b6000918252602090912001546001600160a01b03169150829050565b62000c7662002232565b821580159062000c8557508281145b62000ceb5760405162461bcd60e51b815260206004820152602f60248201527f4172726179206c656e67746873206d75737420626520657175616c20616e642060448201526e33b932b0ba32b9103a3430b710181760891b60648201526084016200084c565b60005b8381101562000dad5762000d9783838381811062000d105762000d106200306a565b905060200281019062000d24919062003080565b8080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811062000d705762000d706200306a565b905060200201602081019062000d879190620028f8565b6001600160a01b03169062002290565b508062000da481620030ca565b91505062000cee565b5050505050565b6001600160a01b03811662000ef157478062000e1d5760405162461bcd60e51b815260206004820152602160248201527f4e6f2062616c616e636520617661696c61626c6520746f2077697468647261776044820152601760f91b60648201526084016200084c565b600062000e326033546001600160a01b031690565b6001600160a01b03168260405160006040518083038185875af1925050503d806000811462000e7e576040519150601f19603f3d011682016040523d82523d6000602084013e62000e83565b606091505b505090508062000eec5760405162461bcd60e51b815260206004820152602d60248201527f4661696c656420746f207472616e73666572204554482062616c616e6365207460448201526c379036b9b39739b2b73232b91760991b60648201526084016200084c565b505050565b6040516370a0823160e01b815230600482015281906000906001600160a01b038316906370a0823190602401602060405180830381865afa15801562000f3b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000f61919062002eb0565b90506000811162000fc55760405162461bcd60e51b815260206004820152602760248201527f4e6f20746f6b656e2062616c616e636520617661696c61626c6520746f2077696044820152663a34323930bb9760c91b60648201526084016200084c565b62000eec62000fdc6033546001600160a01b031690565b6001600160a01b0384169083620022dd565b50565b62000ffb62002232565b6040516389cd985560e01b81526001600160a01b03838116600483015282811660248301528416906389cd985590604401600060405180830381600087803b1580156200104757600080fd5b505af11580156200105c573d6000803e3d6000fd5b50505050505050565b6000808062001078604082888a620030e8565b81019062001087919062002967565b90925090506001600160a01b0381163314620010e65760405162461bcd60e51b815260206004820152601a60248201527f436f6d7074726f6c6c6572206973206e6f742073656e6465722e00000000000060448201526064016200084c565b60003383606d60008154620010fb90620030ca565b91829055506040516bffffffffffffffffffffffff19606094851b811660208301529290931b909116603483015260488201526068016040516020818303038152906040528051906020012090506000604051806020016200115d90620027a9565b601f1982820381018352601f9091011660408190526200118591908b908b9060200162003114565b60405160208183030381529060405290506000620011a66000848462002331565b60ff8c166000908152606860209081526040808320815180830190925280546001600160a01b03168252600181018054959650939491939092840191620011ed906200313e565b80601f01602080910402602001604051908101604052809291908181526020018280546200121b906200313e565b80156200126c5780601f1062001240576101008083540402835291602001916200126c565b820191906000526020600020905b8154815290600101906020018083116200124e57829003601f168201915b50505091909252505081516040516389cd985560e01b81526001600160a01b038083166004830152600060248301529394509092851691506389cd985590604401600060405180830381600087803b158015620012c857600080fd5b505af1158015620012dd573d6000803e3d6000fd5b505050506001600160a01b0381166000908152606b60209081526040808320805482518185028101850190935280835291929091908301828280156200134d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200132e575b5050505050905060005b81518110156200144557826001600160a01b03168282815181106200138057620013806200306a565b60200260200101516001600160a01b031614156200139e5762001430565b846001600160a01b03166389cd9855838381518110620013c257620013c26200306a565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b03909116600482015260006024820152604401600060405180830381600087803b1580156200141657600080fd5b505af11580156200142b573d6000803e3d6000fd5b505050505b806200143c81620030ca565b91505062001357565b50604051630adccee560e31b81526001600160a01b038516906356e677289062001476908e908e906004016200317b565b600060405180830381600087803b1580156200149157600080fd5b505af1158015620014a6573d6000803e3d6000fd5b50959a505050505050505050505095945050505050565b620014c762002232565b606e91909155606f55565b620014dc62002232565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6200154862002232565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016200084c565b60006200159062002232565b60008290506000816001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620015d6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015fc919062002e90565b6001600160a01b038181166000908152606960205260409081902054905163033e92d960e31b815290821660048201529192508316906319f496c890602401600060405180830381600087803b1580156200165657600080fd5b505af11580156200166b573d6000803e3d6000fd5b505050506000826001600160a01b031663ef01df4f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620016b0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016d6919062002e90565b9050816001600160a01b0316816001600160a01b0316141593505050505b919050565b6001600160a01b038181166000908152606960205260408120549091166200172257816200173e565b6001600160a01b03808316600090815260696020526040902054165b92915050565b6200174e62002232565b6040518060400160405280846001600160a01b0316815260200183838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092018290525093909452505060ff87168152606860209081526040909120835181546001600160a01b0319166001600160a01b039091161781558382015180519193506200105c926001850192910190620027b7565b620017f462002232565b6001600160a01b03918216600090815260676020526040902080546001600160a01b03191691909216179055565b60ff81166000908152606860209081526040808320815180830190925280546001600160a01b03168252600181018054606094869493929084019162001868906200313e565b80601f016020809104026020016040519081016040528092919081815260200182805462001896906200313e565b8015620018e75780601f10620018bb57610100808354040283529160200191620018e7565b820191906000526020600020905b815481529060010190602001808311620018c957829003601f168201915b50505091909252505081519192506060916001600160a01b03161515905062001913576000816200191b565b815160208301515b935093505050915091565b6200193062002232565b826200197f5760405162461bcd60e51b815260206004820152601e60248201527f4e6f2074617267657420616464726573736573207370656369666965642e000060448201526064016200084c565b60005b8381101562000dad57620019dd83838080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525089925088915085905081811062000d705762000d706200306a565b5080620019ea81620030ca565b91505062001982565b6001600160a01b0381811660009081526067602052604081205490911662001a1c57816200173e565b506001600160a01b039081166000908152606760205260409020541690565b6001600160a01b0381166000908152606a602090815260409182902080548351818402810184019094528084526060939283018282801562000bef576020028201919060005260206000209081546001600160a01b0316815260019091019060200180831162000bd05750505050509050919050565b60408051600481526024810182526020810180516001600160e01b0316635fe3b56760e01b179052905160009182918291339162001af09190620031aa565b600060405180830381855afa9150503d806000811462001b2d576040519150601f19603f3d011682016040523d82523d6000602084013e62001b32565b606091505b509150915081801562001b46575080516020145b1562001ba85760008180602001905181019062001b64919062002e90565b6001600160a01b03811660009081526066602052604081205491925081131562001b9057949350505050565b600081121562001ba557600094505050505090565b50505b6070549250505090565b606c54604051631beb2b9760e31b81526001600160a01b038681166004830152858116602483015284811660448301526001600160e01b031984166064830152600092169063df595cb890608401602060405180830381865afa15801562001c1e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062001c449190620031c8565b90505b949350505050565b62001c5962002232565b670de0b6b3a764000081111562001c845760405162461bcd60e51b81526004016200084c9062002e0e565b607055565b62001c9362002232565b6001600160a01b0383166000908152606a6020526040902062001cb890838362002846565b50505050565b62001cc862002232565b6001600160a01b0383166000908152606b6020526040902062001cb890838362002846565b62001cf762002232565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6033546001600160a01b031633148062001e2357600062001da87fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b03811633148062001e205760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b60648201526084016200084c565b50505b50606c80546001600160a01b0319166001600160a01b0392909216919091179055565b62001e5062002232565b6000816001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801562001e91573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405262001ebb91908101906200320f565b9050816001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001ef957600080fd5b505af115801562001f0e573d6000803e3d6000fd5b5050505060005b81518160ff16101562000eec57818160ff168151811062001f3a5762001f3a6200306a565b60200260200101516001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b15801562001f7d57600080fd5b505af115801562001f92573d6000803e3d6000fd5b50505050808062001fa390620032d6565b91505062001f15565b6065546001600160a01b03163314620020005760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016200084c565b6000620020156033546001600160a01b031690565b6065549091506001600160a01b03166200202f8162002438565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910162001532565b606a602052816000526040600020818154811062000c5057600080fd5b600054610100900460ff1615808015620021045750600054600160ff909116105b80620021205750303b15801562002120575060005460ff166001145b620021855760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016200084c565b6000805460ff191660011790558015620021a9576000805461ff0019166101001790555b670de0b6b3a7640000821115620021d45760405162461bcd60e51b81526004016200084c9062002e0e565b620021df336200248a565b6070829055600019606f5580156200222e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200162001532565b5050565b6033546001600160a01b031633146200228e5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016200084c565b565b6060620022d6838360006040518060400160405280601e81526020017f416464726573733a206c6f772d6c6576656c2063616c6c206661696c65640000815250620024c9565b9392505050565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b17905262000eec908490620025ac565b600083471015620023855760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e636500000060448201526064016200084c565b8151620023d55760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f60448201526064016200084c565b8282516020840186f590506001600160a01b038116620022d65760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f790000000000000060448201526064016200084c565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16620024b45760405162461bcd60e51b81526004016200084c90620032f9565b620024be62002685565b62000fee8162002438565b6060824710156200252c5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016200084c565b600080866001600160a01b031685876040516200254a9190620031aa565b60006040518083038185875af1925050503d806000811462002589576040519150601f19603f3d011682016040523d82523d6000602084013e6200258e565b606091505b5091509150620025a187838387620026b9565b979650505050505050565b600062002603826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316620027369092919063ffffffff16565b80519091501562000eec5780806020019051810190620026249190620031c8565b62000eec5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016200084c565b600054610100900460ff16620026af5760405162461bcd60e51b81526004016200084c90620032f9565b6200228e62002747565b606083156200272a57825162002722576001600160a01b0385163b620027225760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016200084c565b508162001c47565b62001c4783836200277c565b606062001c478484600085620024c9565b600054610100900460ff16620027715760405162461bcd60e51b81526004016200084c90620032f9565b6200228e3362002438565b8151156200278d5781518083602001fd5b8060405162461bcd60e51b81526004016200084c919062003344565b61204b806200335a83390190565b828054620027c5906200313e565b90600052602060002090601f016020900481019282620027e9576000855562002834565b82601f106200280457805160ff191683800117855562002834565b8280016001018555821562002834579182015b828111156200283457825182559160200191906001019062002817565b50620028429291506200289c565b5090565b82805482825590600052602060002090810192821562002834579160200282015b82811115620028345781546001600160a01b0319166001600160a01b0384351617825560209092019160019091019062002867565b5b808211156200284257600081556001016200289d565b6001600160a01b038116811462000fee57600080fd5b60008060408385031215620028dd57600080fd5b8235620028ea81620028b3565b946020939093013593505050565b6000602082840312156200290b57600080fd5b8135620022d681620028b3565b6020808252825182820181905260009190848201906040850190845b818110156200295b5783516001600160a01b03168352928401929184019160010162002934565b50909695505050505050565b600080604083850312156200297b57600080fd5b82356200298881620028b3565b915060208301356200299a81620028b3565b809150509250929050565b60008083601f840112620029b857600080fd5b50813567ffffffffffffffff811115620029d157600080fd5b6020830191508360208260051b8501011115620029ed57600080fd5b9250929050565b6000806000806040858703121562002a0b57600080fd5b843567ffffffffffffffff8082111562002a2457600080fd5b62002a3288838901620029a5565b9096509450602087013591508082111562002a4c57600080fd5b5062002a5b87828801620029a5565b95989497509550505050565b60008060006060848603121562002a7d57600080fd5b833562002a8a81620028b3565b9250602084013562002a9c81620028b3565b9150604084013562002aae81620028b3565b809150509250925092565b60ff8116811462000fee57600080fd5b60008083601f84011262002adc57600080fd5b50813567ffffffffffffffff81111562002af557600080fd5b602083019150836020828501011115620029ed57600080fd5b60008060008060006060868803121562002b2757600080fd5b853562002b348162002ab9565b9450602086013567ffffffffffffffff8082111562002b5257600080fd5b62002b6089838a0162002ac9565b9096509450604088013591508082111562002b7a57600080fd5b5062002b898882890162002ac9565b969995985093965092949392505050565b6000806040838503121562002bae57600080fd5b50508035926020909101359150565b6000806000806060858703121562002bd457600080fd5b843562002be18162002ab9565b9350602085013562002bf381620028b3565b9250604085013567ffffffffffffffff81111562002c1057600080fd5b62002a5b8782880162002ac9565b60006020828403121562002c3157600080fd5b8135620022d68162002ab9565b60005b8381101562002c5b57818101518382015260200162002c41565b8381111562001cb85750506000910152565b6000815180845262002c8781602086016020860162002c3e565b601f01601f19169290920160200192915050565b6001600160a01b038316815260406020820181905260009062001c479083018462002c6d565b6000806000806040858703121562002cd857600080fd5b843567ffffffffffffffff8082111562002cf157600080fd5b62002cff88838901620029a5565b9096509450602087013591508082111562002d1957600080fd5b5062002a5b8782880162002ac9565b6000806000806080858703121562002d3f57600080fd5b843562002d4c81620028b3565b9350602085013562002d5e81620028b3565b9250604085013562002d7081620028b3565b915060608501356001600160e01b03198116811462002d8e57600080fd5b939692955090935050565b60006020828403121562002dac57600080fd5b5035919050565b60008060006040848603121562002dc957600080fd5b833562002dd681620028b3565b9250602084013567ffffffffffffffff81111562002df357600080fd5b62002e0186828701620029a5565b9497909650939450505050565b6020808252602b908201527f496e7465726573742066656520726174652063616e6e6f74206265206d6f726560408201526a103a3430b710189818129760a91b606082015260800190565b6000806000806080858703121562002e7057600080fd5b505082516020840151604085015160609095015191969095509092509050565b60006020828403121562002ea357600080fd5b8151620022d681620028b3565b60006020828403121562002ec357600080fd5b5051919050565b60006020828403121562002edd57600080fd5b8151620022d68162002ab9565b634e487b7160e01b600052601160045260246000fd5b600181815b8085111562002f4157816000190482111562002f255762002f2562002eea565b8085161562002f3357918102915b93841c939080029062002f05565b509250929050565b60008262002f5a575060016200173e565b8162002f69575060006200173e565b816001811462002f82576002811462002f8d5762002fad565b60019150506200173e565b60ff84111562002fa15762002fa162002eea565b50506001821b6200173e565b5060208310610133831016604e8410600b841016171562002fd2575081810a6200173e565b62002fde838362002f00565b806000190482111562002ff55762002ff562002eea565b029392505050565b6000620022d6838362002f49565b600081600019048311821515161562003028576200302862002eea565b500290565b6000826200304b57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101562003065576200306562002eea565b500390565b634e487b7160e01b600052603260045260246000fd5b6000808335601e198436030181126200309857600080fd5b83018035915067ffffffffffffffff821115620030b457600080fd5b602001915036819003821315620029ed57600080fd5b6000600019821415620030e157620030e162002eea565b5060010190565b60008085851115620030f957600080fd5b838611156200310757600080fd5b5050820193919092039150565b600084516200312881846020890162002c3e565b8201838582376000930192835250909392505050565b600181811c908216806200315357607f821691505b602082108114156200317557634e487b7160e01b600052602260045260246000fd5b50919050565b60208152816020820152818360408301376000818301604090810191909152601f909201601f19160101919050565b60008251620031be81846020870162002c3e565b9190910192915050565b600060208284031215620031db57600080fd5b81518015158114620022d657600080fd5b634e487b7160e01b600052604160045260246000fd5b8051620016f481620028b3565b600060208083850312156200322357600080fd5b825167ffffffffffffffff808211156200323c57600080fd5b818501915085601f8301126200325157600080fd5b815181811115620032665762003266620031ec565b8060051b604051601f19603f830116810181811085821117156200328e576200328e620031ec565b604052918252848201925083810185019188831115620032ad57600080fd5b938501935b8285101562000b7757620032c68562003202565b84529385019392850192620032b2565b600060ff821660ff811415620032f057620032f062002eea565b60010192915050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b602081526000620022d6602083018462002c6d56fe60806040523480156200001157600080fd5b506040516200204b3803806200204b8339810160408190526200003491620006b1565b336001600160a01b038716146200007b5760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064015b60405180910390fd5b6000886001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000bc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000e2919062000784565b600080546001600160a01b0319166001600160a01b038a8116919091179091556702c68af0bb14000060055560038054610100600160a81b0319166101008c84160217905543600955670de0b6b3a7640000600a55604080516310c8fc9560e11b8152905192935090881691632191f92a916004808201926020929091908290030181865afa1580156200017a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001a09190620007b0565b620001d85760405162461bcd60e51b8152602060048201526007602482015266216e6f7449726d60c81b604482015260640162000072565b600480546001600160a01b0319166001600160a01b038816908117909155604080516000815260208101929092527fedffc32e068c7c95dfd4bdfd5c4d939a084d6b11c4199eac8436ed234d72f926910160405180910390a184516200024690600190602088019062000525565b5083516200025c90600290602087019062000525565b506003805460ff191660ff8316179055600754600654670de0b6b3a76400009190620002899086620007d4565b620002959190620007d4565b1115620002cf5760405162461bcd60e51b8152602060048201526007602482015266085c998e9cd95d60ca1b604482015260640162000072565b60088390556040805160008152602081018590527faaa68312e2ea9d50e16af5068410ab56e1a1fd06037b1a35664812c30f821460910160405180910390a16000198214156200031f5760065491505b60008060009054906101000a90046001600160a01b03166001600160a01b031663dd86fea16040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000374573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200039a9190620007fb565b9050670de0b6b3a76400008184600854620003b69190620007d4565b620003c29190620007d4565b1115620004025760405162461bcd60e51b815260206004820152600d60248201526c0858591b5a5b9199594e9cd95d609a1b604482015260640162000072565b60068390556040805160008152602081018590527fcdd0b588250e1398549f79cfdb8217c186688822905d6715b0834ea1c865594a910160405180910390a160078190556040805160008152602081018390527fedec4b9c99c2cdb231e7fd036f861e0445b015916700f41b9835f984cb9be4cb910160405180910390a1506000805460ff60a01b1916600160a01b179055601380546001600160a01b038b166001600160a01b03199091168117909155604080516318160ddd60e01b815290516318160ddd916004808201926020929091908290030181865afa158015620004ef573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620005159190620007fb565b5050505050505050505062000852565b828054620005339062000815565b90600052602060002090601f016020900481019282620005575760008555620005a2565b82601f106200057257805160ff1916838001178555620005a2565b82800160010185558215620005a2579182015b82811115620005a257825182559160200191906001019062000585565b50620005b0929150620005b4565b5090565b5b80821115620005b05760008155600101620005b5565b6001600160a01b0381168114620005e157600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126200060c57600080fd5b81516001600160401b0380821115620006295762000629620005e4565b604051601f8301601f19908116603f01168101908282118183101715620006545762000654620005e4565b816040528381526020925086838588010111156200067157600080fd5b600091505b8382101562000695578582018301518183018401529082019062000676565b83821115620006a75760008385830101525b9695505050505050565b600080600080600080600080610100898b031215620006cf57600080fd5b8851620006dc81620005cb565b60208a0151909850620006ef81620005cb565b60408a01519097506200070281620005cb565b60608a01519096506200071581620005cb565b60808a01519095506001600160401b03808211156200073357600080fd5b620007418c838d01620005fa565b955060a08b01519150808211156200075857600080fd5b50620007678b828c01620005fa565b60c08b015160e0909b0151999c989b509699959894979350505050565b6000602082840312156200079757600080fd5b815160ff81168114620007a957600080fd5b9392505050565b600060208284031215620007c357600080fd5b81518015158114620007a957600080fd5b60008219821115620007f657634e487b7160e01b600052601160045260246000fd5b500190565b6000602082840312156200080e57600080fd5b5051919050565b600181811c908216806200082a57607f821691505b602082108114156200084c57634e487b7160e01b600052602260045260246000fd5b50919050565b6117e980620008626000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c806389cd9855116100c3578063ba49f54a1161007c578063ba49f54a146102f6578063be99f119146102fe578063c3bf11cd1461030d578063c91a424f14610316578063e207afe214610329578063f3fdb15a1461033c57610158565b806389cd9855146102b55780638d02d9a1146102ca5780638f840ddd146102d357806395d89b41146102dc5780639826394b146102e4578063aa5af0fd146102ed57610158565b80635fe3b567116101155780635fe3b5671461025557806361feacff1461026d5780636333d001146102765780636752e7021461028b5780636c540baf146102995780636f307dc3146102a257610158565b806306fdde03146101cf578063173b9904146101ed57806318160ddd14610204578063313ce5671461020d57806347bd37181461022c5780635c60da1b14610235575b600061016f6000356001600160e01b03191661034f565b90506001600160a01b0381166101ab57604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156101ca573d6000f35b3d6000fd5b6101d761036f565b6040516101e491906112a9565b60405180910390f35b6101f660085481565b6040519081526020016101e4565b6101f6600f5481565b60035461021a9060ff1681565b60405160ff90911681526020016101e4565b6101f6600b5481565b61023d6103fd565b6040516001600160a01b0390911681526020016101e4565b60035461023d9061010090046001600160a01b031681565b6101f6600d5481565b61027e610453565b6040516101e491906112c3565b6101f6666379da05b6000081565b6101f660095481565b60135461023d906001600160a01b031681565b6102c86102c3366004611328565b61045d565b005b6101f660065481565b6101f6600c5481565b6101d76104b5565b6101f6600e5481565b6101f6600a5481565b6102c86104c2565b6101f667016345785d8a000081565b6101f660075481565b60005461023d906001600160a01b031681565b6102c8610337366004611361565b6106a7565b60045461023d906001600160a01b031681565b6000610369826000805160206117bd833981519152610729565b92915050565b6001805461037c906113e6565b80601f01602080910402602001604051908101604052809291908181526020018280546103a8906113e6565b80156103f55780601f106103ca576101008083540402835291602001916103f5565b820191906000526020600020905b8154815290600101906020018083116103d857829003601f168201915b505050505081565b60408051808201909152600e81526d64656c656761746554797065282960901b602090910152600061044e7f2c436e5bba88e403c36d7a2822cd2b39b360d5c6296839bbf72c5a05167fd3ff61034f565b905090565b606061044e6107cf565b6000546001600160a01b031633146104a75760405162461bcd60e51b815260206004820152600d60248201526c085d5b985d5d1a1bdc9a5e9959609a1b60448201526064016101a2565b6104b18282610841565b5050565b6002805461037c906113e6565b333014806104d357506104d3610862565b6105105760405162461bcd60e51b815260206004820152600e60248201526d10b9b2b6331037b91030b236b4b760911b60448201526064016101a2565b60408051600481526024810182526020810180516001600160e01b0316632c436e5b60e01b17905290516000918291309161054a91611421565b600060405180830381855afa9150503d8060008114610585576040519150601f19603f3d011682016040523d82523d6000602084013e61058a565b606091505b5091509150816105cf5760405162461bcd60e51b815260206004820152601060248201526f6e6f2064656c6567617465207479706560801b60448201526064016101a2565b6000818060200190518101906105e5919061143d565b60008054604051632aa1058760e21b815260ff84166004820152929350909182916001600160a01b03169063aa84161c90602401600060405180830381865afa158015610636573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261065e91908101906114a7565b91509150600061066c6103fd565b9050826001600160a01b0316816001600160a01b0316146106965761069183836109df565b61069f565b61069f81610ab7565b505050505050565b6106af610862565b6106e45760405162461bcd60e51b815260206004820152600660248201526510b0b236b4b760d11b60448201526064016101a2565b6107248383838080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506109df92505050565b505050565b8054600090815b818110156107c457846001600160e01b03191684600001828154811061075857610758611551565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156107b25783600001818154811061079357610793611551565b6000918252602090912001546001600160a01b03169250610369915050565b806107bc8161157d565b915050610730565b506000949350505050565b60606000805160206117bd83398151915260010180548060200260200160405190810160405280929190818152602001828054801561083757602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610819575b5050505050905090565b6001600160a01b038116156108595761085981610bbf565b6104b182610cef565b600080600360019054906101000a90046001600160a01b03169050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108bb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108df9190611598565b6001600160a01b0316336001600160a01b031614801561095c5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610938573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061095c91906115b5565b806109d957506000546001600160a01b0316331480156109d95750806001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156109b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d991906115b5565b91505090565b60006109e96103fd565b90506109f483610ab7565b610a6e306356e6772860e01b84604051602401610a1191906112a9565b604051602081830303815290604052906001600160e01b0319166020820180516001600160e01b0383818316178352505050506040518060400160405280600c81526020016b08589958dbdb59481a5b5c1b60a21b815250610de7565b50604080516001600160a01b038084168252851660208201527fd604de94d45953f9138079ec1b82d533cb2160c906d1076d1f7ed54befbca97a910160405180910390a1505050565b600080546040516311a0e21760e01b81526001600160a01b038481166004830152909116906311a0e21790602401600060405180830381865afa158015610b02573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b2a91908101906115fb565b90506000610b366107cf565b905060005b8151811015610b7857610b66828281518110610b5957610b59611551565b6020026020010151610bbf565b80610b708161157d565b915050610b3b565b5060005b8251811015610bb957610ba7838281518110610b9a57610b9a611551565b6020026020010151610cef565b80610bb18161157d565b915050610b7c565b50505050565b6000805160206117bd833981519152610bd782610e83565b60005b600182015460ff8216101561072457826001600160a01b0316826001018260ff1681548110610c0b57610c0b611551565b6000918252602090912001546001600160a01b03161415610cdd57600180830180549091610c389161169a565b81548110610c4857610c48611551565b6000918252602090912001546001830180546001600160a01b039092169160ff8416908110610c7957610c79611551565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600101805480610cba57610cba6116b1565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610ce7816116c7565b915050610bda565b6000805160206117bd83398151915260005b600182015460ff82161015610da757826001600160a01b0316826001018260ff1681548110610d3257610d32611551565b6000918252602090912001546001600160a01b03161415610d955760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c726561647920616464656400000000000000000060448201526064016101a2565b80610d9f816116c7565b915050610d01565b50610db182611042565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6060600080856001600160a01b031685604051610e049190611421565b6000604051808303816000865af19150503d8060008114610e41576040519150601f19603f3d011682016040523d82523d6000602084013e610e46565b606091505b509150915081610e7a57805115610e605780518082602001fd5b8360405162461bcd60e51b81526004016101a291906112a9565b95945050505050565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ec3573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610eeb91908101906116e7565b90506000805160206117bd83398151915260005b82518161ffff161015610bb9576000838261ffff1681518110610f2457610f24611551565b60200260200101519050610f388184610729565b6001600160a01b0316856001600160a01b031614610f5857610f58611784565b6000610f6482856111c9565b84549091508490610f779060019061169a565b81548110610f8757610f87611551565b90600052602060002001846000018261ffff1681548110610faa57610faa611551565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff16909102179055835484908061100b5761100b6116b1565b600082815260209020810160001990810180546001600160c01b03191690550190555081905061103a8161179a565b915050610eff565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611082573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110aa91908101906116e7565b6000805160206117bd83398151915280549192509060005b83518110156111c25760008482815181106110df576110df611551565b6020026020010151905060006110f58286610729565b90506001600160a01b0381161561113a57604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b03821660248201526044016101a2565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b03199092169390921692909217919091179055836111aa8161179a565b945050505080806111ba9061157d565b9150506110c2565b5050505050565b8054600090815b8161ffff168161ffff16101561124557846001600160e01b031916846000018261ffff168154811061120457611204611551565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156112335791506103699050565b8061123d8161179a565b9150506111d0565b5061ffff949350505050565b60005b8381101561126c578181015183820152602001611254565b83811115610bb95750506000910152565b60008151808452611295816020860160208601611251565b601f01601f19169290920160200192915050565b6020815260006112bc602083018461127d565b9392505050565b6020808252825182820181905260009190848201906040850190845b818110156113045783516001600160a01b0316835292840192918401916001016112df565b50909695505050505050565b6001600160a01b038116811461132557600080fd5b50565b6000806040838503121561133b57600080fd5b823561134681611310565b9150602083013561135681611310565b809150509250929050565b60008060006040848603121561137657600080fd5b833561138181611310565b9250602084013567ffffffffffffffff8082111561139e57600080fd5b818601915086601f8301126113b257600080fd5b8135818111156113c157600080fd5b8760208285010111156113d357600080fd5b6020830194508093505050509250925092565b600181811c908216806113fa57607f821691505b6020821081141561141b57634e487b7160e01b600052602260045260246000fd5b50919050565b60008251611433818460208701611251565b9190910192915050565b60006020828403121561144f57600080fd5b815160ff811681146112bc57600080fd5b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561149f5761149f611460565b604052919050565b600080604083850312156114ba57600080fd5b82516114c581611310565b602084015190925067ffffffffffffffff808211156114e357600080fd5b818501915085601f8301126114f757600080fd5b81518181111561150957611509611460565b61151c601f8201601f1916602001611476565b915080825286602082850101111561153357600080fd5b611544816020840160208601611251565b5080925050509250929050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561159157611591611567565b5060010190565b6000602082840312156115aa57600080fd5b81516112bc81611310565b6000602082840312156115c757600080fd5b815180151581146112bc57600080fd5b600067ffffffffffffffff8211156115f1576115f1611460565b5060051b60200190565b6000602080838503121561160e57600080fd5b825167ffffffffffffffff81111561162557600080fd5b8301601f8101851361163657600080fd5b8051611649611644826115d7565b611476565b81815260059190911b8201830190838101908783111561166857600080fd5b928401925b8284101561168f57835161168081611310565b8252928401929084019061166d565b979650505050505050565b6000828210156116ac576116ac611567565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156116de576116de611567565b60010192915050565b600060208083850312156116fa57600080fd5b825167ffffffffffffffff81111561171157600080fd5b8301601f8101851361172257600080fd5b8051611730611644826115d7565b81815260059190911b8201830190838101908783111561174f57600080fd5b928401925b8284101561168f5783516001600160e01b0319811681146117755760008081fd5b82529284019290840190611754565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156117b2576117b2611567565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "2984:11718:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13017:215;;;;;;;;;;-1:-1:-1;13017:215:0;;;;;:::i;:::-;;:::i;:::-;;5565:683;;;;;;;;;;-1:-1:-1;5565:683:0;;;;;:::i;:::-;;:::i;:::-;;;884:25:504;;;872:2;857:18;5565:683:0;;;;;;;;13827:169;;;;;;;;;;-1:-1:-1;13827:169:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;11384:190::-;;;;;;;;;;-1:-1:-1;11384:190:0;;;;;:::i;:::-;;:::i;1963:70::-;;;;;;;;;;-1:-1:-1;1963:70:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;2764:32:504;;;2746:51;;2734:2;2719:18;1963:70:0;2574:229:504;6500:294:0;;;;;;;;;;-1:-1:-1;6500:294:0;;;;;:::i;:::-;;:::i;4404:603::-;;;;;;;;;;-1:-1:-1;4404:603:0;;;;;:::i;:::-;;:::i;13574:249::-;;;;;;;;;;-1:-1:-1;13574:249:0;;;;;:::i;:::-;;:::i;7355:1495::-;;;;;;;;;;-1:-1:-1;7355:1495:0;;;;;:::i;:::-;;:::i;5381:180::-;;;;;;;;;;-1:-1:-1;5381:180:0;;;;;:::i;:::-;;:::i;1602:386:140:-;;;;;;;;;;-1:-1:-1;1602:386:140;;;;;:::i;:::-;;:::i;2703:132::-;;;;;;;;;;;;;:::i;11768:411:0:-;;;;;;;;;;-1:-1:-1;11768:411:0;;;;;:::i;:::-;;:::i;:::-;;;6513:14:504;;6506:22;6488:41;;6476:2;6461:18;11768:411:0;6348:187:504;10886:264:0;;;;;;;;;;-1:-1:-1;10886:264:0;;;;;:::i;:::-;;:::i;2713:37::-;;;;;;;;;;;;;;;;10526:271;;;;;;;;;;-1:-1:-1;10526:271:0;;;;;:::i;:::-;;:::i;2038:46::-;;;;;;;;;;-1:-1:-1;2038:46:0;;;;-1:-1:-1;;;;;2038:46:0;;;1441:85:454;;;;;;;;;;-1:-1:-1;1513:6:454;;-1:-1:-1;;;;;1513:6:454;1441:85;;9478:210:0;;;;;;;;;;-1:-1:-1;9478:210:0;;;;;:::i;:::-;;:::i;2156:29::-;;;;;;;;;;;;;;;;9785:356;;;;;;;;;;-1:-1:-1;9785:356:0;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;6969:239::-;;;;;;;;;;-1:-1:-1;6969:239:0;;;;;:::i;:::-;;:::i;8944:279::-;;;;;;;;;;-1:-1:-1;8944:279:0;;;;;:::i;:::-;;:::i;1345:56::-;;;;;;;;;;-1:-1:-1;1345:56:0;;;;;:::i;:::-;;;;;;;;;;;;;;13236:157;;;;;;;;;;-1:-1:-1;13236:157:0;;;;;:::i;:::-;;:::i;12296:462::-;;;;;;;;;;;;;:::i;14492:208::-;;;;;;;;;;-1:-1:-1;14492:208:0;;;;;:::i;:::-;;:::i;2570:33::-;;;;;;;;;;;;;;;;530:27:140;;;;;;;;;;-1:-1:-1;530:27:140;;;;-1:-1:-1;;;;;530:27:140;;;3998:240:0;;;;;;;;;;-1:-1:-1;3998:240:0;;;;;:::i;:::-;;:::i;13397:173::-;;;;;;;;;;-1:-1:-1;13397:173:0;;;;;:::i;:::-;;:::i;14000:195::-;;;;;;;;;;-1:-1:-1;14000:195:0;;;;;:::i;:::-;;:::i;2839:155:140:-;;;;;;;;;;-1:-1:-1;2839:155:140;;;;;:::i;:::-;;:::i;3665:107:0:-;;;;;;;;;;-1:-1:-1;3665:107:0;;;;;:::i;:::-;;:::i;14199:289::-;;;;;;;;;;-1:-1:-1;14199:289:0;;;;;:::i;:::-;;:::i;2158:541:140:-;;;;;;;;;;;;;:::i;1891:67:0:-;;;;;;;;;;-1:-1:-1;1891:67:0;;;;;:::i;:::-;;:::i;2322:27::-;;;;;;;;;;;;;;;;3357:304;;;;;;;;;;-1:-1:-1;3357:304:0;;;;;:::i;:::-;;:::i;13017:215::-;1334:13:454;:11;:13::i;:::-;13127:4:0::1;13119;:12;;13111:68;;;;-1:-1:-1::0;;;13111:68:0::1;;;;;;;:::i;:::-;;;;;;;;;-1:-1:-1::0;;;;;13185:35:0;;::::1;;::::0;;;:22:::1;:35;::::0;;;;:42;13017:215::o;5565:683::-;5628:7;;-1:-1:-1;;;;;5675:26:0;;;929:10:467;5675:40:0;;-1:-1:-1;;;;;;5675:40:0;;;;;;;-1:-1:-1;;;;;2764:32:504;;;5675:40:0;;;2746:51:504;2719:18;;5675:40:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;5643:72:0;-1:-1:-1;;;5725:18:0;5721:43;;-1:-1:-1;;5752:12:0;;;5565:683;-1:-1:-1;5565:683:0:o;5721:43::-;5770:28;5826:7;-1:-1:-1;;;;;5826:19:0;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5770:79;;5855:22;5880:11;-1:-1:-1;;;;;5880:18:0;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5855:45;;5906:26;5935:6;-1:-1:-1;;;;;5935:12:0;;5964:7;-1:-1:-1;;;;;5948:36:0;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5935:52;;-1:-1:-1;;;;;;5935:52:0;;;;;;;-1:-1:-1;;;;;2764:32:504;;;5935:52:0;;;2746:51:504;2719:18;;5935:52:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5906:81;;5993:26;6022:7;-1:-1:-1;;;;;6022:16:0;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5993:47;;;-1:-1:-1;6046:24:0;6112:22;5993:47;6112:2;:22;:::i;:::-;6074:34;6095:13;6074:18;:34;:::i;:::-;6073:61;;;;:::i;:::-;6046:88;;6163:12;;6144:16;:31;6140:60;;;-1:-1:-1;6192:1:0;;5565:683;-1:-1:-1;;;;;;;5565:683:0:o;6140:60::-;6227:16;6212:12;;:31;;;;:::i;:::-;6205:38;5565:683;-1:-1:-1;;;;;;;;5565:683:0:o;13827:169::-;-1:-1:-1;;;;;13951:40:0;;;;;;:24;:40;;;;;;;;;13944:47;;;;;;;;;;;;;;;;;13911:25;;13944:47;;;13951:40;13944:47;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13944:47:0;;;;;;;;;;;;;;;;;;;;;;;13827:169;;;:::o;11384:190::-;1334:13:454;:11;:13::i;:::-;-1:-1:-1;;;;;11503:46:0;;::::1;;::::0;;;:27:::1;:46;::::0;;;;:66;;-1:-1:-1;;;;;;11503:66:0::1;::::0;;;::::1;;::::0;;11384:190::o;1963:70::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1963:70:0;;-1:-1:-1;1963:70:0;;-1:-1:-1;1963:70:0:o;6500:294::-;1334:13:454;:11;:13::i;:::-;6603:18:0;;;;;:51:::1;;-1:-1:-1::0;6625:29:0;;::::1;6603:51;6595:111;;;::::0;-1:-1:-1;;;6595:111:0;;15827:2:504;6595:111:0::1;::::0;::::1;15809:21:504::0;15866:2;15846:18;;;15839:30;15905:34;15885:18;;;15878:62;-1:-1:-1;;;15956:18:504;;;15949:45;16011:19;;6595:111:0::1;15625:411:504::0;6595:111:0::1;6717:9;6712:77;6732:18:::0;;::::1;6712:77;;;6757:32;6781:4;;6786:1;6781:7;;;;;;;:::i;:::-;;;;;;;;;;;;:::i;:::-;6757:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;6757:7:0;;-1:-1:-1;6757:7:0;;-1:-1:-1;6765:1:0;;-1:-1:-1;6757:10:0;;::::1;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;6757:23:0::1;::::0;::::1;:32::i;:::-;-1:-1:-1::0;6752:3:0;::::1;::::0;::::1;:::i;:::-;;;;6712:77;;;;6500:294:::0;;;;:::o;4404:603::-;-1:-1:-1;;;;;4471:27:0;;4467:536;;4526:21;4563:11;4555:57;;;;-1:-1:-1;;;4555:57:0;;17041:2:504;4555:57:0;;;17023:21:504;17080:2;17060:18;;;17053:30;17119:34;17099:18;;;17092:62;-1:-1:-1;;;17170:18:504;;;17163:31;17211:19;;4555:57:0;16839:397:504;4555:57:0;4621:12;4639:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;4639:7:0;-1:-1:-1;;;;;4639:12:0;4660:7;4639:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4620:53;;;4689:7;4681:65;;;;-1:-1:-1;;;4681:65:0;;17653:2:504;4681:65:0;;;17635:21:504;17692:2;17672:18;;;17665:30;17731:34;17711:18;;;17704:62;-1:-1:-1;;;17782:18:504;;;17775:43;17835:19;;4681:65:0;17451:409:504;4681:65:0;4500:253;;4404:603;:::o;4467:536::-;4851:30;;-1:-1:-1;;;4851:30:0;;4875:4;4851:30;;;2746:51:504;4811:13:0;;4767:23;;-1:-1:-1;;;;;4851:15:0;;;;;2719:18:504;;4851:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4833:48;;4907:1;4897:7;:11;4889:63;;;;-1:-1:-1;;;4889:63:0;;18067:2:504;4889:63:0;;;18049:21:504;18106:2;18086:18;;;18079:30;18145:34;18125:18;;;18118:62;-1:-1:-1;;;18196:18:504;;;18189:37;18243:19;;4889:63:0;17865:403:504;4889:63:0;4960:36;4979:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;4979:7:0;-1:-1:-1;;;;;4960:18:0;;;4988:7;4960:18;:36::i;4467:536::-;4404:603;:::o;13574:249::-;1334:13:454;:11;:13::i;:::-;13746:72:0::1;::::0;-1:-1:-1;;;13746:72:0;;-1:-1:-1;;;;;18555:15:504;;;13746:72:0::1;::::0;::::1;18537:34:504::0;18607:15;;;18587:18;;;18580:43;13746:36:0;::::1;::::0;::::1;::::0;18472:18:504;;13746:72:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;13574:249:::0;;;:::o;7355:1495::-;7494:7;;;7607:21;7625:2;7494:7;7607:15;;:21;:::i;:::-;7596:53;;;;;;;:::i;:::-;7552:97;;-1:-1:-1;7552:97:0;-1:-1:-1;;;;;;7663:25:0;;7678:10;7663:25;7655:64;;;;-1:-1:-1;;;7655:64:0;;19581:2:504;7655:64:0;;;19563:21:504;19620:2;19600:18;;;19593:30;19659:28;19639:18;;;19632:56;19705:18;;7655:64:0;19379:350:504;7655:64:0;7813:12;7855:10;7867;7881:14;;7879:16;;;;;:::i;:::-;;;;;-1:-1:-1;7838:58:0;;-1:-1:-1;;19989:2:504;19985:15;;;19981:24;;7838:58:0;;;19969:37:504;20040:15;;;;20036:24;;;20022:12;;;20015:46;20077:12;;;20070:28;20114:12;;7838:58:0;;;;;;;;;;;;7828:69;;;;;;7813:84;;7904:40;7964:34;;;;;;;;:::i;:::-;-1:-1:-1;;7964:34:0;;;;;;;;;;;;;;;;7947:69;;7964:34;8000:15;;;;7964:34;7947:69;;:::i;:::-;;;;;;;;;;;;;7904:112;;8022:13;8038:63;8064:1;8067:4;8073:27;8038:25;:63::i;:::-;8143:35;;;8108:32;8143:35;;;:21;:35;;;;;;;;8108:70;;;;;;;;;;-1:-1:-1;;;;;8108:70:0;;;;;;;;8022:79;;-1:-1:-1;8108:32:0;;:70;;8143:35;;8108:70;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8108:70:0;;;;-1:-1:-1;;8240:19:0;;8302:88;;-1:-1:-1;;;8302:88:0;;-1:-1:-1;;;;;18555:15:504;;;8302:88:0;;;18537:34:504;8184:36:0;18587:18:504;;;18580:43;8240:19:0;;-1:-1:-1;8240:19:0;;8302:37;;;-1:-1:-1;8302:37:0;;18472:18:504;;8302:88:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;8484:54:0;;8445:36;8484:54;;;:24;:54;;;;;;;;8445:93;;;;;;;;;;;;;;;;;;;8484:54;;8445:93;;;8484:54;8445:93;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;8445:93:0;;;;;;;;;;;;;;;;;;;;;;;8549:9;8544:203;8568:10;:17;8564:1;:21;8544:203;;;8621:19;-1:-1:-1;;;;;8604:36:0;:10;8615:1;8604:13;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8604:36:0;;8600:50;;;8642:8;;8600:50;8670:5;-1:-1:-1;;;;;8658:37:0;;8696:10;8707:1;8696:13;;;;;;;;:::i;:::-;;;;;;;;;;;8658:82;;-1:-1:-1;;;;;;8658:82:0;;;;;;;-1:-1:-1;;;;;18555:15:504;;;8658:82:0;;;18537:34:504;8736:1:0;18587:18:504;;;18580:43;18472:18;;8658:82:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8544:203;8587:3;;;;:::i;:::-;;;;8544:203;;;-1:-1:-1;8752:74:0;;-1:-1:-1;;;8752:74:0;;-1:-1:-1;;;;;8752:58:0;;;;;:74;;8811:14;;;;8752:74;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8840:5:0;;-1:-1:-1;;;;;;;;;;;7355:1495:0;;;;;;;:::o;5381:180::-;1334:13:454;:11;:13::i;:::-;5482:12:0::1;:28:::0;;;;5516:18:::1;:40:::0;5381:180::o;1602:386:140:-;1334:13:454;:11;:13::i;:::-;1758:12:140::1;::::0;;-1:-1:-1;;;;;1830:30:140;;::::1;-1:-1:-1::0;;;;;;1830:30:140;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;18537:34:504::0;;;18602:2;18587:18;;18580:43;;;;1934:49:140::1;::::0;18472:18:504;1934:49:140::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:454;:11;:13::i;:::-;2804:26:140::1;::::0;-1:-1:-1;;;2804:26:140;;21888:2:504;2804:26:140::1;::::0;::::1;21870:21:504::0;21927:2;21907:18;;;21900:30;-1:-1:-1;;;21946:18:504;;;21939:46;22002:18;;2804:26:140::1;21686:340:504::0;11768:411:0;11862:4;1334:13:454;:11;:13::i;:::-;11874:27:0::1;11925:10;11874:62;;11943:24;11978:6;-1:-1:-1::0;;;;;11978:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12021:45:0;;::::1;;::::0;;;:27:::1;:45;::::0;;;;;;;12000:67;;-1:-1:-1;;;12000:67:0;;12021:45;;::::1;12000:67;::::0;::::1;2746:51:504::0;12021:45:0;;-1:-1:-1;12000:20:0;::::1;::::0;::::1;::::0;2719:18:504;;12000:67:0::1;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;12073:24;12108:6;-1:-1:-1::0;;;;;12108:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12073:51;;12158:16;-1:-1:-1::0;;;;;12138:36:0::1;:16;-1:-1:-1::0;;;;;12138:36:0::1;;;12131:43;;;;;1357:1:454;11768:411:0::0;;;:::o;10886:264::-;-1:-1:-1;;;;;11000:46:0;;;10972:7;11000:46;;;:27;:46;;;;;;10972:7;;11000:46;:145;;11128:17;11000:145;;;-1:-1:-1;;;;;11071:46:0;;;;;;;:27;:46;;;;;;;11000:145;10987:158;10886:264;-1:-1:-1;;10886:264:0:o;10526:271::-;1334:13:454;:11;:13::i;:::-;10727:65:0::1;;;;;;;;10748:17;-1:-1:-1::0;;;;;10727:65:0::1;;;;;10767:24;;10727:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;-1:-1:-1;10727:65:0;;;;-1:-1:-1;;10689:35:0::1;::::0;::::1;::::0;;:21:::1;:35;::::0;;;;;;;:103;;;;-1:-1:-1;;;;;;10689:103:0::1;-1:-1:-1::0;;;;;10689:103:0;;::::1;;::::0;;;;::::1;::::0;;;:35;;-1:-1:-1;10689:103:0::1;::::0;-1:-1:-1;10689:103:0;::::1;::::0;;::::1;::::0;::::1;:::i;9478:210::-:0;1334:13:454;:11;:13::i;:::-;-1:-1:-1;;;;;9612:51:0;;::::1;;::::0;;;:32:::1;:51;::::0;;;;:71;;-1:-1:-1;;;;;;9612:71:0::1;::::0;;;::::1;;::::0;;9478:210::o;9785:356::-;9922:35;;;9858:7;9922:35;;;:21;:35;;;;;;;;9887:70;;;;;;;;;;-1:-1:-1;;;;;9887:70:0;;;;;;;;9867:12;;9858:7;;9887:70;9922:35;9887:70;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;9887:70:0;;;;-1:-1:-1;;10005:19:0;;9887:70;;-1:-1:-1;9963:23:0;;-1:-1:-1;;;;;10005:33:0;;;;-1:-1:-1;10005:131:0;;10121:1;10125:10;10005:131;;;10050:19;;10071:29;;;;10005:131;9992:144;;;;;;9785:356;;;:::o;6969:239::-;1334:13:454;:11;:13::i;:::-;7070:18:0;7062:61:::1;;;::::0;-1:-1:-1;;;7062:61:0;;22507:2:504;7062:61:0::1;::::0;::::1;22489:21:504::0;22546:2;22526:18;;;22519:30;22585:32;22565:18;;;22558:60;22635:18;;7062:61:0::1;22305:354:504::0;7062:61:0::1;7134:9;7129:74;7149:18:::0;;::::1;7129:74;;;7174:29;7198:4;;7174:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;::::0;;;;-1:-1:-1;7174:7:0;;-1:-1:-1;7174:7:0;;-1:-1:-1;7182:1:0;;-1:-1:-1;7174:10:0;;::::1;;;;;:::i;:29::-;-1:-1:-1::0;7169:3:0;::::1;::::0;::::1;:::i;:::-;;;;7129:74;;8944:279:::0;-1:-1:-1;;;;;9063:51:0;;;9035:7;9063:51;;;:32;:51;;;;;;9035:7;;9063:51;:155;;9201:17;9063:155;;;-1:-1:-1;;;;;;9139:51:0;;;;;;;:32;:51;;;;;;;;8944:279::o;13236:157::-;-1:-1:-1;;;;;13354:34:0;;;;;;:21;:34;;;;;;;;;13347:41;;;;;;;;;;;;;;;;;13314:25;;13347:41;;;13354:34;13347:41;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13347:41:0;;;;;;;;;;;;;;;;;;;;;;13236:157;;;:::o;12296:462::-;12419:40;;;;;;;;;;;;;;;;-1:-1:-1;;;;;12419:40:0;-1:-1:-1;;;12419:40:0;;;12397:63;;12346:7;;;;;;12397:10;;:63;;12419:40;12397:63;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12361:99;;;;12471:7;:28;;;;;12482:4;:11;12497:2;12482:17;12471:28;12467:251;;;12509:19;12542:4;12531:27;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12586:35:0;;12566:17;12586:35;;;:22;:35;;;;;;12509:49;;-1:-1:-1;12633:14:0;;12629:46;;;12664:10;12296:462;-1:-1:-1;;;;12296:462:0:o;12629:46::-;12700:1;12687:10;:14;12683:28;;;12710:1;12703:8;;;;;;12296:462;:::o;12683:28::-;12501:217;;12467:251;12731:22;;12724:29;;;;12296:462;:::o;14492:208::-;14635:19;;:60;;-1:-1:-1;;;14635:60:0;;-1:-1:-1;;;;;23492:15:504;;;14635:60:0;;;23474:34:504;23544:15;;;23524:18;;;23517:43;23596:15;;;23576:18;;;23569:43;-1:-1:-1;;;;;;23648:33:504;;23628:18;;;23621:61;14616:4:0;;14635:19;;:27;;23408:19:504;;14635:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14628:67;;14492:208;;;;;;;:::o;3998:240::-;1334:13:454;:11;:13::i;:::-;4127:4:0::1;4100:23;:31;;4092:87;;;;-1:-1:-1::0;;;4092:87:0::1;;;;;;;:::i;:::-;4185:22;:48:::0;3998:240::o;13397:173::-;1334:13:454;:11;:13::i;:::-;-1:-1:-1;;;;;13518:34:0;::::1;;::::0;;;:21:::1;:34;::::0;;;;:47:::1;::::0;13555:10;;13518:47:::1;:::i;:::-;;13397:173:::0;;;:::o;14000:195::-;1334:13:454;:11;:13::i;:::-;-1:-1:-1;;;;;14137:40:0;::::1;;::::0;;;:24:::1;:40;::::0;;;;:53:::1;::::0;14180:10;;14137:53:::1;:::i;2839:155:140:-:0;1334:13:454;:11;:13::i;:::-;2937:12:140::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:140;;::::1;18537:34:504::0;;18607:15;;;18602:2;18587:18;;18580:43;2921:39:140::1;::::0;18472:18:504;2921:39:140::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:140::1;-1:-1:-1::0;;;;;2966:23:140;;;::::1;::::0;;;::::1;::::0;;2839:155::o;3665:107:0:-;1513:6:454;;-1:-1:-1;;;;;1513:6:454;929:10:467;791:23:140;;820:183;;842:13;858:16;3090:66;3262:15;-1:-1:-1;;;;;3262:15:140;;2998:284;858:16;842:32;-1:-1:-1;;;;;;897:21:140;;929:10:467;897:21:140;;926:70;;;;-1:-1:-1;;;926:70:140;;24177:2:504;926:70:140;;;24159:21:504;24216:2;24196:18;;;24189:30;24255:34;24235:18;;;24228:62;-1:-1:-1;;;24306:18:504;;;24299:48;24364:19;;926:70:140;23975:414:504;926:70:140;834:169;;820:183;-1:-1:-1;3742:19:0::1;:25:::0;;-1:-1:-1;;;;;;3742:25:0::1;-1:-1:-1::0;;;;;3742:25:0;;;::::1;::::0;;;::::1;::::0;;3665:107::o;14199:289::-;1334:13:454;:11;:13::i;:::-;14272:24:0::1;14299:4;-1:-1:-1::0;;;;;14299:18:0::1;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;14299:20:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;14272:47;;14355:4;-1:-1:-1::0;;;;;14355:13:0::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14382:7;14377:107;14399:7;:14;14395:1;:18;;;14377:107;;;14456:7;14464:1;14456:10;;;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;14456:19:0::1;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;14415:3;;;;;:::i;:::-;;;;14377:107;;2158:541:140::0;2285:12;;-1:-1:-1;;;;;2285:12:140;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:140;;26220:2:504;2263:60:140;;;26202:21:504;26259:2;26239:18;;;26232:30;-1:-1:-1;;;26278:18:504;;;26271:51;26339:18;;2263:60:140;26018:345:504;2263:60:140;2378:16;2397:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2397:7:140;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:140;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:140;;;2605:32;;;-1:-1:-1;;;;;18555:15:504;;18537:34;;-1:-1:-1;18602:2:504;18587:18;;18580:43;2605:32:140;;18472:18:504;2605:32:140;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;18555:15:504;;;18537:34;;2681:12:140;;;18602:2:504;18587:18;;18580:43;2648:46:140;;18472:18:504;2648:46:140;18273:356:504;1891:67:0;;;;;;;;;;;;;;;;;;;;3357:304;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;26570:2:504;3314:201:457;;;26552:21:504;26609:2;26589:18;;;26582:30;26648:34;26628:18;;;26621:62;-1:-1:-1;;;26699:18:504;;;26692:44;26753:19;;3314:201:457;26368:410:504;3314:201:457;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;3470:4:0::1;3443:23;:31;;3435:87;;;;-1:-1:-1::0;;;3435:87:0::1;;;;;;;:::i;:::-;3528:30;3547:10;3528:18;:30::i;:::-;3564:22;:48:::0;;;-1:-1:-1;;3618:18:0::1;:38:::0;3636:99:457;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;26935:36:504;;3710:14:457;;26923:2:504;26908:18;3710:14:457;26783:194:504;3636:99:457;3258:483;3357:304:0;:::o;1599:130:454:-;1513:6;;-1:-1:-1;;;;;1513:6:454;929:10:467;1662:23:454;1654:68;;;;-1:-1:-1;;;1654:68:454;;27184:2:504;1654:68:454;;;27166:21:504;;;27203:18;;;27196:30;27262:34;27242:18;;;27235:62;27314:18;;1654:68:454;26982:356:504;1654:68:454;1599:130::o;3476:185:466:-;3551:12;3582:72;3604:6;3612:4;3618:1;3582:72;;;;;;;;;;;;;;;;;:21;:72::i;:::-;3575:79;3476:185;-1:-1:-1;;;3476:185:466:o;818:216:465:-;968:58;;;-1:-1:-1;;;;;27535:32:504;;968:58:465;;;27517:51:504;27584:18;;;;27577:34;;;968:58:465;;;;;;;;;;27490:18:504;;;;968:58:465;;;;;;;;-1:-1:-1;;;;;968:58:465;-1:-1:-1;;;968:58:465;;;941:86;;961:5;;941:19;:86::i;1092:514:468:-;1209:12;1266:6;1241:21;:31;;1233:73;;;;-1:-1:-1;;;1233:73:468;;27824:2:504;1233:73:468;;;27806:21:504;27863:2;27843:18;;;27836:30;27902:31;27882:18;;;27875:59;27951:18;;1233:73:468;27622:353:504;1233:73:468;1324:15;;1316:65;;;;-1:-1:-1;;;1316:65:468;;28182:2:504;1316:65:468;;;28164:21:504;;;28201:18;;;28194:30;28260:34;28240:18;;;28233:62;28312:18;;1316:65:468;27980:356:504;1316:65:468;1519:4;1508:8;1502:15;1495:4;1485:8;1481:19;1473:6;1465:59;1457:67;-1:-1:-1;;;;;;1551:18:468;;1543:56;;;;-1:-1:-1;;;1543:56:468;;28543:2:504;1543:56:468;;;28525:21:504;28582:2;28562:18;;;28555:30;28621:27;28601:18;;;28594:55;28666:18;;1543:56:468;28341:349:504;2673:187:454;2765:6;;;-1:-1:-1;;;;;2781:17:454;;;-1:-1:-1;;;;;;2781:17:454;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;562:129:140:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;638:16:140::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;4970:446:466:-:0;5135:12;5192:5;5167:21;:30;;5159:81;;;;-1:-1:-1;;;5159:81:466;;29309:2:504;5159:81:466;;;29291:21:504;29348:2;29328:18;;;29321:30;29387:34;29367:18;;;29360:62;-1:-1:-1;;;29438:18:504;;;29431:36;29484:19;;5159:81:466;29107:402:504;5159:81:466;5251:12;5265:23;5292:6;-1:-1:-1;;;;;5292:11:466;5311:5;5318:4;5292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:73;;;;5340:69;5367:6;5375:7;5384:10;5396:12;5340:26;:69::i;:::-;5333:76;4970:446;-1:-1:-1;;;;;;;4970:446:466:o;3868:717:465:-;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:465;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:465;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:465;;29716:2:504;4483:85:465;;;29698:21:504;29755:2;29735:18;;;29728:30;29794:34;29774:18;;;29767:62;-1:-1:-1;;;29845:18:504;;;29838:40;29895:19;;4483:85:465;29514:406:504;1003:95:454;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1065:26:454::1;:24;:26::i;6588:628:466:-:0;6768:12;6796:7;6792:418;;;6823:17;;6819:286;;-1:-1:-1;;;;;1476:19:466;;;7030:60;;;;-1:-1:-1;;;7030:60:466;;30127:2:504;7030:60:466;;;30109:21:504;30166:2;30146:18;;;30139:30;30205:31;30185:18;;;30178:59;30254:18;;7030:60:466;29925:353:504;7030:60:466;-1:-1:-1;7125:10:466;7118:17;;6792:418;7166:33;7174:10;7186:12;7166:7;:33::i;3883:223::-;4016:12;4047:52;4069:6;4077:4;4083:1;4086:12;4047:21;:52::i;1104:111:454:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1176:32:454::1;929:10:467::0;1176:18:454::1;:32::i;7738:540:466:-:0;7897:17;;:21;7893:379;;8125:10;8119:17;8181:15;8168:10;8164:2;8160:19;8153:44;7893:379;8248:12;8241:20;;-1:-1:-1;;;8241:20:466;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:504;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;150:314;217:6;225;278:2;266:9;257:7;253:23;249:32;246:52;;;294:1;291;284:12;246:52;333:9;320:23;352:31;377:5;352:31;:::i;:::-;402:5;454:2;439:18;;;;426:32;;-1:-1:-1;;;150:314:504:o;469:264::-;545:6;598:2;586:9;577:7;573:23;569:32;566:52;;;614:1;611;604:12;566:52;653:9;640:23;672:31;697:5;672:31;:::i;1172:684::-;1369:2;1421:21;;;1491:13;;1394:18;;;1513:22;;;1340:4;;1369:2;1592:15;;;;1566:2;1551:18;;;1340:4;1635:195;1649:6;1646:1;1643:13;1635:195;;;1714:13;;-1:-1:-1;;;;;1710:39:504;1698:52;;1805:15;;;;1770:12;;;;1746:1;1664:9;1635:195;;;-1:-1:-1;1847:3:504;;1172:684;-1:-1:-1;;;;;;1172:684:504:o;1861:388::-;1929:6;1937;1990:2;1978:9;1969:7;1965:23;1961:32;1958:52;;;2006:1;2003;1996:12;1958:52;2045:9;2032:23;2064:31;2089:5;2064:31;:::i;:::-;2114:5;-1:-1:-1;2171:2:504;2156:18;;2143:32;2184:33;2143:32;2184:33;:::i;:::-;2236:7;2226:17;;;1861:388;;;;;:::o;2808:367::-;2871:8;2881:6;2935:3;2928:4;2920:6;2916:17;2912:27;2902:55;;2953:1;2950;2943:12;2902:55;-1:-1:-1;2976:20:504;;3019:18;3008:30;;3005:50;;;3051:1;3048;3041:12;3005:50;3088:4;3080:6;3076:17;3064:29;;3148:3;3141:4;3131:6;3128:1;3124:14;3116:6;3112:27;3108:38;3105:47;3102:67;;;3165:1;3162;3155:12;3102:67;2808:367;;;;;:::o;3180:784::-;3313:6;3321;3329;3337;3390:2;3378:9;3369:7;3365:23;3361:32;3358:52;;;3406:1;3403;3396:12;3358:52;3446:9;3433:23;3475:18;3516:2;3508:6;3505:14;3502:34;;;3532:1;3529;3522:12;3502:34;3571:70;3633:7;3624:6;3613:9;3609:22;3571:70;:::i;:::-;3660:8;;-1:-1:-1;3545:96:504;-1:-1:-1;3748:2:504;3733:18;;3720:32;;-1:-1:-1;3764:16:504;;;3761:36;;;3793:1;3790;3783:12;3761:36;;3832:72;3896:7;3885:8;3874:9;3870:24;3832:72;:::i;:::-;3180:784;;;;-1:-1:-1;3923:8:504;-1:-1:-1;;;;3180:784:504:o;3969:589::-;4106:6;4114;4122;4175:2;4163:9;4154:7;4150:23;4146:32;4143:52;;;4191:1;4188;4181:12;4143:52;4230:9;4217:23;4249:31;4274:5;4249:31;:::i;:::-;4299:5;-1:-1:-1;4356:2:504;4341:18;;4328:32;4369:33;4328:32;4369:33;:::i;:::-;4421:7;-1:-1:-1;4480:2:504;4465:18;;4452:32;4493:33;4452:32;4493:33;:::i;:::-;4545:7;4535:17;;;3969:589;;;;;:::o;4563:114::-;4647:4;4640:5;4636:16;4629:5;4626:27;4616:55;;4667:1;4664;4657:12;4682:347;4733:8;4743:6;4797:3;4790:4;4782:6;4778:17;4774:27;4764:55;;4815:1;4812;4805:12;4764:55;-1:-1:-1;4838:20:504;;4881:18;4870:30;;4867:50;;;4913:1;4910;4903:12;4867:50;4950:4;4942:6;4938:17;4926:29;;5002:3;4995:4;4986:6;4978;4974:19;4970:30;4967:39;4964:59;;;5019:1;5016;5009:12;5034:848;5131:6;5139;5147;5155;5163;5216:2;5204:9;5195:7;5191:23;5187:32;5184:52;;;5232:1;5229;5222:12;5184:52;5271:9;5258:23;5290:29;5313:5;5290:29;:::i;:::-;5338:5;-1:-1:-1;5394:2:504;5379:18;;5366:32;5417:18;5447:14;;;5444:34;;;5474:1;5471;5464:12;5444:34;5513:58;5563:7;5554:6;5543:9;5539:22;5513:58;:::i;:::-;5590:8;;-1:-1:-1;5487:84:504;-1:-1:-1;5678:2:504;5663:18;;5650:32;;-1:-1:-1;5694:16:504;;;5691:36;;;5723:1;5720;5713:12;5691:36;;5762:60;5814:7;5803:8;5792:9;5788:24;5762:60;:::i;:::-;5034:848;;;;-1:-1:-1;5034:848:504;;-1:-1:-1;5841:8:504;;5736:86;5034:848;-1:-1:-1;;;5034:848:504:o;6095:248::-;6163:6;6171;6224:2;6212:9;6203:7;6199:23;6195:32;6192:52;;;6240:1;6237;6230:12;6192:52;-1:-1:-1;;6263:23:504;;;6333:2;6318:18;;;6305:32;;-1:-1:-1;6095:248:504:o;6540:681::-;6626:6;6634;6642;6650;6703:2;6691:9;6682:7;6678:23;6674:32;6671:52;;;6719:1;6716;6709:12;6671:52;6758:9;6745:23;6777:29;6800:5;6777:29;:::i;:::-;6825:5;-1:-1:-1;6882:2:504;6867:18;;6854:32;6895:33;6854:32;6895:33;:::i;:::-;6947:7;-1:-1:-1;7005:2:504;6990:18;;6977:32;7032:18;7021:30;;7018:50;;;7064:1;7061;7054:12;7018:50;7103:58;7153:7;7144:6;7133:9;7129:22;7103:58;:::i;7463:243::-;7520:6;7573:2;7561:9;7552:7;7548:23;7544:32;7541:52;;;7589:1;7586;7579:12;7541:52;7628:9;7615:23;7647:29;7670:5;7647:29;:::i;7711:258::-;7783:1;7793:113;7807:6;7804:1;7801:13;7793:113;;;7883:11;;;7877:18;7864:11;;;7857:39;7829:2;7822:10;7793:113;;;7924:6;7921:1;7918:13;7915:48;;;-1:-1:-1;;7959:1:504;7941:16;;7934:27;7711:258::o;7974:257::-;8015:3;8053:5;8047:12;8080:6;8075:3;8068:19;8096:63;8152:6;8145:4;8140:3;8136:14;8129:4;8122:5;8118:16;8096:63;:::i;:::-;8213:2;8192:15;-1:-1:-1;;8188:29:504;8179:39;;;;8220:4;8175:50;;7974:257;-1:-1:-1;;7974:257:504:o;8236:314::-;-1:-1:-1;;;;;8411:32:504;;8393:51;;8480:2;8475;8460:18;;8453:30;;;-1:-1:-1;;8500:44:504;;8525:18;;8517:6;8500:44;:::i;8555:745::-;8661:6;8669;8677;8685;8738:2;8726:9;8717:7;8713:23;8709:32;8706:52;;;8754:1;8751;8744:12;8706:52;8794:9;8781:23;8823:18;8864:2;8856:6;8853:14;8850:34;;;8880:1;8877;8870:12;8850:34;8919:70;8981:7;8972:6;8961:9;8957:22;8919:70;:::i;:::-;9008:8;;-1:-1:-1;8893:96:504;-1:-1:-1;9096:2:504;9081:18;;9068:32;;-1:-1:-1;9112:16:504;;;9109:36;;;9141:1;9138;9131:12;9109:36;;9180:60;9232:7;9221:8;9210:9;9206:24;9180:60;:::i;9485:712::-;9570:6;9578;9586;9594;9647:3;9635:9;9626:7;9622:23;9618:33;9615:53;;;9664:1;9661;9654:12;9615:53;9703:9;9690:23;9722:31;9747:5;9722:31;:::i;:::-;9772:5;-1:-1:-1;9829:2:504;9814:18;;9801:32;9842:33;9801:32;9842:33;:::i;:::-;9894:7;-1:-1:-1;9953:2:504;9938:18;;9925:32;9966:33;9925:32;9966:33;:::i;:::-;10018:7;-1:-1:-1;10077:2:504;10062:18;;10049:32;-1:-1:-1;;;;;;10112:34:504;;10100:47;;10090:75;;10161:1;10158;10151:12;10090:75;9485:712;;;;-1:-1:-1;9485:712:504;;-1:-1:-1;;9485:712:504:o;10202:180::-;10261:6;10314:2;10302:9;10293:7;10289:23;10285:32;10282:52;;;10330:1;10327;10320:12;10282:52;-1:-1:-1;10353:23:504;;10202:180;-1:-1:-1;10202:180:504:o;10387:598::-;10508:6;10516;10524;10577:2;10565:9;10556:7;10552:23;10548:32;10545:52;;;10593:1;10590;10583:12;10545:52;10632:9;10619:23;10651:31;10676:5;10651:31;:::i;:::-;10701:5;-1:-1:-1;10757:2:504;10742:18;;10729:32;10784:18;10773:30;;10770:50;;;10816:1;10813;10806:12;10770:50;10855:70;10917:7;10908:6;10897:9;10893:22;10855:70;:::i;:::-;10387:598;;10944:8;;-1:-1:-1;10829:96:504;;-1:-1:-1;;;;10387:598:504:o;11549:407::-;11751:2;11733:21;;;11790:2;11770:18;;;11763:30;11829:34;11824:2;11809:18;;11802:62;-1:-1:-1;;;11895:2:504;11880:18;;11873:41;11946:3;11931:19;;11549:407::o;11961:368::-;12058:6;12066;12074;12082;12135:3;12123:9;12114:7;12110:23;12106:33;12103:53;;;12152:1;12149;12142:12;12103:53;-1:-1:-1;;12175:16:504;;12231:2;12216:18;;12210:25;12275:2;12260:18;;12254:25;12319:2;12304:18;;;12298:25;12175:16;;12210:25;;-1:-1:-1;12298:25:504;;-1:-1:-1;11961:368:504;-1:-1:-1;11961:368:504:o;12334:277::-;12430:6;12483:2;12471:9;12462:7;12458:23;12454:32;12451:52;;;12499:1;12496;12489:12;12451:52;12531:9;12525:16;12550:31;12575:5;12550:31;:::i;13153:184::-;13223:6;13276:2;13264:9;13255:7;13251:23;13247:32;13244:52;;;13292:1;13289;13282:12;13244:52;-1:-1:-1;13315:16:504;;13153:184;-1:-1:-1;13153:184:504:o;13342:247::-;13410:6;13463:2;13451:9;13442:7;13438:23;13434:32;13431:52;;;13479:1;13476;13469:12;13431:52;13511:9;13505:16;13530:29;13553:5;13530:29;:::i;13594:127::-;13655:10;13650:3;13646:20;13643:1;13636:31;13686:4;13683:1;13676:15;13710:4;13707:1;13700:15;13726:422;13815:1;13858:5;13815:1;13872:270;13893:7;13883:8;13880:21;13872:270;;;13952:4;13948:1;13944:6;13940:17;13934:4;13931:27;13928:53;;;13961:18;;:::i;:::-;14011:7;14001:8;13997:22;13994:55;;;14031:16;;;;13994:55;14110:22;;;;14070:15;;;;13872:270;;;13876:3;13726:422;;;;;:::o;14153:806::-;14202:5;14232:8;14222:80;;-1:-1:-1;14273:1:504;14287:5;;14222:80;14321:4;14311:76;;-1:-1:-1;14358:1:504;14372:5;;14311:76;14403:4;14421:1;14416:59;;;;14489:1;14484:130;;;;14396:218;;14416:59;14446:1;14437:10;;14460:5;;;14484:130;14521:3;14511:8;14508:17;14505:43;;;14528:18;;:::i;:::-;-1:-1:-1;;14584:1:504;14570:16;;14599:5;;14396:218;;14698:2;14688:8;14685:16;14679:3;14673:4;14670:13;14666:36;14660:2;14650:8;14647:16;14642:2;14636:4;14633:12;14629:35;14626:77;14623:159;;;-1:-1:-1;14735:19:504;;;14767:5;;14623:159;14814:34;14839:8;14833:4;14814:34;:::i;:::-;14884:6;14880:1;14876:6;14872:19;14863:7;14860:32;14857:58;;;14895:18;;:::i;:::-;14933:20;;14153:806;-1:-1:-1;;;14153:806:504:o;14964:131::-;15024:5;15053:36;15080:8;15074:4;15053:36;:::i;15100:168::-;15140:7;15206:1;15202;15198:6;15194:14;15191:1;15188:21;15183:1;15176:9;15169:17;15165:45;15162:71;;;15213:18;;:::i;:::-;-1:-1:-1;15253:9:504;;15100:168::o;15273:217::-;15313:1;15339;15329:132;;15383:10;15378:3;15374:20;15371:1;15364:31;15418:4;15415:1;15408:15;15446:4;15443:1;15436:15;15329:132;-1:-1:-1;15475:9:504;;15273:217::o;15495:125::-;15535:4;15563:1;15560;15557:8;15554:34;;;15568:18;;:::i;:::-;-1:-1:-1;15605:9:504;;15495:125::o;16041:127::-;16102:10;16097:3;16093:20;16090:1;16083:31;16133:4;16130:1;16123:15;16157:4;16154:1;16147:15;16173:521;16250:4;16256:6;16316:11;16303:25;16410:2;16406:7;16395:8;16379:14;16375:29;16371:43;16351:18;16347:68;16337:96;;16429:1;16426;16419:12;16337:96;16456:33;;16508:20;;;-1:-1:-1;16551:18:504;16540:30;;16537:50;;;16583:1;16580;16573:12;16537:50;16616:4;16604:17;;-1:-1:-1;16647:14:504;16643:27;;;16633:38;;16630:58;;;16684:1;16681;16674:12;16699:135;16738:3;-1:-1:-1;;16759:17:504;;16756:43;;;16779:18;;:::i;:::-;-1:-1:-1;16826:1:504;16815:13;;16699:135::o;18634:331::-;18739:9;18750;18792:8;18780:10;18777:24;18774:44;;;18814:1;18811;18804:12;18774:44;18843:6;18833:8;18830:20;18827:40;;;18863:1;18860;18853:12;18827:40;-1:-1:-1;;18889:23:504;;;18934:25;;;;;-1:-1:-1;18634:331:504:o;20137:457::-;20322:3;20360:6;20354:13;20376:53;20422:6;20417:3;20410:4;20402:6;20398:17;20376:53;:::i;:::-;20451:16;;20504:6;20496;20451:16;20476:35;20568:1;20530:18;;20557:13;;;-1:-1:-1;20530:18:504;;20137:457;-1:-1:-1;;;20137:457:504:o;20599:380::-;20678:1;20674:12;;;;20721;;;20742:61;;20796:4;20788:6;20784:17;20774:27;;20742:61;20849:2;20841:6;20838:14;20818:18;20815:38;20812:161;;;20895:10;20890:3;20886:20;20883:1;20876:31;20930:4;20927:1;20920:15;20958:4;20955:1;20948:15;20812:161;;20599:380;;;:::o;20984:388::-;21141:2;21130:9;21123:21;21180:6;21175:2;21164:9;21160:18;21153:34;21237:6;21229;21224:2;21213:9;21209:18;21196:48;21293:1;21264:22;;;21288:2;21260:31;;;21253:42;;;;21356:2;21335:15;;;-1:-1:-1;;21331:29:504;21316:45;21312:54;;20984:388;-1:-1:-1;20984:388:504:o;22664:274::-;22793:3;22831:6;22825:13;22847:53;22893:6;22888:3;22881:4;22873:6;22869:17;22847:53;:::i;:::-;22916:16;;;;;22664:274;-1:-1:-1;;22664:274:504:o;23693:277::-;23760:6;23813:2;23801:9;23792:7;23788:23;23784:32;23781:52;;;23829:1;23826;23819:12;23781:52;23861:9;23855:16;23914:5;23907:13;23900:21;23893:5;23890:32;23880:60;;23936:1;23933;23926:12;24394:127;24455:10;24450:3;24446:20;24443:1;24436:31;24486:4;24483:1;24476:15;24510:4;24507:1;24500:15;24526:147;24614:13;;24636:31;24614:13;24636:31;:::i;24678:1155::-;24790:6;24821:2;24864;24852:9;24843:7;24839:23;24835:32;24832:52;;;24880:1;24877;24870:12;24832:52;24913:9;24907:16;24942:18;24983:2;24975:6;24972:14;24969:34;;;24999:1;24996;24989:12;24969:34;25037:6;25026:9;25022:22;25012:32;;25082:7;25075:4;25071:2;25067:13;25063:27;25053:55;;25104:1;25101;25094:12;25053:55;25133:2;25127:9;25155:2;25151;25148:10;25145:36;;;25161:18;;:::i;:::-;25207:2;25204:1;25200:10;25239:2;25233:9;25302:2;25298:7;25293:2;25289;25285:11;25281:25;25273:6;25269:38;25357:6;25345:10;25342:22;25337:2;25325:10;25322:18;25319:46;25316:72;;;25368:18;;:::i;:::-;25404:2;25397:22;25454:18;;;25488:15;;;;-1:-1:-1;25530:11:504;;;25526:20;;;25558:19;;;25555:39;;;25590:1;25587;25580:12;25555:39;25614:11;;;;25634:168;25650:6;25645:3;25642:15;25634:168;;;25716:43;25755:3;25716:43;:::i;:::-;25704:56;;25667:12;;;;25780;;;;25634:168;;25838:175;25875:3;25919:4;25912:5;25908:16;25948:4;25939:7;25936:17;25933:43;;;25956:18;;:::i;:::-;26005:1;25992:15;;25838:175;-1:-1:-1;;25838:175:504:o;28695:407::-;28897:2;28879:21;;;28936:2;28916:18;;;28909:30;28975:34;28970:2;28955:18;;28948:62;-1:-1:-1;;;29041:2:504;29026:18;;29019:41;29092:3;29077:19;;28695:407::o;30283:219::-;30432:2;30421:9;30414:21;30395:4;30452:44;30492:2;30481:9;30477:18;30469:6;30452:44;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_callPool(address[],bytes)": "b01b86fd", + "_callPool(address[],bytes[])": "2acbff39", + "_registerComptrollerExtension(address,address,address)": "3ddd836d", + "_setCErc20DelegateExtensions(address,address[])": "eab8a388", + "_setComptrollerExtensions(address,address[])": "e95600be", + "_setCustomInterestFeeRate(address,int256)": "06bc4611", + "_setDefaultInterestFeeRate(uint256)": "e35a4801", + "_setLatestCErc20Delegate(uint8,address,bytes)": "88457be1", + "_setLatestComptrollerImplementation(address,address)": "930d2438", + "_setLatestPluginImplementation(address,address)": "1259821c", + "_setPendingOwner(address)": "6e96dfd7", + "_setPoolLimits(uint256,uint256)": "642843a5", + "_upgradePluginToLatestImplementation(address)": "7a1133d6", + "_withdrawAssets(address)": "3465b6e1", + "authoritiesRegistry()": "8aac2f0c", + "autoUpgradePool(address)": "fa7cc72d", + "cErc20DelegateExtensions(address,uint256)": "2203abb5", + "canCall(address,address,address,bytes4)": "df595cb8", + "comptrollerExtensions(address,uint256)": "fc773d33", + "customInterestFeeRates(address)": "c5232b47", + "defaultInterestFeeRate()": "84651d73", + "deployCErc20(uint8,bytes,bytes)": "51f02d6a", + "getCErc20DelegateExtensions(address)": "11a0e217", + "getComptrollerExtensions(address)": "cbc505f8", + "getMinBorrowEth(address)": "0b2a2394", + "initialize(uint256)": "fe4b84df", + "interestFeeRate()": "dd86fea1", + "latestCErc20Delegate(uint8)": "aa84161c", + "latestComptrollerImplementation(address)": "bbcdd6d3", + "latestPluginImplementation(address)": "81218ea9", + "marketsCounter()": "a71d085d", + "maxUtilizationRate()": "dfcb48bd", + "minBorrowEth()": "fdb25fb1", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "reinitialize(address)": "f7e7d1fd", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/FeeDistributor_Proxy.json b/packages/sdk/deployments/bob/FeeDistributor_Proxy.json new file mode 100644 index 000000000..144ddd24f --- /dev/null +++ b/packages/sdk/deployments/bob/FeeDistributor_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "transactionIndex": 1, + "gasUsed": "816791", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800020000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000020000000000000000000000000000000020000000000000800000800000000800000000000000000000000400000000000000000000000000000000000000000001080000000000000c00000000000000000000000000000000400000000000000000004000000080000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a", + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000009bad1f7685f33ad855ae81089dfe79040864e2f6" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + }, + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + }, + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + }, + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + }, + { + "transactionIndex": 1, + "blockNumber": 3777647, + "transactionHash": "0x7d7a3e15d49146d358c133dbc82ce235e0db7aa218efb069a76d73cfef2f5002", + "address": "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0xe65011da86f3e6a6cd8aebae3bd1d9ca7670d9c8e64fd2b43129175dda0c0d2a" + } + ], + "blockNumber": 3777647, + "cumulativeGasUsed": "860630", + "status": 1, + "byzantium": true + }, + "args": [ + "0x9BAD1f7685f33ad855AE81089dFe79040864E2F6", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xfe4b84df000000000000000000000000000000000000000000000000016345785d8a0000" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/FixedNativePriceOracle.json b/packages/sdk/deployments/bob/FixedNativePriceOracle.json new file mode 100644 index 000000000..1071d1416 --- /dev/null +++ b/packages/sdk/deployments/bob/FixedNativePriceOracle.json @@ -0,0 +1,405 @@ +{ + "address": "0xd8d2D1195a548FE2ff69C31c4C90e54b263771c7", + "abi": [ + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + } + ], + "transactionHash": "0xe8aaceff2954a34f9d3c968beea4f6a1461e22ce9a1a1c2e149db9e8bc1f4ea4", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xd8d2D1195a548FE2ff69C31c4C90e54b263771c7", + "transactionIndex": 1, + "gasUsed": "89273", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x0fc65c824188f1f649a5f3958fff02412f9a755497512b0e8b85a8979d04110a", + "transactionHash": "0xe8aaceff2954a34f9d3c968beea4f6a1461e22ce9a1a1c2e149db9e8bc1f4ea4", + "logs": [], + "blockNumber": 3777861, + "cumulativeGasUsed": "133112", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getUnderlyingPrice(address)": { + "details": "Implements the `PriceOracle` interface for Ionic pools (and Compound v2).", + "returns": { + "_0": "Price in native token of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`." + } + }, + "price(address)": { + "details": "Returns the price in native token of `underlying` (implements `BasePriceOracle`)." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getUnderlyingPrice(address)": { + "notice": "Returns the price in native token of the token underlying `cToken`." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/default/FixedNativePriceOracle.sol": "FixedNativePriceOracle" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/FixedNativePriceOracle.sol": { + "keccak256": "0x8c03761765330065bd349ba59bb607a0e8d93c6afa4858ee2dca8ce9aaecdff9", + "urls": [ + "bzz-raw://e7153e1d087364b4a8fe1ba5de4403a5c9090363e25ac5fdf5bbacfcff2f54ce", + "dweb:/ipfs/Qmeq7SrkSGmQhqn71HYHX4Lfvkw7tnJvuQW2kxV72hQYX8" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5060a68061001f6000396000f3fe6080604052348015600f57600080fd5b506004361060325760003560e01c8063aea91078146037578063fc57d4df146037575b600080fd5b604f60423660046078565b50670de0b6b3a764000090565b60405190815260200160405180910390f35b6001600160a01b0381168114607557600080fd5b50565b600060208284031215608957600080fd5b81356092816061565b939250505056fea164736f6c634300080a000a", + "sourceMap": "501:661:261:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x6080604052348015600f57600080fd5b506004361060325760003560e01c8063aea91078146037578063fc57d4df146037575b600080fd5b604f60423660046078565b50670de0b6b3a764000090565b60405190815260200160405180910390f35b6001600160a01b0381168114607557600080fd5b50565b600060208284031215608957600080fd5b81356092816061565b939250505056fea164736f6c634300080a000a", + "sourceMap": "501:661:261:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;660:98;;;;;;:::i;:::-;-1:-1:-1;749:4:261;;660:98;;;;548:25:504;;;536:2;521:18;660:98:261;;;;;;;14:131:504;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:247::-;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "getUnderlyingPrice(address)": "fc57d4df", + "price(address)": "aea91078" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/GlobalPauser.json b/packages/sdk/deployments/bob/GlobalPauser.json new file mode 100644 index 000000000..9e7869acd --- /dev/null +++ b/packages/sdk/deployments/bob/GlobalPauser.json @@ -0,0 +1,668 @@ +{ + "address": "0x1699a7b8983D35b9f401fb3cd0a883E3C6b0B937", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_poolDirectory", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pauseAll", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "pauseGuardian", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolDirectory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPoolDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPauseGuardian", + "inputs": [ + { + "name": "_pauseGuardian", + "type": "address", + "internalType": "address" + }, + { + "name": "_isPauseGuardian", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xe9858505feff7b9db0e0cbd4b84eba54d953458bab7c05f38449f162b07a7594", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x1699a7b8983D35b9f401fb3cd0a883E3C6b0B937", + "transactionIndex": 1, + "gasUsed": "745480", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000101000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000800000000000000000000000020000000000000080000000000000000000000000000000000000000000000000000", + "blockHash": "0x1ee0dd2a5fcfd829cdaa46d333145e1fc575ff3032f899d6abfc5abd3b9fba11", + "transactionHash": "0xe9858505feff7b9db0e0cbd4b84eba54d953458bab7c05f38449f162b07a7594", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3778068, + "transactionHash": "0xe9858505feff7b9db0e0cbd4b84eba54d953458bab7c05f38449f162b07a7594", + "address": "0x1699a7b8983D35b9f401fb3cd0a883E3C6b0B937", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x1ee0dd2a5fcfd829cdaa46d333145e1fc575ff3032f899d6abfc5abd3b9fba11" + } + ], + "blockNumber": 3778068, + "cumulativeGasUsed": "789319", + "status": 1, + "byzantium": true + }, + "args": [ + "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4" + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_poolDirectory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "pauseAll" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "pauseGuardian", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "poolDirectory", + "outputs": [ + { + "internalType": "contract IPoolDirectory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_pauseGuardian", + "type": "address" + }, + { + "internalType": "bool", + "name": "_isPauseGuardian", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPauseGuardian" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/GlobalPauser.sol": "GlobalPauser" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/GlobalPauser.sol": { + "keccak256": "0xe961b0faa1b45e51d724b93d1e6d5f3e8b69171389d11429dd22a76bdf899e36", + "urls": [ + "bzz-raw://fceb79c385b57aa2d19337e3ef158bdd4e867cf688ec8d9d46c13cb84e18ab68", + "dweb:/ipfs/QmYuspXXonQ3HNSNLnK3byBt6CYVpZSoHaGRUBysoDVwtH" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50604051610ca5380380610ca583398101604081905261002f916100d4565b6100383361005d565b600280546001600160a01b0319166001600160a01b0392909216919091179055610104565b600180546001600160a01b031916905561008181610084602090811b61070a17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100e657600080fd5b81516001600160a01b03811681146100fd57600080fd5b9392505050565b610b92806101136000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063715018a611610066578063715018a61461011857806379ba5097146101205780638da5cb5b14610128578063e30c397814610139578063f2fde38b1461014a57600080fd5b80633557796214610098578063364c426e146100ad578063550ddfd7146100dd578063595c6a6714610110575b600080fd5b6100ab6100a63660046107f0565b61015d565b005b6002546100c0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101006100eb366004610829565b60036020526000908152604090205460ff1681565b60405190151581526020016100d4565b6100ab610190565b6100ab61060b565b6100ab61061f565b6000546001600160a01b03166100c0565b6001546001600160a01b03166100c0565b6100ab610158366004610829565b610699565b61016561075a565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b3360009081526003602052604090205460ff166101e05760405162461bcd60e51b815260206004820152600960248201526810b3bab0b93234b0b760b91b60448201526064015b60405180910390fd5b600254604080516323b020d560e21b815290516000926001600160a01b031691638ec0835491600480830192869291908290030181865afa158015610229573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261025191908101906108f1565b91505060005b815181101561060757600082828151811061027457610274610a8f565b6020026020010151604001516001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e59190810190610aa5565b905060005b81518110156105f257600084848151811061030757610307610a8f565b6020026020010151604001516001600160a01b0316636d154ea584848151811061033357610333610a8f565b60200260200101516040518263ffffffff1660e01b815260040161036691906001600160a01b0391909116815260200190565b602060405180830381865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190610b3f565b90508061046a578484815181106103c0576103c0610a8f565b6020026020010151604001516001600160a01b03166318c882a58484815181106103ec576103ec610a8f565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152600160248201526044016020604051808303816000875af1158015610444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104689190610b3f565b505b84848151811061047c5761047c610a8f565b6020026020010151604001516001600160a01b031663731f0c2b8484815181106104a8576104a8610a8f565b60200260200101516040518263ffffffff1660e01b81526004016104db91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c9190610b3f565b9050806105df5784848151811061053557610535610a8f565b6020026020010151604001516001600160a01b0316633bcf7ec184848151811061056157610561610a8f565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152600160248201526044016020604051808303816000875af11580156105b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dd9190610b3f565b505b50806105ea81610b5c565b9150506102ea565b505080806105ff90610b5c565b915050610257565b5050565b61061361075a565b61061d60006107b4565b565b60015433906001600160a01b0316811461068d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016101d7565b610696816107b4565b50565b6106a161075a565b600180546001600160a01b0383166001600160a01b031990911681179091556106d26000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b0316331461061d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d7565b600180546001600160a01b03191690556106968161070a565b6001600160a01b038116811461069657600080fd5b801515811461069657600080fd5b6000806040838503121561080357600080fd5b823561080e816107cd565b9150602083013561081e816107e2565b809150509250929050565b60006020828403121561083b57600080fd5b8135610846816107cd565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156108865761088661084d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108b5576108b561084d565b604052919050565b600067ffffffffffffffff8211156108d7576108d761084d565b5060051b60200190565b80516108ec816107cd565b919050565b6000806040838503121561090457600080fd5b8251915060208084015167ffffffffffffffff8082111561092457600080fd5b818601915086601f83011261093857600080fd5b815161094b610946826108bd565b61088c565b81815260059190911b8301840190848101908983111561096a57600080fd5b8585015b83811015610a7e5780518581111561098557600080fd5b8601601f1960a0828e038201121561099c57600080fd5b6109a4610863565b89830151888111156109b557600080fd5b8301603f81018f136109c657600080fd5b8a810151898111156109da576109da61084d565b6109ea8c85601f8401160161088c565b93508084528f6040828401011115610a0157600080fd5b60005b81811015610a2057828101604001518582018e01528c01610a04565b81811115610a315760008d83870101525b505050818152610a43604084016108e1565b8a820152610a53606084016108e1565b6040820152608083810151606083015260a0909301519281019290925250835291860191860161096e565b508096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b60006020808385031215610ab857600080fd5b825167ffffffffffffffff811115610acf57600080fd5b8301601f81018513610ae057600080fd5b8051610aee610946826108bd565b81815260059190911b82018301908381019087831115610b0d57600080fd5b928401925b82841015610b34578351610b25816107cd565b82529284019290840190610b12565b979650505050505050565b600060208284031215610b5157600080fd5b8151610846816107e2565b6000600019821415610b7e57634e487b7160e01b600052601160045260246000fd5b506001019056fea164736f6c634300080a000a", + "sourceMap": "529:1276:0:-:0;;;758:108;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:49;719:10:59;936:18:49;:32::i;:::-;815:13:0::1;:46:::0;;-1:-1:-1;;;;;;815:46:0::1;-1:-1:-1::0;;;;;815:46:0;;;::::1;::::0;;;::::1;::::0;;529:1276;;1496:153:50;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:50;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:49:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:49;;;-1:-1:-1;;;;;;2541:17:49;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:290:65:-;84:6;137:2;125:9;116:7;112:23;108:32;105:52;;;153:1;150;143:12;105:52;179:16;;-1:-1:-1;;;;;224:31:65;;214:42;;204:70;;270:1;267;260:12;204:70;293:5;14:290;-1:-1:-1;;;14:290:65:o;:::-;529:1276:0;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063715018a611610066578063715018a61461011857806379ba5097146101205780638da5cb5b14610128578063e30c397814610139578063f2fde38b1461014a57600080fd5b80633557796214610098578063364c426e146100ad578063550ddfd7146100dd578063595c6a6714610110575b600080fd5b6100ab6100a63660046107f0565b61015d565b005b6002546100c0906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b6101006100eb366004610829565b60036020526000908152604090205460ff1681565b60405190151581526020016100d4565b6100ab610190565b6100ab61060b565b6100ab61061f565b6000546001600160a01b03166100c0565b6001546001600160a01b03166100c0565b6100ab610158366004610829565b610699565b61016561075a565b6001600160a01b03919091166000908152600360205260409020805460ff1916911515919091179055565b3360009081526003602052604090205460ff166101e05760405162461bcd60e51b815260206004820152600960248201526810b3bab0b93234b0b760b91b60448201526064015b60405180910390fd5b600254604080516323b020d560e21b815290516000926001600160a01b031691638ec0835491600480830192869291908290030181865afa158015610229573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261025191908101906108f1565b91505060005b815181101561060757600082828151811061027457610274610a8f565b6020026020010151604001516001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102e59190810190610aa5565b905060005b81518110156105f257600084848151811061030757610307610a8f565b6020026020010151604001516001600160a01b0316636d154ea584848151811061033357610333610a8f565b60200260200101516040518263ffffffff1660e01b815260040161036691906001600160a01b0391909116815260200190565b602060405180830381865afa158015610383573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a79190610b3f565b90508061046a578484815181106103c0576103c0610a8f565b6020026020010151604001516001600160a01b03166318c882a58484815181106103ec576103ec610a8f565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152600160248201526044016020604051808303816000875af1158015610444573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104689190610b3f565b505b84848151811061047c5761047c610a8f565b6020026020010151604001516001600160a01b031663731f0c2b8484815181106104a8576104a8610a8f565b60200260200101516040518263ffffffff1660e01b81526004016104db91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156104f8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061051c9190610b3f565b9050806105df5784848151811061053557610535610a8f565b6020026020010151604001516001600160a01b0316633bcf7ec184848151811061056157610561610a8f565b60209081029190910101516040516001600160e01b031960e084901b1681526001600160a01b039091166004820152600160248201526044016020604051808303816000875af11580156105b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105dd9190610b3f565b505b50806105ea81610b5c565b9150506102ea565b505080806105ff90610b5c565b915050610257565b5050565b61061361075a565b61061d60006107b4565b565b60015433906001600160a01b0316811461068d5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016101d7565b610696816107b4565b50565b6106a161075a565b600180546001600160a01b0383166001600160a01b031990911681179091556106d26000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000546001600160a01b0316331461061d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016101d7565b600180546001600160a01b03191690556106968161070a565b6001600160a01b038116811461069657600080fd5b801515811461069657600080fd5b6000806040838503121561080357600080fd5b823561080e816107cd565b9150602083013561081e816107e2565b809150509250929050565b60006020828403121561083b57600080fd5b8135610846816107cd565b9392505050565b634e487b7160e01b600052604160045260246000fd5b60405160a0810167ffffffffffffffff811182821017156108865761088661084d565b60405290565b604051601f8201601f1916810167ffffffffffffffff811182821017156108b5576108b561084d565b604052919050565b600067ffffffffffffffff8211156108d7576108d761084d565b5060051b60200190565b80516108ec816107cd565b919050565b6000806040838503121561090457600080fd5b8251915060208084015167ffffffffffffffff8082111561092457600080fd5b818601915086601f83011261093857600080fd5b815161094b610946826108bd565b61088c565b81815260059190911b8301840190848101908983111561096a57600080fd5b8585015b83811015610a7e5780518581111561098557600080fd5b8601601f1960a0828e038201121561099c57600080fd5b6109a4610863565b89830151888111156109b557600080fd5b8301603f81018f136109c657600080fd5b8a810151898111156109da576109da61084d565b6109ea8c85601f8401160161088c565b93508084528f6040828401011115610a0157600080fd5b60005b81811015610a2057828101604001518582018e01528c01610a04565b81811115610a315760008d83870101525b505050818152610a43604084016108e1565b8a820152610a53606084016108e1565b6040820152608083810151606083015260a0909301519281019290925250835291860191860161096e565b508096505050505050509250929050565b634e487b7160e01b600052603260045260246000fd5b60006020808385031215610ab857600080fd5b825167ffffffffffffffff811115610acf57600080fd5b8301601f81018513610ae057600080fd5b8051610aee610946826108bd565b81815260059190911b82018301908381019087831115610b0d57600080fd5b928401925b82841015610b34578351610b25816107cd565b82529284019290840190610b12565b979650505050505050565b600060208284031215610b5157600080fd5b8151610846816107e2565b6000600019821415610b7e57634e487b7160e01b600052601160045260246000fd5b506001019056fea164736f6c634300080a000a", + "sourceMap": "529:1276:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;870:151;;;;;;:::i;:::-;;:::i;:::-;;571:35;;;;;-1:-1:-1;;;;;571:35:0;;;;;;-1:-1:-1;;;;;845:32:65;;;827:51;;815:2;800:18;571:35:0;;;;;;;;610:45;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1306:14:65;;1299:22;1281:41;;1269:2;1254:18;610:45:0;1141:187:65;1025:778:0;;;:::i;1831:101:49:-;;;:::i;1729:206:50:-;;;:::i;1201:85:49:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:49;1201:85;;842:99:50;921:13;;-1:-1:-1;;;;;921:13:50;842:99;;1134:178;;;;;;:::i;:::-;;:::i;870:151:0:-;1094:13:49;:11;:13::i;:::-;-1:-1:-1;;;;;968:29:0;;;::::1;;::::0;;;:13:::1;:29;::::0;;;;:48;;-1:-1:-1;;968:48:0::1;::::0;::::1;;::::0;;;::::1;::::0;;870:151::o;1025:778::-;717:10;703:25;;;;:13;:25;;;;;;;;695:47;;;;-1:-1:-1;;;695:47:0;;1743:2:65;695:47:0;;;1725:21:65;1782:1;1762:18;;;1755:29;-1:-1:-1;;;1800:18:65;;;1793:39;1849:18;;695:47:0;;;;;;;;;1119:13:::1;::::0;:30:::1;::::0;;-1:-1:-1;;;1119:30:0;;;;1081:34:::1;::::0;-1:-1:-1;;;;;1119:13:0::1;::::0;:28:::1;::::0;:30:::1;::::0;;::::1;::::0;1081:34;;1119:30;;;;;;;:13;:30:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;1119:30:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;1078:71;;;1160:9;1155:644;1179:5;:12;1175:1;:16;1155:644;;;1206:24;1250:5;1256:1;1250:8;;;;;;;;:::i;:::-;;;;;;;:20;;;-1:-1:-1::0;;;;;1233:52:0::1;;:54;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;1233:54:0::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;1206:81;;1300:9;1295:498;1319:7;:14;1315:1;:18;1295:498;;;1350:13;1383:5;1389:1;1383:8;;;;;;;;:::i;:::-;;;;;;;:20;;;-1:-1:-1::0;;;;;1366:59:0::1;;1434:7;1442:1;1434:10;;;;;;;;:::i;:::-;;;;;;;1366:80;;;;;;;;;;;;;;-1:-1:-1::0;;;;;845:32:65;;;;827:51;;815:2;800:18;;660:224;1366:80:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1350:96;;1461:8;1456:111;;1500:5;1506:1;1500:8;;;;;;;;:::i;:::-;;;;;;;:20;;;-1:-1:-1::0;;;;;1483:55:0::1;;1539:7;1547:1;1539:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;1483:73:::1;::::0;-1:-1:-1;;;;;;1483:73:0::1;::::0;;;;;;-1:-1:-1;;;;;6766:32:65;;;1483:73:0::1;::::0;::::1;6748:51:65::0;1551:4:0::1;6815:18:65::0;;;6808:50;6721:18;;1483:73:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1456:111;1605:5;1611:1;1605:8;;;;;;;;:::i;:::-;;;;;;;:20;;;-1:-1:-1::0;;;;;1588:57:0::1;;1654:7;1662:1;1654:10;;;;;;;;:::i;:::-;;;;;;;1588:78;;;;;;;;;;;;;;-1:-1:-1::0;;;;;845:32:65;;;;827:51;;815:2;800:18;;660:224;1588:78:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1577:89;;1681:8;1676:109;;1720:5;1726:1;1720:8;;;;;;;;:::i;:::-;;;;;;;:20;;;-1:-1:-1::0;;;;;1703:53:0::1;;1757:7;1765:1;1757:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;1703:71:::1;::::0;-1:-1:-1;;;;;;1703:71:0::1;::::0;;;;;;-1:-1:-1;;;;;6766:32:65;;;1703:71:0::1;::::0;::::1;6748:51:65::0;1769:4:0::1;6815:18:65::0;;;6808:50;6721:18;;1703:71:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;1676:109;-1:-1:-1::0;1335:3:0;::::1;::::0;::::1;:::i;:::-;;;;1295:498;;;;1198:601;1193:3;;;;;:::i;:::-;;;;1155:644;;;;1072:731;1025:778::o:0;1831:101:49:-;1094:13;:11;:13::i;:::-;1895:30:::1;1922:1;1895:18;:30::i;:::-;1831:101::o:0;1729:206:50:-;921:13;;719:10:59;;-1:-1:-1;;;;;921:13:50;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:50;;7308:2:65;1814:78:50;;;7290:21:65;7347:2;7327:18;;;7320:30;7386:34;7366:18;;;7359:62;-1:-1:-1;;;7437:18:65;;;7430:39;7486:19;;1814:78:50;7106:405:65;1814:78:50;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;1134:178::-;1094:13:49;:11;:13::i;:::-;1223::50::1;:24:::0;;-1:-1:-1;;;;;1223:24:50;::::1;-1:-1:-1::0;;;;;;1223:24:50;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::49::0;1273:6;-1:-1:-1;;;;;1273:6:49;;1201:85;1287:7:50::1;-1:-1:-1::0;;;;;1262:43:50::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:49:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:49;;;-1:-1:-1;;;;;;2541:17:49;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1359:130::-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:49;719:10:59;1422:23:49;1414:68;;;;-1:-1:-1;;;1414:68:49;;7718:2:65;1414:68:49;;;7700:21:65;;;7737:18;;;7730:30;7796:34;7776:18;;;7769:62;7848:18;;1414:68:49;7516:356:65;1496:153:50;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:50;;;1608:34;1633:8;1608:24;:34::i;14:131:65:-;-1:-1:-1;;;;;89:31:65;;79:42;;69:70;;135:1;132;125:12;150:118;236:5;229:13;222:21;215:5;212:32;202:60;;258:1;255;248:12;273:382;338:6;346;399:2;387:9;378:7;374:23;370:32;367:52;;;415:1;412;405:12;367:52;454:9;441:23;473:31;498:5;473:31;:::i;:::-;523:5;-1:-1:-1;580:2:65;565:18;;552:32;593:30;552:32;593:30;:::i;:::-;642:7;632:17;;;273:382;;;;;:::o;889:247::-;948:6;1001:2;989:9;980:7;976:23;972:32;969:52;;;1017:1;1014;1007:12;969:52;1056:9;1043:23;1075:31;1100:5;1075:31;:::i;:::-;1125:5;889:247;-1:-1:-1;;;889:247:65:o;1878:127::-;1939:10;1934:3;1930:20;1927:1;1920:31;1970:4;1967:1;1960:15;1994:4;1991:1;1984:15;2010:253;2082:2;2076:9;2124:4;2112:17;;2159:18;2144:34;;2180:22;;;2141:62;2138:88;;;2206:18;;:::i;:::-;2242:2;2235:22;2010:253;:::o;2268:275::-;2339:2;2333:9;2404:2;2385:13;;-1:-1:-1;;2381:27:65;2369:40;;2439:18;2424:34;;2460:22;;;2421:62;2418:88;;;2486:18;;:::i;:::-;2522:2;2515:22;2268:275;;-1:-1:-1;2268:275:65:o;2548:187::-;2612:4;2645:18;2637:6;2634:30;2631:56;;;2667:18;;:::i;:::-;-1:-1:-1;2712:1:65;2708:14;2724:4;2704:25;;2548:187::o;2740:138::-;2819:13;;2841:31;2819:13;2841:31;:::i;:::-;2740:138;;;:::o;2883:2313::-;3007:6;3015;3068:2;3056:9;3047:7;3043:23;3039:32;3036:52;;;3084:1;3081;3074:12;3036:52;3113:9;3107:16;3097:26;;3142:2;3188;3177:9;3173:18;3167:25;3211:18;3252:2;3244:6;3241:14;3238:34;;;3268:1;3265;3258:12;3238:34;3306:6;3295:9;3291:22;3281:32;;3351:7;3344:4;3340:2;3336:13;3332:27;3322:55;;3373:1;3370;3363:12;3322:55;3402:2;3396:9;3425:64;3441:47;3485:2;3441:47;:::i;:::-;3425:64;:::i;:::-;3523:15;;;3605:1;3601:10;;;;3593:19;;3589:28;;;3554:12;;;;3629:19;;;3626:39;;;3661:1;3658;3651:12;3626:39;3693:2;3689;3685:11;3705:1461;3721:6;3716:3;3713:15;3705:1461;;;3800:3;3794:10;3836:2;3823:11;3820:19;3817:39;;;3852:1;3849;3842:12;3817:39;3879:20;;-1:-1:-1;;3976:4:65;3953:16;;;3949:25;;3945:36;3942:56;;;3994:1;3991;3984:12;3942:56;4024:22;;:::i;:::-;4089:2;4085;4081:11;4075:18;4122:2;4112:8;4109:16;4106:36;;;4138:1;4135;4128:12;4106:36;4165:17;;4217:2;4209:11;;4205:25;-1:-1:-1;4195:53:65;;4244:1;4241;4234:12;4195:53;4285:2;4281;4277:11;4271:18;4312:2;4308;4305:10;4302:36;;;4318:18;;:::i;:::-;4364:48;4408:2;4403;4396:4;4392:2;4388:13;4384:22;4380:31;4364:48;:::i;:::-;4351:61;;4439:2;4432:5;4425:17;4483:7;4478:2;4473;4469;4465:11;4461:20;4458:33;4455:53;;;4504:1;4501;4494:12;4455:53;4530:1;4544:140;4558:2;4555:1;4552:9;4544:140;;;4653:10;;;4665:2;4649:19;4643:26;4623:13;;;4619:22;;4612:58;4569:10;;4544:140;;;4706:2;4703:1;4700:9;4697:91;;;4772:1;4767:2;4762;4755:5;4751:14;4747:23;4740:34;4697:91;;;;4815:5;4808;4801:20;4857:42;4895:2;4891;4887:11;4857:42;:::i;:::-;4852:2;4845:5;4841:14;4834:66;4936:42;4974:2;4970;4966:11;4936:42;:::i;:::-;4931:2;4920:14;;4913:66;5029:3;5021:12;;;5015:19;5010:2;4999:14;;4992:43;5086:4;5078:13;;;5072:20;5055:15;;;5048:45;;;;-1:-1:-1;5106:18:65;;5144:12;;;;3738;;3705:1461;;;3709:3;5185:5;5175:15;;;;;;;;2883:2313;;;;;:::o;5201:127::-;5262:10;5257:3;5253:20;5250:1;5243:31;5293:4;5290:1;5283:15;5317:4;5314:1;5307:15;5333:976;5444:6;5475:2;5518;5506:9;5497:7;5493:23;5489:32;5486:52;;;5534:1;5531;5524:12;5486:52;5567:9;5561:16;5600:18;5592:6;5589:30;5586:50;;;5632:1;5629;5622:12;5586:50;5655:22;;5708:4;5700:13;;5696:27;-1:-1:-1;5686:55:65;;5737:1;5734;5727:12;5686:55;5766:2;5760:9;5789:64;5805:47;5849:2;5805:47;:::i;5789:64::-;5887:15;;;5969:1;5965:10;;;;5957:19;;5953:28;;;5918:12;;;;5993:19;;;5990:39;;;6025:1;6022;6015:12;5990:39;6049:11;;;;6069:210;6085:6;6080:3;6077:15;6069:210;;;6158:3;6152:10;6175:31;6200:5;6175:31;:::i;:::-;6219:18;;6102:12;;;;6257;;;;6069:210;;;6298:5;5333:976;-1:-1:-1;;;;;;;5333:976:65:o;6314:245::-;6381:6;6434:2;6422:9;6413:7;6409:23;6405:32;6402:52;;;6450:1;6447;6440:12;6402:52;6482:9;6476:16;6501:28;6523:5;6501:28;:::i;6869:232::-;6908:3;-1:-1:-1;;6929:17:65;;6926:140;;;6988:10;6983:3;6979:20;6976:1;6969:31;7023:4;7020:1;7013:15;7051:4;7048:1;7041:15;6926:140;-1:-1:-1;7093:1:65;7082:13;;6869:232::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "acceptOwnership()": "79ba5097", + "owner()": "8da5cb5b", + "pauseAll()": "595c6a67", + "pauseGuardian(address)": "550ddfd7", + "pendingOwner()": "e30c3978", + "poolDirectory()": "364c426e", + "renounceOwnership()": "715018a6", + "setPauseGuardian(address,bool)": "35577962", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/IonicFlywheelLensRouter.json b/packages/sdk/deployments/bob/IonicFlywheelLensRouter.json new file mode 100644 index 000000000..e38d290d0 --- /dev/null +++ b/packages/sdk/deployments/bob/IonicFlywheelLensRouter.json @@ -0,0 +1,1220 @@ +{ + "address": "0x1E2812B4dEcA77B5dD7Af9f2D6ec40102bcffD02", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_fpd", + "type": "address", + "internalType": "contract PoolDirectory" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimAllRewardTokens", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimRewardsForMarket", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "market", + "type": "address", + "internalType": "contract ERC20" + }, + { + "name": "flywheels", + "type": "address[]", + "internalType": "contract IonicFlywheelCore[]" + }, + { + "name": "accrue", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IonicFlywheelCore[]" + }, + { + "name": "rewardTokens", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "rewards", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimRewardsForMarkets", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "markets", + "type": "address[]", + "internalType": "contract ERC20[]" + }, + { + "name": "flywheels", + "type": "address[]", + "internalType": "contract IonicFlywheelCore[]" + }, + { + "name": "accrue", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IonicFlywheelCore[]" + }, + { + "name": "rewardTokens", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "rewards", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimRewardsForPool", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract IonicFlywheelCore[]" + }, + { + "name": "", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "claimRewardsOfRewardToken", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardsClaimed", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "fpd", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract PoolDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAdjustedUserNetApr", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "blocksPerYear", + "type": "int256", + "internalType": "int256" + }, + { + "name": "offchainRewardsAprMarkets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "offchainRewardsAprs", + "type": "int256[]", + "internalType": "int256[]" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getAllRewardTokens", + "inputs": [], + "outputs": [ + { + "name": "uniqueRewardTokens", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMarketRewardsInfo", + "inputs": [ + { + "name": "markets", + "type": "address[]", + "internalType": "contract ICErc20[]" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IonicFlywheelLensRouter.MarketRewardsInfo[]", + "components": [ + { + "name": "underlyingPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "market", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "rewardsInfo", + "type": "tuple[]", + "internalType": "struct IonicFlywheelLensRouter.RewardsInfo[]", + "components": [ + { + "name": "rewardSpeedPerSecondPerToken", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rewardTokenPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "formattedAPR", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "flywheel", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardToken", + "type": "address", + "internalType": "address" + } + ] + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPoolMarketRewardsInfo", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct IonicFlywheelLensRouter.MarketRewardsInfo[]", + "components": [ + { + "name": "underlyingPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "market", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "rewardsInfo", + "type": "tuple[]", + "internalType": "struct IonicFlywheelLensRouter.RewardsInfo[]", + "components": [ + { + "name": "rewardSpeedPerSecondPerToken", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "rewardTokenPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "formattedAPR", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "flywheel", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardToken", + "type": "address", + "internalType": "address" + } + ] + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getUserNetApr", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "blocksPerYear", + "type": "int256", + "internalType": "int256" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "nonpayable" + } + ], + "transactionHash": "0xe0e1401821633a40bd3b544d63da00ef915e4d48dbdee371e554a903ad38eef9", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x1E2812B4dEcA77B5dD7Af9f2D6ec40102bcffD02", + "transactionIndex": 1, + "gasUsed": "3558664", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x8f14a3a9664ea9b1d2cd5ba079ad13795fde79142c77425951fd5becc83b7695", + "transactionHash": "0xe0e1401821633a40bd3b544d63da00ef915e4d48dbdee371e554a903ad38eef9", + "logs": [], + "blockNumber": 3777852, + "cumulativeGasUsed": "3602503", + "status": 1, + "byzantium": true + }, + "args": [ + "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4" + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_fpd", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimAllRewardTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract ERC20", + "name": "market", + "type": "address" + }, + { + "internalType": "contract IonicFlywheelCore[]", + "name": "flywheels", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "accrue", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimRewardsForMarket", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "rewards", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract ERC20[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "contract IonicFlywheelCore[]", + "name": "flywheels", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "accrue", + "type": "bool[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimRewardsForMarkets", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "rewardTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "rewards", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimRewardsForPool", + "outputs": [ + { + "internalType": "contract IonicFlywheelCore[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "claimRewardsOfRewardToken", + "outputs": [ + { + "internalType": "uint256", + "name": "rewardsClaimed", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "fpd", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "blocksPerYear", + "type": "int256" + }, + { + "internalType": "address[]", + "name": "offchainRewardsAprMarkets", + "type": "address[]" + }, + { + "internalType": "int256[]", + "name": "offchainRewardsAprs", + "type": "int256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getAdjustedUserNetApr", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllRewardTokens", + "outputs": [ + { + "internalType": "address[]", + "name": "uniqueRewardTokens", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20[]", + "name": "markets", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getMarketRewardsInfo", + "outputs": [ + { + "internalType": "struct IonicFlywheelLensRouter.MarketRewardsInfo[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "market", + "type": "address" + }, + { + "internalType": "struct IonicFlywheelLensRouter.RewardsInfo[]", + "name": "rewardsInfo", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "rewardSpeedPerSecondPerToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "formattedAPR", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ] + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolMarketRewardsInfo", + "outputs": [ + { + "internalType": "struct IonicFlywheelLensRouter.MarketRewardsInfo[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "market", + "type": "address" + }, + { + "internalType": "struct IonicFlywheelLensRouter.RewardsInfo[]", + "name": "rewardsInfo", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "rewardSpeedPerSecondPerToken", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "rewardTokenPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "formattedAPR", + "type": "uint256" + }, + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + } + ] + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "int256", + "name": "blocksPerYear", + "type": "int256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getUserNetApr", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": {}, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/strategies/flywheel/IonicFlywheelLensRouter.sol": "IonicFlywheelLensRouter" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/PoolDirectory.sol": { + "keccak256": "0xd3d28cd044a0205a86f0c2d82021a36018ec4b0e95f72064c92bcad99f84f6c8", + "urls": [ + "bzz-raw://0c8ab6e3f922b9165cae038507497be2aed81df002ffe7921e0aa1f10f690531", + "dweb:/ipfs/QmNpfDhHaVPyxXZDY7Si2Bpidneh6Ckr8C4dGhRmA9pEEa" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x1e1f9dda1735929b60cf601e3b39b8394ceb284a582ab4f0d0614b76a84fc4bd", + "urls": [ + "bzz-raw://1670338a3d0c64b13c2e623acaad068ccb6a7f7650d5d43d555099071bcfd03d", + "dweb:/ipfs/QmSMje4u1Zn7kf8DAybkLs8GPmcggTukTq754RE9eq99YR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelLensRouter.sol": { + "keccak256": "0x484ad856892c74f638f2e4310bfb02c44ec1d57b418dfb3d5ceb4bd3435a9a75", + "urls": [ + "bzz-raw://fbec38610454559d32afb67dca48fef4938c418642b80d33b82fc9242b56ba67", + "dweb:/ipfs/QmTTB4etEYuX5vAR2sbFeYWCDKJ63wuBBk2njqgwFeNba1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b5060405162003f9238038062003f9283398101604081905262000034916200005a565b600080546001600160a01b0319166001600160a01b03929092169190911790556200008c565b6000602082840312156200006d57600080fd5b81516001600160a01b03811681146200008557600080fd5b9392505050565b613ef6806200009c6000396000f3fe608060405234801561001057600080fd5b50600436106100a95760003560e01c80637e70aa49116100715780637e70aa49146101315780638260a696146101515780639cf1fd5314610164578063bdfc183914610185578063d1040bae14610198578063de858c63146101ab57600080fd5b80630d9d7fdc146100ae57806312edb24c146100d45780633610c407146100e95780634f471e6d1461010b5780637d3cab4c1461011e575b600080fd5b6100c16100bc36600461301b565b6101d6565b6040519081526020015b60405180910390f35b6100dc610204565b6040516100cb919061308b565b6100fc6100f736600461309e565b610630565b6040516100cb93929190613107565b6100fc6101193660046131bd565b6108ee565b6100c161012c36600461334d565b610ce9565b61014461013f36600461342c565b611149565b6040516100cb91906134c5565b6100fc61015f36600461367e565b61129e565b61017761017236600461376c565b61165d565b6040516100cb929190613789565b6100c161019336600461309e565b61171c565b6101446101a636600461376c565b611c28565b6000546101be906001600160a01b031681565b6040516001600160a01b0390911681526020016100cb565b60408051600080825260208201818152828401909352916101f985858484610ce9565b925050505b92915050565b60008054604080516323b020d560e21b81529051606093926001600160a01b031691638ec0835491600480830192869291908290030181865afa15801561024f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102779190810190613933565b915060009050805b825181101561033857600083828151811061029c5761029c6139ee565b60200260200101516040015190506000816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103129190810190613a04565b90508051846103219190613aa8565b93505050808061033090613ac0565b91505061027f565b506000816001600160401b0381111561035357610353613251565b60405190808252806020026020018201604052801561037c578160200160208202803683370190505b5090506000805b84518110156105825760008582815181106103a0576103a06139ee565b60200260200101516040015190506000816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104169190810190613a04565b905060005b815181101561056c576000828281518110610438576104386139ee565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a19190613adb565b90506001600160a01b0381166104b7575061056c565b6000805b8851811015610512578881815181106104d6576104d66139ee565b60200260200101516001600160a01b0316836001600160a01b031614156105005760019150610512565b8061050a81613ac0565b9150506104bb565b50806105575781888861052481613ac0565b995081518110610536576105366139ee565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5050808061056490613ac0565b91505061041b565b505050808061057a90613ac0565b915050610383565b50806001600160401b0381111561059b5761059b613251565b6040519080825280602002602001820160405280156105c4578160200160208202803683370190505b50945060005b81811015610628578281815181106105e4576105e46139ee565b60200260200101518682815181106105fe576105fe6139ee565b6001600160a01b03909216602092830291909101909101528061062081613ac0565b9150506105ca565b505050505090565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610675573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261069d9190810190613af8565b9050600081516001600160401b038111156106ba576106ba613251565b6040519080825280602002602001820160405280156106e3578160200160208202803683370190505b5090506000866001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261074e9190810190613a04565b9050600081516001600160401b0381111561076b5761076b613251565b604051908082528060200260200182016040528015610794578160200160208202803683370190505b509050600082516001600160401b038111156107b2576107b2613251565b6040519080825280602002602001820160405280156107db578160200160208202803683370190505b50905060005b835181101561086c578381815181106107fc576107fc6139ee565b6020026020010151838281518110610816576108166139ee565b60200260200101906001600160a01b031690816001600160a01b031681525050600182828151811061084a5761084a6139ee565b911515602092830291909101909101528061086481613ac0565b9150506107e1565b5060005b85518110156108cf5785818151811061088b5761088b6139ee565b60200260200101518582815181106108a5576108a56139ee565b6001600160a01b0390921660209283029190910190910152806108c781613ac0565b915050610870565b506108dc8a85848461129e565b97509750975050505050509250925092565b6060808085806001600160401b0381111561090b5761090b613251565b604051908082528060200260200182016040528015610934578160200160208202803683370190505b509150806001600160401b0381111561094f5761094f613251565b604051908082528060200260200182016040528015610978578160200160208202803683370190505b50925060005b81811015610c9957600087878381811061099a5761099a6139ee565b90506020020160208101906109af9190613b86565b15610a58578989838181106109c6576109c66139ee565b90506020020160208101906109db919061376c565b604051632e6f912b60e21b81526001600160a01b038d811660048301528e81166024830152919091169063b9be44ac906044016020604051808303816000875af1158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a519190613ba1565b9050610af0565b898983818110610a6a57610a6a6139ee565b9050602002016020810190610a7f919061376c565b604051630ff6b5a760e31b81526001600160a01b038e811660048301529190911690637fb5ad38906024016020604051808303816000875af1158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190613ba1565b90505b80848381518110610b0357610b036139ee565b60200260200101511015610b175780610b32565b838281518110610b2957610b296139ee565b60200260200101515b848381518110610b4457610b446139ee565b602002602001018181525050898983818110610b6257610b626139ee565b9050602002016020810190610b77919061376c565b604051633bd73ee360e21b81526001600160a01b038e81166004830152919091169063ef5cfb8c90602401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b50505050898983818110610be657610be66139ee565b9050602002016020810190610bfb919061376c565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c9190613adb565b858381518110610c6e57610c6e6139ee565b6001600160a01b03909216602092830291909101909101525080610c9181613ac0565b91505061097e565b5087878484838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929a5093985091965050505050505096509650969350505050565b6040805160a0810182526000808252602082018190529181018290526060808201526080810182905260008060009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8e9190810190613933565b91505060005b8151811015611107576000828281518110610db157610db16139ee565b6020026020010151604001519050806001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e219190613adb565b84604001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ea49190810190613af8565b606085015260005b8460600151518110156110f2576000805b8951811015610f455786606001518381518110610edc57610edc6139ee565b60200260200101516001600160a01b03168a8281518110610eff57610eff6139ee565b60200260200101516001600160a01b03161415610f3357888181518110610f2857610f286139ee565b602002602001015191505b80610f3d81613ac0565b915050610ebd565b50670de0b6b3a764000086604001516001600160a01b031663fc57d4df88606001518581518110610f7857610f786139ee565b60200260200101516040518263ffffffff1660e01b8152600401610fab91906001600160a01b0391909116815260200190565b602060405180830381865afa158015610fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fec9190613ba1565b87606001518481518110611002576110026139ee565b6020908102919091010151604051633af9e66960e01b81526001600160a01b038f8116600483015290911690633af9e66990602401602060405180830381865afa158015611054573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110789190613ba1565b6110829190613bba565b61108c9190613bef565b8651879061109b908390613c1d565b905250606086015180516110ca918d91859081106110bb576110bb6139ee565b6020026020010151838d611c9e565b866020018181516110db9190613c1d565b9052508190506110ea81613ac0565b915050610eac565b505080806110ff90613ac0565b915050610d94565b50815161111957600092505050611141565b8151602083015161113290670de0b6b3a7640000613c5e565b61113c9190613bef565b925050505b949350505050565b60606000805b835181101561128c57600084828151811061116c5761116c6139ee565b6020026020010151905060006001600160a01b0316836001600160a01b031614156111fa57806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f39190613adb565b9250611279565b826001600160a01b0316816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190613adb565b6001600160a01b03161461127957600080fd5b508061128481613ac0565b91505061114f565b506112978382611ea8565b9392505050565b606080606084516001600160401b038111156112bc576112bc613251565b6040519080825280602002602001820160405280156112e5578160200160208202803683370190505b50905084516001600160401b0381111561130157611301613251565b60405190808252806020026020018201604052801561132a578160200160208202803683370190505b50915060005b85518110156116505760005b875181101561151f576000888281518110611359576113596139ee565b602002602001015190506000878481518110611377576113776139ee565b60200260200101511561141d57888481518110611396576113966139ee565b6020908102919091010151604051632e6f912b60e21b81526001600160a01b0384811660048301528d811660248301529091169063b9be44ac906044016020604051808303816000875af11580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190613ba1565b90506114aa565b88848151811061142f5761142f6139ee565b6020908102919091010151604051630ff6b5a760e31b81526001600160a01b038d8116600483015290911690637fb5ad38906024016020604051808303816000875af1158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190613ba1565b90505b808585815181106114bd576114bd6139ee565b602002602001015110156114d157806114ec565b8484815181106114e3576114e36139ee565b60200260200101515b8585815181106114fe576114fe6139ee565b6020026020010181815250505050808061151790613ac0565b91505061133c565b50858181518110611532576115326139ee565b6020908102919091010151604051633bd73ee360e21b81526001600160a01b038a811660048301529091169063ef5cfb8c90602401600060405180830381600087803b15801561158157600080fd5b505af1158015611595573d6000803e3d6000fd5b505050508581815181106115ab576115ab6139ee565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116149190613adb565b838281518110611626576116266139ee565b6001600160a01b03909216602092830291909101909101528061164881613ac0565b915050611330565b5093969095509293505050565b606080600061166a610204565b9050600081516001600160401b0381111561168757611687613251565b6040519080825280602002602001820160405280156116b0578160200160208202803683370190505b50905060005b8251811015611711576116e2868483815181106116d5576116d56139ee565b602002602001015161171c565b8282815181106116f4576116f46139ee565b60209081029190910101528061170981613ac0565b9150506116b6565b509094909350915050565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918416906370a0823190602401602060405180830381865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b9190613ba1565b905060008060009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa1580156117e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118099190810190613933565b91505060005b8151811015611ba357600082828151811061182c5761182c6139ee565b602002602001015160400151905060606000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118a49190810190613af8565b905080516001600160401b038111156118bf576118bf613251565b6040519080825280602002602001820160405280156118e8578160200160208202803683370190505b50915060005b815181101561194d57818181518110611909576119096139ee565b6020026020010151838281518110611923576119236139ee565b6001600160a01b03909216602092830291909101909101528061194581613ac0565b9150506118ee565b50506000826001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa15801561198f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119b79190810190613a04565b905060005b8151811015611b8c5760008282815181106119d9576119d96139ee565b60200260200101519050896001600160a01b0316816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190613adb565b6001600160a01b03161415611b795760005b8451811015611b1c57816001600160a01b031663b9be44ac868381518110611a8b57611a8b6139ee565b60200260200101518e6040518363ffffffff1660e01b8152600401611ac69291906001600160a01b0392831681529116602082015260400190565b6020604051808303816000875af1158015611ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b099190613ba1565b5080611b1481613ac0565b915050611a61565b50604051633bd73ee360e21b81526001600160a01b038c8116600483015282169063ef5cfb8c90602401600060405180830381600087803b158015611b6057600080fd5b505af1158015611b74573d6000803e3d6000fd5b505050505b5080611b8481613ac0565b9150506119bc565b505050508080611b9b90613ac0565b91505061180f565b506040516370a0823160e01b81526001600160a01b038681166004830152600091908616906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c129190613ba1565b9050611c1e8382613ce3565b9695505050505050565b60606000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c929190810190613af8565b90506112978184611ea8565b600080846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d039190613adb565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d699190613adb565b9050600085611d7989898861266b565b611d82896129fe565b611d8c9190613c1d565b611d969190613c1d565b60405163fc57d4df60e01b81526001600160a01b0389811660048301529192506ec097ce7bc90715b34b9f10000000009184169063fc57d4df90602401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e149190613ba1565b604051633af9e66960e01b81526001600160a01b038b811660048301528a1690633af9e66990602401602060405180830381865afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e9190613ba1565b611e889084613c5e565b611e929190613c5e565b611e9c9190613bef565b98975050505050505050565b60606001600160a01b0382161580611ebf57508251155b15611f11576040805160008082526020820190925290611f09565b60408051606080820183526000808352602083015291810191909152815260200190600190039081611eda5790505b5090506101fe565b6000826001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f799190810190613a04565b9050600081516001600160401b03811115611f9657611f96613251565b604051908082528060200260200182016040528015611fbf578160200160208202803683370190505b509050600082516001600160401b03811115611fdd57611fdd613251565b604051908082528060200260200182016040528015612006578160200160208202803683370190505b509050600083516001600160401b0381111561202457612024613251565b60405190808252806020026020018201604052801561204d578160200160208202803683370190505b5090506000866001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190613adb565b9050600088516001600160401b038111156120d1576120d1613251565b60405190808252806020026020018201604052801561211e57816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816120ef5790505b50905060005b895181101561265e57600087516001600160401b0381111561214857612148613251565b6040519080825280602002602001820160405280156121bd57816020015b6121aa6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152602001906001900390816121665790505b50905060008b83815181106121d4576121d46139ee565b602002602001015190506000856001600160a01b031663aea91078836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122519190613adb565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b99190613ba1565b90508361248c5760005b8a5181101561248a5760008b82815181106122e0576122e06139ee565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123499190613adb565b9050808b838151811061235e5761235e6139ee565b6001600160a01b0392831660209182029290920101526040516315d5220f60e31b815282821660048201529089169063aea9107890602401602060405180830381865afa1580156123b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d79190613ba1565b8a83815181106123e9576123e96139ee565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124579190613cfa565b60ff1689838151811061246c5761246c6139ee565b6020908102919091010152508061248281613ac0565b9150506122c3565b505b60005b8a518110156126065760008b82815181106124ac576124ac6139ee565b6020026020010151905060006124dc82868c86815181106124cf576124cf6139ee565b6020026020010151612d8a565b90506000612566828d86815181106124f6576124f66139ee565b602002602001015187896001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125619190613ba1565b612f46565b90506040518060a001604052808381526020018d868151811061258b5761258b6139ee565b60200260200101518152602001828152602001846001600160a01b031681526020018e86815181106125bf576125bf6139ee565b60200260200101516001600160a01b03168152508785815181106125e5576125e56139ee565b602002602001018190525050505080806125fe90613ac0565b91505061248f565b506040518060600160405280828152602001836001600160a01b031681526020018481525085858151811061263d5761263d6139ee565b6020026020010181905250505050808061265690613ac0565b915050612124565b5098975050505050505050565b6040516305eff7ef60e21b81526001600160a01b03848116600483015260009182918516906317bfdfbc90602401602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190613ba1565b604051633af9e66960e01b81526001600160a01b038781166004830152919250600091861690633af9e66990602401602060405180830381865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190613ba1565b90506000856001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190613ba1565b90506000866001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128169190613ba1565b90506000876001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c9190613adb565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e29190613adb565b60405163fc57d4df60e01b81526001600160a01b038b8116600483015291925060009183169063fc57d4df90602401602060405180830381865afa15801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190613ba1565b90506000670de0b6b3a76400006129698389613bba565b6129739190613d1d565b90506000670de0b6b3a764000061298a848b613bba565b6129949190613d1d565b905060006129a28884613bba565b905060006129b08884613bba565b9050836129cb5760009b505050505050505050505050611297565b838d6129d78385613d31565b6129e19190613c5e565b6129eb9190613bef565b9f9e505050505050505050505050505050565b600080826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a639190613adb565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac99190613adb565b60405163fc57d4df60e01b81526001600160a01b03868116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b399190613ba1565b90506000836001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015612b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ba39190810190613a04565b905060005b8151811015612d80576000828281518110612bc557612bc56139ee565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c339190613adb565b90506000612ca6838b846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9e9190613cfa565b60ff16612d8a565b6040516315d5220f60e31b81526001600160a01b038481166004830152919250600091612d5b9184918b169063aea9107890602401602060405180830381865afa158015612cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1c9190613ba1565b898e6001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d6000803e3d6000fd5b9050612d67818b613c1d565b9950505050508080612d7890613ac0565b915050612ba8565b5050505050919050565b60405163dde684a560e01b81526001600160a01b03808416600483015260009184918391829188169063dde684a59060240160408051808303816000875af1158015612dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfe9190613d70565b604051632e6f912b60e21b81526001600160a01b038681166004830152600060248301529294509092509088169063b9be44ac906044016020604051808303816000875af1158015612e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e789190613ba1565b5060405163dde684a560e01b81526001600160a01b03848116600483015260009182918a169063dde684a59060240160408051808303816000875af1158015612ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee99190613d70565b915091508263ffffffff168163ffffffff161115612f3a57612f0b8382613db4565b63ffffffff16612f2d612f1e8685613dd9565b6001600160e01b031689612fb3565b612f379190613d1d565b95505b50505050509392505050565b600084612f5557506000611141565b6000612f618587613bba565b90506000612f73826301e187e0613bba565b90506000612f818683613d1d565b90506000612f9782670de0b6b3a7640000613bba565b90506000612fa58783613d1d565b9a9950505050505050505050565b60006012821115612fe357612fc9601283613ce3565b612fd490600a613edd565b612fde9084613d1d565b611297565b612fee826012613ce3565b612ff990600a613edd565b6112979084613bba565b6001600160a01b038116811461301857600080fd5b50565b6000806040838503121561302e57600080fd5b823561303981613003565b946020939093013593505050565b600081518084526020808501945080840160005b838110156130805781516001600160a01b03168752958201959082019060010161305b565b509495945050505050565b6020815260006112976020830184613047565b600080604083850312156130b157600080fd5b82356130bc81613003565b915060208301356130cc81613003565b809150509250929050565b600081518084526020808501945080840160005b83811015613080578151875295820195908201906001016130eb565b606080825284519082018190526000906020906080840190828801845b828110156131495781516001600160a01b031684529284019290840190600101613124565b5050508381038285015261315d8187613047565b9150508281036040840152611c1e81856130d7565b60008083601f84011261318457600080fd5b5081356001600160401b0381111561319b57600080fd5b6020830191508360208260051b85010111156131b657600080fd5b9250929050565b600080600080600080608087890312156131d657600080fd5b86356131e181613003565b955060208701356131f181613003565b945060408701356001600160401b038082111561320d57600080fd5b6132198a838b01613172565b9096509450606089013591508082111561323257600080fd5b5061323f89828a01613172565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561328957613289613251565b60405290565b604051601f8201601f191681016001600160401b03811182821017156132b7576132b7613251565b604052919050565b60006001600160401b038211156132d8576132d8613251565b5060051b60200190565b600082601f8301126132f357600080fd5b81356020613308613303836132bf565b61328f565b82815260059290921b8401810191818101908684111561332757600080fd5b8286015b84811015613342578035835291830191830161332b565b509695505050505050565b6000806000806080858703121561336357600080fd5b843561336e81613003565b9350602085810135935060408601356001600160401b038082111561339257600080fd5b818801915088601f8301126133a657600080fd5b81356133b4613303826132bf565b81815260059190911b8301840190848101908b8311156133d357600080fd5b938501935b828510156133fa5784356133eb81613003565b825293850193908501906133d8565b96505050606088013592508083111561341257600080fd5b5050613420878288016132e2565b91505092959194509250565b6000602080838503121561343f57600080fd5b82356001600160401b0381111561345557600080fd5b8301601f8101851361346657600080fd5b8035613474613303826132bf565b81815260059190911b8201830190838101908783111561349357600080fd5b928401925b828410156134ba5783356134ab81613003565b82529284019290840190613498565b979650505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561359557888303603f19018552815180518452878101516001600160a01b03908116898601529087015160608886018190528151818701819052918a019290916080918288019160005b8181101561357d578651805185528e8101518f8601528d8101518e86015286810151841687860152850151831685850152958d019560a09093019260010161353a565b505050978a01979550505091870191506001016134ec565b509098975050505050505050565b600082601f8301126135b457600080fd5b813560206135c4613303836132bf565b82815260059290921b840181019181810190868411156135e357600080fd5b8286015b848110156133425780356135fa81613003565b83529183019183016135e7565b8035801515811461361757600080fd5b919050565b600082601f83011261362d57600080fd5b8135602061363d613303836132bf565b82815260059290921b8401810191818101908684111561365c57600080fd5b8286015b848110156133425761367181613607565b8352918301918301613660565b6000806000806080858703121561369457600080fd5b843561369f81613003565b93506020858101356001600160401b03808211156136bc57600080fd5b818801915088601f8301126136d057600080fd5b81356136de613303826132bf565b81815260059190911b8301840190848101908b8311156136fd57600080fd5b938501935b8285101561372457843561371581613003565b82529385019390850190613702565b97505050604088013592508083111561373c57600080fd5b61374889848a016135a3565b9450606088013592508083111561375e57600080fd5b50506134208782880161361c565b60006020828403121561377e57600080fd5b813561129781613003565b60408152600061379c6040830185613047565b82810360208401526137ae81856130d7565b95945050505050565b805161361781613003565b6000601f83818401126137d457600080fd5b825160206137e4613303836132bf565b82815260059290921b8501810191818101908784111561380357600080fd5b8287015b848110156139275780516001600160401b03808211156138275760008081fd5b9089019060a0601f19838d0381018213156138425760008081fd5b61384a613267565b888501518481111561385c5760008081fd5b8501603f81018f1361386e5760008081fd5b898101518581111561388257613882613251565b6138918b858f8401160161328f565b9550808652604093508f848284010111156138ac5760008081fd5b60005b818110156138ca578281018501518782018d01528b016138af565b818111156138db5760008c83890101525b5050508381526138ec8286016137b7565b89820152606093506138ff8486016137b7565b9181019190915260808481015193820193909352920151908201528352918301918301613807565b50979650505050505050565b6000806040838503121561394657600080fd5b82516001600160401b038082111561395d57600080fd5b818501915085601f83011261397157600080fd5b81516020613981613303836132bf565b82815260059290921b840181019181810190898411156139a057600080fd5b948201945b838610156139be578551825294820194908201906139a5565b918801519196509093505050808211156139d757600080fd5b506139e4858286016137c2565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b60006020808385031215613a1757600080fd5b82516001600160401b03811115613a2d57600080fd5b8301601f81018513613a3e57600080fd5b8051613a4c613303826132bf565b81815260059190911b82018301908381019087831115613a6b57600080fd5b928401925b828410156134ba578351613a8381613003565b82529284019290840190613a70565b634e487b7160e01b600052601160045260246000fd5b60008219821115613abb57613abb613a92565b500190565b6000600019821415613ad457613ad4613a92565b5060010190565b600060208284031215613aed57600080fd5b815161129781613003565b60006020808385031215613b0b57600080fd5b82516001600160401b03811115613b2157600080fd5b8301601f81018513613b3257600080fd5b8051613b40613303826132bf565b81815260059190911b82018301908381019087831115613b5f57600080fd5b928401925b828410156134ba578351613b7781613003565b82529284019290840190613b64565b600060208284031215613b9857600080fd5b61129782613607565b600060208284031215613bb357600080fd5b5051919050565b6000816000190483118215151615613bd457613bd4613a92565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613bfe57613bfe613bd9565b600160ff1b821460001984141615613c1857613c18613a92565b500590565b600080821280156001600160ff1b0384900385131615613c3f57613c3f613a92565b600160ff1b8390038412811615613c5857613c58613a92565b50500190565b60006001600160ff1b0381841382841380821686840486111615613c8457613c84613a92565b600160ff1b6000871282811687830589121615613ca357613ca3613a92565b60008712925087820587128484161615613cbf57613cbf613a92565b87850587128184161615613cd557613cd5613a92565b505050929093029392505050565b600082821015613cf557613cf5613a92565b500390565b600060208284031215613d0c57600080fd5b815160ff8116811461129757600080fd5b600082613d2c57613d2c613bd9565b500490565b60008083128015600160ff1b850184121615613d4f57613d4f613a92565b6001600160ff1b0384018313811615613d6a57613d6a613a92565b50500390565b60008060408385031215613d8357600080fd5b82516001600160e01b0381168114613d9a57600080fd5b602084015190925063ffffffff811681146130cc57600080fd5b600063ffffffff83811690831681811015613dd157613dd1613a92565b039392505050565b60006001600160e01b0383811690831681811015613dd157613dd1613a92565b600181815b80851115613e34578160001904821115613e1a57613e1a613a92565b80851615613e2757918102915b93841c9390800290613dfe565b509250929050565b600082613e4b575060016101fe565b81613e58575060006101fe565b8160018114613e6e5760028114613e7857613e94565b60019150506101fe565b60ff841115613e8957613e89613a92565b50506001821b6101fe565b5060208310610133831016604e8410600b8410161715613eb7575081810a6101fe565b613ec18383613df9565b8060001904821115613ed557613ed5613a92565b029392505050565b60006112978383613e3c56fea164736f6c634300080a000a", + "sourceMap": "633:15270:178:-:0;;;699:53;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;737:3;:10;;-1:-1:-1;;;;;;737:10:178;-1:-1:-1;;;;;737:10:178;;;;;;;;;;633:15270;;14:312:504;106:6;159:2;147:9;138:7;134:23;130:32;127:52;;;175:1;172;165:12;127:52;201:16;;-1:-1:-1;;;;;246:31:504;;236:42;;226:70;;292:1;289;282:12;226:70;315:5;14:312;-1:-1:-1;;;14:312:504:o;:::-;633:15270:178;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100a95760003560e01c80637e70aa49116100715780637e70aa49146101315780638260a696146101515780639cf1fd5314610164578063bdfc183914610185578063d1040bae14610198578063de858c63146101ab57600080fd5b80630d9d7fdc146100ae57806312edb24c146100d45780633610c407146100e95780634f471e6d1461010b5780637d3cab4c1461011e575b600080fd5b6100c16100bc36600461301b565b6101d6565b6040519081526020015b60405180910390f35b6100dc610204565b6040516100cb919061308b565b6100fc6100f736600461309e565b610630565b6040516100cb93929190613107565b6100fc6101193660046131bd565b6108ee565b6100c161012c36600461334d565b610ce9565b61014461013f36600461342c565b611149565b6040516100cb91906134c5565b6100fc61015f36600461367e565b61129e565b61017761017236600461376c565b61165d565b6040516100cb929190613789565b6100c161019336600461309e565b61171c565b6101446101a636600461376c565b611c28565b6000546101be906001600160a01b031681565b6040516001600160a01b0390911681526020016100cb565b60408051600080825260208201818152828401909352916101f985858484610ce9565b925050505b92915050565b60008054604080516323b020d560e21b81529051606093926001600160a01b031691638ec0835491600480830192869291908290030181865afa15801561024f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526102779190810190613933565b915060009050805b825181101561033857600083828151811061029c5761029c6139ee565b60200260200101516040015190506000816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156102ea573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526103129190810190613a04565b90508051846103219190613aa8565b93505050808061033090613ac0565b91505061027f565b506000816001600160401b0381111561035357610353613251565b60405190808252806020026020018201604052801561037c578160200160208202803683370190505b5090506000805b84518110156105825760008582815181106103a0576103a06139ee565b60200260200101516040015190506000816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103ee573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526104169190810190613a04565b905060005b815181101561056c576000828281518110610438576104386139ee565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561047d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a19190613adb565b90506001600160a01b0381166104b7575061056c565b6000805b8851811015610512578881815181106104d6576104d66139ee565b60200260200101516001600160a01b0316836001600160a01b031614156105005760019150610512565b8061050a81613ac0565b9150506104bb565b50806105575781888861052481613ac0565b995081518110610536576105366139ee565b60200260200101906001600160a01b031690816001600160a01b0316815250505b5050808061056490613ac0565b91505061041b565b505050808061057a90613ac0565b915050610383565b50806001600160401b0381111561059b5761059b613251565b6040519080825280602002602001820160405280156105c4578160200160208202803683370190505b50945060005b81811015610628578281815181106105e4576105e46139ee565b60200260200101518682815181106105fe576105fe6139ee565b6001600160a01b03909216602092830291909101909101528061062081613ac0565b9150506105ca565b505050505090565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610675573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261069d9190810190613af8565b9050600081516001600160401b038111156106ba576106ba613251565b6040519080825280602002602001820160405280156106e3578160200160208202803683370190505b5090506000866001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015610726573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261074e9190810190613a04565b9050600081516001600160401b0381111561076b5761076b613251565b604051908082528060200260200182016040528015610794578160200160208202803683370190505b509050600082516001600160401b038111156107b2576107b2613251565b6040519080825280602002602001820160405280156107db578160200160208202803683370190505b50905060005b835181101561086c578381815181106107fc576107fc6139ee565b6020026020010151838281518110610816576108166139ee565b60200260200101906001600160a01b031690816001600160a01b031681525050600182828151811061084a5761084a6139ee565b911515602092830291909101909101528061086481613ac0565b9150506107e1565b5060005b85518110156108cf5785818151811061088b5761088b6139ee565b60200260200101518582815181106108a5576108a56139ee565b6001600160a01b0390921660209283029190910190910152806108c781613ac0565b915050610870565b506108dc8a85848461129e565b97509750975050505050509250925092565b6060808085806001600160401b0381111561090b5761090b613251565b604051908082528060200260200182016040528015610934578160200160208202803683370190505b509150806001600160401b0381111561094f5761094f613251565b604051908082528060200260200182016040528015610978578160200160208202803683370190505b50925060005b81811015610c9957600087878381811061099a5761099a6139ee565b90506020020160208101906109af9190613b86565b15610a58578989838181106109c6576109c66139ee565b90506020020160208101906109db919061376c565b604051632e6f912b60e21b81526001600160a01b038d811660048301528e81166024830152919091169063b9be44ac906044016020604051808303816000875af1158015610a2d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a519190613ba1565b9050610af0565b898983818110610a6a57610a6a6139ee565b9050602002016020810190610a7f919061376c565b604051630ff6b5a760e31b81526001600160a01b038e811660048301529190911690637fb5ad38906024016020604051808303816000875af1158015610ac9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610aed9190613ba1565b90505b80848381518110610b0357610b036139ee565b60200260200101511015610b175780610b32565b838281518110610b2957610b296139ee565b60200260200101515b848381518110610b4457610b446139ee565b602002602001018181525050898983818110610b6257610b626139ee565b9050602002016020810190610b77919061376c565b604051633bd73ee360e21b81526001600160a01b038e81166004830152919091169063ef5cfb8c90602401600060405180830381600087803b158015610bbc57600080fd5b505af1158015610bd0573d6000803e3d6000fd5b50505050898983818110610be657610be66139ee565b9050602002016020810190610bfb919061376c565b6001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c38573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c5c9190613adb565b858381518110610c6e57610c6e6139ee565b6001600160a01b03909216602092830291909101909101525080610c9181613ac0565b91505061097e565b5087878484838380806020026020016040519081016040528093929190818152602001838360200280828437600092019190915250929a5093985091965050505050505096509650969350505050565b6040805160a0810182526000808252602082018190529181018290526060808201526080810182905260008060009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d66573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d8e9190810190613933565b91505060005b8151811015611107576000828281518110610db157610db16139ee565b6020026020010151604001519050806001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610dfd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e219190613adb565b84604001906001600160a01b031690816001600160a01b031681525050806001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610e7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ea49190810190613af8565b606085015260005b8460600151518110156110f2576000805b8951811015610f455786606001518381518110610edc57610edc6139ee565b60200260200101516001600160a01b03168a8281518110610eff57610eff6139ee565b60200260200101516001600160a01b03161415610f3357888181518110610f2857610f286139ee565b602002602001015191505b80610f3d81613ac0565b915050610ebd565b50670de0b6b3a764000086604001516001600160a01b031663fc57d4df88606001518581518110610f7857610f786139ee565b60200260200101516040518263ffffffff1660e01b8152600401610fab91906001600160a01b0391909116815260200190565b602060405180830381865afa158015610fc8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fec9190613ba1565b87606001518481518110611002576110026139ee565b6020908102919091010151604051633af9e66960e01b81526001600160a01b038f8116600483015290911690633af9e66990602401602060405180830381865afa158015611054573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110789190613ba1565b6110829190613bba565b61108c9190613bef565b8651879061109b908390613c1d565b905250606086015180516110ca918d91859081106110bb576110bb6139ee565b6020026020010151838d611c9e565b866020018181516110db9190613c1d565b9052508190506110ea81613ac0565b915050610eac565b505080806110ff90613ac0565b915050610d94565b50815161111957600092505050611141565b8151602083015161113290670de0b6b3a7640000613c5e565b61113c9190613bef565b925050505b949350505050565b60606000805b835181101561128c57600084828151811061116c5761116c6139ee565b6020026020010151905060006001600160a01b0316836001600160a01b031614156111fa57806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111cf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111f39190613adb565b9250611279565b826001600160a01b0316816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611242573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112669190613adb565b6001600160a01b03161461127957600080fd5b508061128481613ac0565b91505061114f565b506112978382611ea8565b9392505050565b606080606084516001600160401b038111156112bc576112bc613251565b6040519080825280602002602001820160405280156112e5578160200160208202803683370190505b50905084516001600160401b0381111561130157611301613251565b60405190808252806020026020018201604052801561132a578160200160208202803683370190505b50915060005b85518110156116505760005b875181101561151f576000888281518110611359576113596139ee565b602002602001015190506000878481518110611377576113776139ee565b60200260200101511561141d57888481518110611396576113966139ee565b6020908102919091010151604051632e6f912b60e21b81526001600160a01b0384811660048301528d811660248301529091169063b9be44ac906044016020604051808303816000875af11580156113f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114169190613ba1565b90506114aa565b88848151811061142f5761142f6139ee565b6020908102919091010151604051630ff6b5a760e31b81526001600160a01b038d8116600483015290911690637fb5ad38906024016020604051808303816000875af1158015611483573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114a79190613ba1565b90505b808585815181106114bd576114bd6139ee565b602002602001015110156114d157806114ec565b8484815181106114e3576114e36139ee565b60200260200101515b8585815181106114fe576114fe6139ee565b6020026020010181815250505050808061151790613ac0565b91505061133c565b50858181518110611532576115326139ee565b6020908102919091010151604051633bd73ee360e21b81526001600160a01b038a811660048301529091169063ef5cfb8c90602401600060405180830381600087803b15801561158157600080fd5b505af1158015611595573d6000803e3d6000fd5b505050508581815181106115ab576115ab6139ee565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156115f0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116149190613adb565b838281518110611626576116266139ee565b6001600160a01b03909216602092830291909101909101528061164881613ac0565b915050611330565b5093969095509293505050565b606080600061166a610204565b9050600081516001600160401b0381111561168757611687613251565b6040519080825280602002602001820160405280156116b0578160200160208202803683370190505b50905060005b8251811015611711576116e2868483815181106116d5576116d56139ee565b602002602001015161171c565b8282815181106116f4576116f46139ee565b60209081029190910101528061170981613ac0565b9150506116b6565b509094909350915050565b6040516370a0823160e01b81526001600160a01b03838116600483015260009182918416906370a0823190602401602060405180830381865afa158015611767573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061178b9190613ba1565b905060008060009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa1580156117e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118099190810190613933565b91505060005b8151811015611ba357600082828151811061182c5761182c6139ee565b602002602001015160400151905060606000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa15801561187c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118a49190810190613af8565b905080516001600160401b038111156118bf576118bf613251565b6040519080825280602002602001820160405280156118e8578160200160208202803683370190505b50915060005b815181101561194d57818181518110611909576119096139ee565b6020026020010151838281518110611923576119236139ee565b6001600160a01b03909216602092830291909101909101528061194581613ac0565b9150506118ee565b50506000826001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa15801561198f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526119b79190810190613a04565b905060005b8151811015611b8c5760008282815181106119d9576119d96139ee565b60200260200101519050896001600160a01b0316816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a4f9190613adb565b6001600160a01b03161415611b795760005b8451811015611b1c57816001600160a01b031663b9be44ac868381518110611a8b57611a8b6139ee565b60200260200101518e6040518363ffffffff1660e01b8152600401611ac69291906001600160a01b0392831681529116602082015260400190565b6020604051808303816000875af1158015611ae5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b099190613ba1565b5080611b1481613ac0565b915050611a61565b50604051633bd73ee360e21b81526001600160a01b038c8116600483015282169063ef5cfb8c90602401600060405180830381600087803b158015611b6057600080fd5b505af1158015611b74573d6000803e3d6000fd5b505050505b5080611b8481613ac0565b9150506119bc565b505050508080611b9b90613ac0565b91505061180f565b506040516370a0823160e01b81526001600160a01b038681166004830152600091908616906370a0823190602401602060405180830381865afa158015611bee573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c129190613ba1565b9050611c1e8382613ce3565b9695505050505050565b60606000826001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c6a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c929190810190613af8565b90506112978184611ea8565b600080846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cdf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d039190613adb565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d45573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d699190613adb565b9050600085611d7989898861266b565b611d82896129fe565b611d8c9190613c1d565b611d969190613c1d565b60405163fc57d4df60e01b81526001600160a01b0389811660048301529192506ec097ce7bc90715b34b9f10000000009184169063fc57d4df90602401602060405180830381865afa158015611df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e149190613ba1565b604051633af9e66960e01b81526001600160a01b038b811660048301528a1690633af9e66990602401602060405180830381865afa158015611e5a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e7e9190613ba1565b611e889084613c5e565b611e929190613c5e565b611e9c9190613bef565b98975050505050505050565b60606001600160a01b0382161580611ebf57508251155b15611f11576040805160008082526020820190925290611f09565b60408051606080820183526000808352602083015291810191909152815260200190600190039081611eda5790505b5090506101fe565b6000826001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f51573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f799190810190613a04565b9050600081516001600160401b03811115611f9657611f96613251565b604051908082528060200260200182016040528015611fbf578160200160208202803683370190505b509050600082516001600160401b03811115611fdd57611fdd613251565b604051908082528060200260200182016040528015612006578160200160208202803683370190505b509050600083516001600160401b0381111561202457612024613251565b60405190808252806020026020018201604052801561204d578160200160208202803683370190505b5090506000866001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612090573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120b49190613adb565b9050600088516001600160401b038111156120d1576120d1613251565b60405190808252806020026020018201604052801561211e57816020015b604080516060808201835260008083526020830152918101919091528152602001906001900390816120ef5790505b50905060005b895181101561265e57600087516001600160401b0381111561214857612148613251565b6040519080825280602002602001820160405280156121bd57816020015b6121aa6040518060a0016040528060008152602001600081526020016000815260200160006001600160a01b0316815260200160006001600160a01b031681525090565b8152602001906001900390816121665790505b50905060008b83815181106121d4576121d46139ee565b602002602001015190506000856001600160a01b031663aea91078836001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561222d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122519190613adb565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa158015612295573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122b99190613ba1565b90508361248c5760005b8a5181101561248a5760008b82815181106122e0576122e06139ee565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612325573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123499190613adb565b9050808b838151811061235e5761235e6139ee565b6001600160a01b0392831660209182029290920101526040516315d5220f60e31b815282821660048201529089169063aea9107890602401602060405180830381865afa1580156123b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123d79190613ba1565b8a83815181106123e9576123e96139ee565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612433573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124579190613cfa565b60ff1689838151811061246c5761246c6139ee565b6020908102919091010152508061248281613ac0565b9150506122c3565b505b60005b8a518110156126065760008b82815181106124ac576124ac6139ee565b6020026020010151905060006124dc82868c86815181106124cf576124cf6139ee565b6020026020010151612d8a565b90506000612566828d86815181106124f6576124f66139ee565b602002602001015187896001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125619190613ba1565b612f46565b90506040518060a001604052808381526020018d868151811061258b5761258b6139ee565b60200260200101518152602001828152602001846001600160a01b031681526020018e86815181106125bf576125bf6139ee565b60200260200101516001600160a01b03168152508785815181106125e5576125e56139ee565b602002602001018190525050505080806125fe90613ac0565b91505061248f565b506040518060600160405280828152602001836001600160a01b031681526020018481525085858151811061263d5761263d6139ee565b6020026020010181905250505050808061265690613ac0565b915050612124565b5098975050505050505050565b6040516305eff7ef60e21b81526001600160a01b03848116600483015260009182918516906317bfdfbc90602401602060405180830381865afa1580156126b6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126da9190613ba1565b604051633af9e66960e01b81526001600160a01b038781166004830152919250600091861690633af9e66990602401602060405180830381865afa158015612726573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061274a9190613ba1565b90506000856001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561278c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127b09190613ba1565b90506000866001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156127f2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128169190613ba1565b90506000876001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612858573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061287c9190613adb565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156128be573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128e29190613adb565b60405163fc57d4df60e01b81526001600160a01b038b8116600483015291925060009183169063fc57d4df90602401602060405180830381865afa15801561292e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129529190613ba1565b90506000670de0b6b3a76400006129698389613bba565b6129739190613d1d565b90506000670de0b6b3a764000061298a848b613bba565b6129949190613d1d565b905060006129a28884613bba565b905060006129b08884613bba565b9050836129cb5760009b505050505050505050505050611297565b838d6129d78385613d31565b6129e19190613c5e565b6129eb9190613bef565b9f9e505050505050505050505050505050565b600080826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a3f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a639190613adb565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612aa5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ac99190613adb565b60405163fc57d4df60e01b81526001600160a01b03868116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015612b15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b399190613ba1565b90506000836001600160a01b0316634a76e7276040518163ffffffff1660e01b8152600401600060405180830381865afa158015612b7b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612ba39190810190613a04565b905060005b8151811015612d80576000828281518110612bc557612bc56139ee565b602002602001015190506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c339190613adb565b90506000612ca6838b846001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612c7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c9e9190613cfa565b60ff16612d8a565b6040516315d5220f60e31b81526001600160a01b038481166004830152919250600091612d5b9184918b169063aea9107890602401602060405180830381865afa158015612cf8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d1c9190613ba1565b898e6001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561253d573d6000803e3d6000fd5b9050612d67818b613c1d565b9950505050508080612d7890613ac0565b915050612ba8565b5050505050919050565b60405163dde684a560e01b81526001600160a01b03808416600483015260009184918391829188169063dde684a59060240160408051808303816000875af1158015612dda573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612dfe9190613d70565b604051632e6f912b60e21b81526001600160a01b038681166004830152600060248301529294509092509088169063b9be44ac906044016020604051808303816000875af1158015612e54573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e789190613ba1565b5060405163dde684a560e01b81526001600160a01b03848116600483015260009182918a169063dde684a59060240160408051808303816000875af1158015612ec5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ee99190613d70565b915091508263ffffffff168163ffffffff161115612f3a57612f0b8382613db4565b63ffffffff16612f2d612f1e8685613dd9565b6001600160e01b031689612fb3565b612f379190613d1d565b95505b50505050509392505050565b600084612f5557506000611141565b6000612f618587613bba565b90506000612f73826301e187e0613bba565b90506000612f818683613d1d565b90506000612f9782670de0b6b3a7640000613bba565b90506000612fa58783613d1d565b9a9950505050505050505050565b60006012821115612fe357612fc9601283613ce3565b612fd490600a613edd565b612fde9084613d1d565b611297565b612fee826012613ce3565b612ff990600a613edd565b6112979084613bba565b6001600160a01b038116811461301857600080fd5b50565b6000806040838503121561302e57600080fd5b823561303981613003565b946020939093013593505050565b600081518084526020808501945080840160005b838110156130805781516001600160a01b03168752958201959082019060010161305b565b509495945050505050565b6020815260006112976020830184613047565b600080604083850312156130b157600080fd5b82356130bc81613003565b915060208301356130cc81613003565b809150509250929050565b600081518084526020808501945080840160005b83811015613080578151875295820195908201906001016130eb565b606080825284519082018190526000906020906080840190828801845b828110156131495781516001600160a01b031684529284019290840190600101613124565b5050508381038285015261315d8187613047565b9150508281036040840152611c1e81856130d7565b60008083601f84011261318457600080fd5b5081356001600160401b0381111561319b57600080fd5b6020830191508360208260051b85010111156131b657600080fd5b9250929050565b600080600080600080608087890312156131d657600080fd5b86356131e181613003565b955060208701356131f181613003565b945060408701356001600160401b038082111561320d57600080fd5b6132198a838b01613172565b9096509450606089013591508082111561323257600080fd5b5061323f89828a01613172565b979a9699509497509295939492505050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561328957613289613251565b60405290565b604051601f8201601f191681016001600160401b03811182821017156132b7576132b7613251565b604052919050565b60006001600160401b038211156132d8576132d8613251565b5060051b60200190565b600082601f8301126132f357600080fd5b81356020613308613303836132bf565b61328f565b82815260059290921b8401810191818101908684111561332757600080fd5b8286015b84811015613342578035835291830191830161332b565b509695505050505050565b6000806000806080858703121561336357600080fd5b843561336e81613003565b9350602085810135935060408601356001600160401b038082111561339257600080fd5b818801915088601f8301126133a657600080fd5b81356133b4613303826132bf565b81815260059190911b8301840190848101908b8311156133d357600080fd5b938501935b828510156133fa5784356133eb81613003565b825293850193908501906133d8565b96505050606088013592508083111561341257600080fd5b5050613420878288016132e2565b91505092959194509250565b6000602080838503121561343f57600080fd5b82356001600160401b0381111561345557600080fd5b8301601f8101851361346657600080fd5b8035613474613303826132bf565b81815260059190911b8201830190838101908783111561349357600080fd5b928401925b828410156134ba5783356134ab81613003565b82529284019290840190613498565b979650505050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561359557888303603f19018552815180518452878101516001600160a01b03908116898601529087015160608886018190528151818701819052918a019290916080918288019160005b8181101561357d578651805185528e8101518f8601528d8101518e86015286810151841687860152850151831685850152958d019560a09093019260010161353a565b505050978a01979550505091870191506001016134ec565b509098975050505050505050565b600082601f8301126135b457600080fd5b813560206135c4613303836132bf565b82815260059290921b840181019181810190868411156135e357600080fd5b8286015b848110156133425780356135fa81613003565b83529183019183016135e7565b8035801515811461361757600080fd5b919050565b600082601f83011261362d57600080fd5b8135602061363d613303836132bf565b82815260059290921b8401810191818101908684111561365c57600080fd5b8286015b848110156133425761367181613607565b8352918301918301613660565b6000806000806080858703121561369457600080fd5b843561369f81613003565b93506020858101356001600160401b03808211156136bc57600080fd5b818801915088601f8301126136d057600080fd5b81356136de613303826132bf565b81815260059190911b8301840190848101908b8311156136fd57600080fd5b938501935b8285101561372457843561371581613003565b82529385019390850190613702565b97505050604088013592508083111561373c57600080fd5b61374889848a016135a3565b9450606088013592508083111561375e57600080fd5b50506134208782880161361c565b60006020828403121561377e57600080fd5b813561129781613003565b60408152600061379c6040830185613047565b82810360208401526137ae81856130d7565b95945050505050565b805161361781613003565b6000601f83818401126137d457600080fd5b825160206137e4613303836132bf565b82815260059290921b8501810191818101908784111561380357600080fd5b8287015b848110156139275780516001600160401b03808211156138275760008081fd5b9089019060a0601f19838d0381018213156138425760008081fd5b61384a613267565b888501518481111561385c5760008081fd5b8501603f81018f1361386e5760008081fd5b898101518581111561388257613882613251565b6138918b858f8401160161328f565b9550808652604093508f848284010111156138ac5760008081fd5b60005b818110156138ca578281018501518782018d01528b016138af565b818111156138db5760008c83890101525b5050508381526138ec8286016137b7565b89820152606093506138ff8486016137b7565b9181019190915260808481015193820193909352920151908201528352918301918301613807565b50979650505050505050565b6000806040838503121561394657600080fd5b82516001600160401b038082111561395d57600080fd5b818501915085601f83011261397157600080fd5b81516020613981613303836132bf565b82815260059290921b840181019181810190898411156139a057600080fd5b948201945b838610156139be578551825294820194908201906139a5565b918801519196509093505050808211156139d757600080fd5b506139e4858286016137c2565b9150509250929050565b634e487b7160e01b600052603260045260246000fd5b60006020808385031215613a1757600080fd5b82516001600160401b03811115613a2d57600080fd5b8301601f81018513613a3e57600080fd5b8051613a4c613303826132bf565b81815260059190911b82018301908381019087831115613a6b57600080fd5b928401925b828410156134ba578351613a8381613003565b82529284019290840190613a70565b634e487b7160e01b600052601160045260246000fd5b60008219821115613abb57613abb613a92565b500190565b6000600019821415613ad457613ad4613a92565b5060010190565b600060208284031215613aed57600080fd5b815161129781613003565b60006020808385031215613b0b57600080fd5b82516001600160401b03811115613b2157600080fd5b8301601f81018513613b3257600080fd5b8051613b40613303826132bf565b81815260059190911b82018301908381019087831115613b5f57600080fd5b928401925b828410156134ba578351613b7781613003565b82529284019290840190613b64565b600060208284031215613b9857600080fd5b61129782613607565b600060208284031215613bb357600080fd5b5051919050565b6000816000190483118215151615613bd457613bd4613a92565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613bfe57613bfe613bd9565b600160ff1b821460001984141615613c1857613c18613a92565b500590565b600080821280156001600160ff1b0384900385131615613c3f57613c3f613a92565b600160ff1b8390038412811615613c5857613c58613a92565b50500190565b60006001600160ff1b0381841382841380821686840486111615613c8457613c84613a92565b600160ff1b6000871282811687830589121615613ca357613ca3613a92565b60008712925087820587128484161615613cbf57613cbf613a92565b87850587128184161615613cd557613cd5613a92565b505050929093029392505050565b600082821015613cf557613cf5613a92565b500390565b600060208284031215613d0c57600080fd5b815160ff8116811461129757600080fd5b600082613d2c57613d2c613bd9565b500490565b60008083128015600160ff1b850184121615613d4f57613d4f613a92565b6001600160ff1b0384018313811615613d6a57613d6a613a92565b50500390565b60008060408385031215613d8357600080fd5b82516001600160e01b0381168114613d9a57600080fd5b602084015190925063ffffffff811681146130cc57600080fd5b600063ffffffff83811690831681811015613dd157613dd1613a92565b039392505050565b60006001600160e01b0383811690831681811015613dd157613dd1613a92565b600181815b80851115613e34578160001904821115613e1a57613e1a613a92565b80851615613e2757918102915b93841c9390800290613dfe565b509250929050565b600082613e4b575060016101fe565b81613e58575060006101fe565b8160018114613e6e5760028114613e7857613e94565b60019150506101fe565b60ff841115613e8957613e89613a92565b50506001821b6101fe565b5060208310610133831016604e8410600b8410161715613eb7575081810a6101fe565b613ec18383613df9565b8060001904821115613ed557613ed5613a92565b029392505050565b60006112978383613e3c56fea164736f6c634300080a000a", + "sourceMap": "633:15270:178:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9812:285;;;;;;:::i;:::-;;:::i;:::-;;;613:25:504;;;601:2;586:18;9812:285:178;;;;;;;;10101:1346;;;:::i;:::-;;;;;;;:::i;14000:875::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;13091:905::-;;;;;;:::i;:::-;;:::i;8536:1272::-;;;;;;:::i;:::-;;:::i;1641:417::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;14879:1022::-;;;;;;:::i;:::-;;:::i;11451:442::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;11897:1190::-;;;;;;:::i;:::-;;:::i;1406:231::-;;;;;;:::i;:::-;;:::i;670:24::-;;;;;-1:-1:-1;;;;;670:24:178;;;;;;-1:-1:-1;;;;;15773:32:504;;;15755:51;;15743:2;15728:18;670:24:178;15587:225:504;9812:285:178;9937:16;;;9889:6;9937:16;;;;;;9991:15;;;;;;;;;9889:6;10019:73;10041:4;10047:13;9937:16;;10019:21;:73::i;:::-;10012:80;;;;9812:285;;;;;:::o;10101:1346::-;10198:33;10235:3;;:20;;;-1:-1:-1;;;10235:20:178;;;;10152:35;;10198:33;-1:-1:-1;;;;;10235:3:178;;:18;;:20;;;;;10198:33;;10235:20;;;;;;;:3;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10235:20:178;;;;;;;;;;;;:::i;:::-;10195:60;-1:-1:-1;10262:27:178;;-1:-1:-1;10262:27:178;10295:222;10319:5;:12;10315:1;:16;10295:222;;;10346:21;10387:5;10393:1;10387:8;;;;;;;;:::i;:::-;;;;;;;:20;;;10346:62;;10416:20;10439:4;-1:-1:-1;;;;;10439:27:178;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10439:29:178;;;;;;;;;;;;:::i;:::-;10416:52;;10500:3;:10;10477:33;;;;;:::i;:::-;;;10338:179;;10333:3;;;;;:::i;:::-;;;;10295:222;;;;10523:29;10569:19;-1:-1:-1;;;;;10555:34:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10555:34:178;;10523:66;;10596:33;10644:9;10639:621;10663:5;:12;10659:1;:16;10639:621;;;10690:21;10731:5;10737:1;10731:8;;;;;;;;:::i;:::-;;;;;;;:20;;;10690:62;;10760:20;10783:4;-1:-1:-1;;;;;10783:27:178;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10783:29:178;;;;;;;;;;;;:::i;:::-;10760:52;;10826:9;10821:433;10845:3;:10;10841:1;:14;10821:433;;;10872:15;10916:3;10920:1;10916:6;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;10898:37:178;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10872:66;-1:-1:-1;;;;;;10952:21:178;;10948:32;;10975:5;;;10948:32;10991:10;;11011:162;11035:12;:19;11031:1;:23;11011:162;;;11088:12;11101:1;11088:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;11077:26:178;:7;-1:-1:-1;;;;;11077:26:178;;11073:90;;;11127:4;11119:12;;11145:5;;11073:90;11056:3;;;;:::i;:::-;;;;11011:162;;;;11187:5;11182:63;;11238:7;11194:12;11207:27;;;;:::i;:::-;;;11194:41;;;;;;;;:::i;:::-;;;;;;:51;-1:-1:-1;;;;;11194:51:178;;;-1:-1:-1;;;;;11194:51:178;;;;;11182:63;10862:392;;10857:3;;;;;:::i;:::-;;;;10821:433;;;;10682:578;;10677:3;;;;;:::i;:::-;;;;10639:621;;;;11301:25;-1:-1:-1;;;;;11287:40:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11287:40:178;;11266:61;;11338:9;11333:110;11357:25;11353:1;:29;11333:110;;;11421:12;11434:1;11421:15;;;;;;;;:::i;:::-;;;;;;;11397:18;11416:1;11397:21;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11397:39:178;;;:21;;;;;;;;;;;:39;11384:3;;;;:::i;:::-;;;;11333:110;;;;10189:1258;;;;10101:1346;:::o;14000:875::-;14104:26;14138:16;14162;14193:24;14220:11;-1:-1:-1;;;;;14220:25:178;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14220:27:178;;;;;;;;;;;;:::i;:::-;14193:54;;14253:22;14290:7;:14;-1:-1:-1;;;;;14278:27:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14278:27:178;;14253:52;;14311:34;14348:11;-1:-1:-1;;;;;14348:32:178;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14348:34:178;;;;;;;;;;;;:::i;:::-;14311:71;;14388:36;14451:17;:24;-1:-1:-1;;;;;14427:49:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14427:49:178;;14388:88;;14482:20;14516:17;:24;-1:-1:-1;;;;;14505:36:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14505:36:178;;14482:59;;14553:9;14548:148;14572:17;:24;14568:1;:28;14548:148;;;14644:17;14662:1;14644:20;;;;;;;;:::i;:::-;;;;;;;14611:9;14621:1;14611:12;;;;;;;;:::i;:::-;;;;;;:54;-1:-1:-1;;;;;14611:54:178;;;-1:-1:-1;;;;;14611:54:178;;;;;14685:4;14673:6;14680:1;14673:9;;;;;;;;:::i;:::-;:16;;;:9;;;;;;;;;;;:16;14598:3;;;;:::i;:::-;;;;14548:148;;;;14707:9;14702:99;14726:7;:14;14722:1;:18;14702:99;;;14782:7;14790:1;14782:10;;;;;;;;:::i;:::-;;;;;;;14755:7;14763:1;14755:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;14755:39:178;;;:10;;;;;;;;;;;:39;14742:3;;;;:::i;:::-;;;;14702:99;;;;14814:56;14837:4;14843:7;14852:9;14863:6;14814:22;:56::i;:::-;14807:63;;;;;;;;;;;14000:875;;;;;:::o;13091:905::-;13267:26;;;13392:9;;-1:-1:-1;;;;;13424:19:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13424:19:178;;13414:29;;13478:4;-1:-1:-1;;;;;13464:19:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13464:19:178;;13449:34;;13495:9;13490:454;13514:4;13510:1;:8;13490:454;;;13533:18;13563:6;;13570:1;13563:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;13559:151;;;13597:9;;13607:1;13597:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:33;;-1:-1:-1;;;13597:33:178;;-1:-1:-1;;;;;23119:15:504;;;13597:33:178;;;23101:34:504;23171:15;;;23151:18;;;23144:43;13597:19:178;;;;;;;23036:18:504;;13597:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13584:46;;13559:151;;;13668:9;;13678:1;13668:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:33;;-1:-1:-1;;;13668:33:178;;-1:-1:-1;;;;;15773:32:504;;;13668:33:178;;;15755:51:504;13668:27:178;;;;;;;15728:18:504;;13668:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13655:46;;13559:151;13800:10;13786:7;13794:1;13786:10;;;;;;;;:::i;:::-;;;;;;;:24;;:50;;13826:10;13786:50;;;13813:7;13821:1;13813:10;;;;;;;;:::i;:::-;;;;;;;13786:50;13773:7;13781:1;13773:10;;;;;;;;:::i;:::-;;;;;;:63;;;;;13845:9;;13855:1;13845:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;:31;;-1:-1:-1;;;13845:31:178;;-1:-1:-1;;;;;15773:32:504;;;13845:31:178;;;15755:51:504;13845:25:178;;;;;;;15728:18:504;;13845:31:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13910:9;;13920:1;13910:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13910:24:178;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13884:12;13897:1;13884:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;13884:53:178;;;:15;;;;;;;;;;;:53;-1:-1:-1;13520:3:178;;;;:::i;:::-;;;;13490:454;;;;13958:9;;13969:12;13983:7;13950:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13950:41:178;;-1:-1:-1;13950:41:178;;-1:-1:-1;13950:41:178;;-1:-1:-1;;;;;;;13091:905:178;;;;;;;;;;:::o;8536:1272::-;-1:-1:-1;;;;;;;;8720:6:178;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;8778:33:178;8815:3;;;;;;;;;-1:-1:-1;;;;;8815:3:178;-1:-1:-1;;;;;8815:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8815:20:178;;;;;;;;;;;;:::i;:::-;8775:60;;;8846:9;8841:839;8865:5;:12;8861:1;:16;8841:839;;;8892:21;8933:5;8939:1;8933:8;;;;;;;;:::i;:::-;;;;;;;:20;;;8892:62;;8976:4;-1:-1:-1;;;;;8976:11:178;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8962:4;:11;;:27;-1:-1:-1;;;;;8962:27:178;;;-1:-1:-1;;;;;8962:27:178;;;;;9012:4;-1:-1:-1;;;;;9012:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9012:20:178;;;;;;;;;;;;:::i;:::-;8997:12;;;:35;9045:9;9040:634;9064:4;:12;;;:19;9060:1;:23;9040:634;;;9100:25;9144:9;9139:191;9163:25;:32;9159:1;:36;9139:191;;;9258:4;:12;;;9271:1;9258:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9218:56:178;:25;9244:1;9218:28;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9218:56:178;;9214:105;;;9297:19;9317:1;9297:22;;;;;;;;:::i;:::-;;;;;;;9276:43;;9214:105;9197:3;;;;:::i;:::-;;;;9139:191;;;;9488:4;9427;:11;;;-1:-1:-1;;;;;9427:30:178;;9458:4;:12;;;9471:1;9458:15;;;;;;;;:::i;:::-;;;;;;;9427:47;;;;;;;;;;;;;;-1:-1:-1;;;;;15773:32:504;;;;15755:51;;15743:2;15728:18;;15587:225;9427:47:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9383:4;:12;;;9396:1;9383:15;;;;;;;;:::i;:::-;;;;;;;;;;;:41;;-1:-1:-1;;;9383:41:178;;-1:-1:-1;;;;;15773:32:504;;;9383:41:178;;;15755:51:504;9383:35:178;;;;;;15728:18:504;;9383:41:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:91;;;;:::i;:::-;9376:116;;;;:::i;:::-;9339:153;;:4;;:153;;;;;:::i;:::-;;;-1:-1:-1;9585:12:178;;;;:15;;9528:137;;9569:4;;9598:1;;9585:15;;;;;;:::i;:::-;;;;;;;9612:18;9642:13;9528:29;:137::i;:::-;9502:4;:22;;:163;;;;;;;:::i;:::-;;;-1:-1:-1;9085:3:178;;-1:-1:-1;9085:3:178;;;:::i;:::-;;;;9040:634;;;;8884:796;8879:3;;;;;:::i;:::-;;;;8841:839;;;-1:-1:-1;9690:23:178;;9686:117;;9727:1;9720:8;;;;;;9686:117;9780:23;;9747:22;;;;:29;;9772:4;9747:29;:::i;:::-;9746:57;;;;:::i;:::-;9739:64;;;;8536:1272;;;;;;;:::o;1641:417::-;1715:26;1749:21;;1776:229;1800:7;:14;1796:1;:18;1776:229;;;1829:16;1864:7;1872:1;1864:10;;;;;;;;:::i;:::-;;;;;;;1829:47;;1913:1;-1:-1:-1;;;;;1888:27:178;1896:4;-1:-1:-1;;;;;1888:27:178;;1884:114;;;1924:8;-1:-1:-1;;;;;1924:20:178;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1917:29;;1884:114;;;1993:4;-1:-1:-1;;;;;1967:30:178;:8;-1:-1:-1;;;;;1967:20:178;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;1967:30:178;;1959:39;;;;;;-1:-1:-1;1816:3:178;;;;:::i;:::-;;;;1776:229;;;;2017:36;2039:7;2048:4;2017:21;:36::i;:::-;2010:43;1641:417;-1:-1:-1;;;1641:417:178:o;14879:1022::-;15060:26;15094:29;15131:24;15194:9;:16;-1:-1:-1;;;;;15180:31:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15180:31:178;;15170:41;;15246:9;:16;-1:-1:-1;;;;;15232:31:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15232:31:178;;15217:46;;15275:9;15270:579;15294:9;:16;15290:1;:20;15270:579;;;15330:9;15325:417;15349:7;:14;15345:1;:18;15325:417;;;15380:12;15395:7;15403:1;15395:10;;;;;;;;:::i;:::-;;;;;;;15380:25;;15416:18;15448:6;15455:1;15448:9;;;;;;;;:::i;:::-;;;;;;;15444:159;;;15484:9;15494:1;15484:12;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;-1:-1:-1;;;15484:33:178;;-1:-1:-1;;;;;23119:15:504;;;15484:33:178;;;23101:34:504;23171:15;;;23151:18;;;23144:43;15484:19:178;;;;;;23036:18:504;;15484:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15471:46;;15444:159;;;15559:9;15569:1;15559:12;;;;;;;;:::i;:::-;;;;;;;;;;;:33;;-1:-1:-1;;;15559:33:178;;-1:-1:-1;;;;;15773:32:504;;;15559:33:178;;;15755:51:504;15559:27:178;;;;;;15728:18:504;;15559:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15546:46;;15444:159;15697:10;15683:7;15691:1;15683:10;;;;;;;;:::i;:::-;;;;;;;:24;;:50;;15723:10;15683:50;;;15710:7;15718:1;15710:10;;;;;;;;:::i;:::-;;;;;;;15683:50;15670:7;15678:1;15670:10;;;;;;;;:::i;:::-;;;;;;:63;;;;;15370:372;;15365:3;;;;;:::i;:::-;;;;15325:417;;;;15750:9;15760:1;15750:12;;;;;;;;:::i;:::-;;;;;;;;;;;:31;;-1:-1:-1;;;15750:31:178;;-1:-1:-1;;;;;15773:32:504;;;15750:31:178;;;15755:51:504;15750:25:178;;;;;;15728:18:504;;15750:31:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15815:9;15825:1;15815:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;15815:24:178;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15789:12;15802:1;15789:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15789:53:178;;;:15;;;;;;;;;;;:53;15312:3;;;;:::i;:::-;;;;15270:579;;;-1:-1:-1;15863:9:178;;14879:1022;;-1:-1:-1;14879:1022:178;;-1:-1:-1;;;14879:1022:178:o;11451:442::-;11513:16;11531;11555:29;11587:20;:18;:20::i;:::-;11555:52;;11613:39;11669:12;:19;-1:-1:-1;;;;;11655:34:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11655:34:178;;11613:76;;11701:9;11696:141;11720:12;:19;11716:1;:23;11696:141;;;11782:48;11808:4;11814:12;11827:1;11814:15;;;;;;;;:::i;:::-;;;;;;;11782:25;:48::i;:::-;11754:22;11777:1;11754:25;;;;;;;;:::i;:::-;;;;;;;;;;:76;11741:3;;;;:::i;:::-;;;;11696:141;;;-1:-1:-1;11851:12:178;;11865:22;;-1:-1:-1;11451:442:178;-1:-1:-1;;11451:442:178:o;11897:1190::-;12037:34;;-1:-1:-1;;;12037:34:178;;-1:-1:-1;;;;;15773:32:504;;;12037:34:178;;;15755:51:504;11983:22:178;;;;12037:28;;;;;15728:18:504;;12037:34:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12013:58;;12080:33;12117:3;;;;;;;;;-1:-1:-1;;;;;12117:3:178;-1:-1:-1;;;;;12117:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12117:20:178;;;;;;;;;;;;:::i;:::-;12077:60;;;12148:9;12143:835;12167:5;:12;12163:1;:16;12143:835;;;12194:21;12235:5;12241:1;12235:8;;;;;;;;:::i;:::-;;;;;;;:20;;;12194:62;;12264:22;12304:24;12331:4;-1:-1:-1;;;;;12331:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12331:20:178;;;;;;;;;;;;:::i;:::-;12304:47;;12383:7;:14;-1:-1:-1;;;;;12371:27:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12371:27:178;;12361:37;;12413:9;12408:107;12432:7;:14;12428:1;:18;12408:107;;;12492:7;12500:1;12492:10;;;;;;;;:::i;:::-;;;;;;;12465:7;12473:1;12465:10;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12465:39:178;;;:10;;;;;;;;;;;:39;12448:3;;;;:::i;:::-;;;;12408:107;;;;12294:229;12531:34;12568:4;-1:-1:-1;;;;;12568:25:178;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12568:27:178;;;;;;;;;;;;:::i;:::-;12531:64;;12608:9;12603:369;12627:17;:24;12623:1;:28;12603:369;;;12668:26;12715:17;12733:1;12715:20;;;;;;;;:::i;:::-;;;;;;;12668:68;;12785:11;-1:-1:-1;;;;;12750:46:178;12758:8;-1:-1:-1;;;;;12758:20:178;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12750:46:178;;12746:218;;;12815:9;12810:105;12834:7;:14;12830:1;:18;12810:105;;;12869:8;-1:-1:-1;;;;;12869:15:178;;12885:7;12893:1;12885:10;;;;;;;;:::i;:::-;;;;;;;12897:4;12869:33;;;;;;;;;;;;;;;-1:-1:-1;;;;;23119:15:504;;;23101:34;;23171:15;;23166:2;23151:18;;23144:43;23051:2;23036:18;;22873:320;12869:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;12850:3:178;;;;:::i;:::-;;;;12810:105;;;-1:-1:-1;12926:27:178;;-1:-1:-1;;;12926:27:178;;-1:-1:-1;;;;;15773:32:504;;;12926:27:178;;;15755:51:504;12926:21:178;;;;;15728:18:504;;12926:27:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12746:218;-1:-1:-1;12653:3:178;;;;:::i;:::-;;;;12603:369;;;;12186:792;;;12181:3;;;;;:::i;:::-;;;;12143:835;;;-1:-1:-1;13007:34:178;;-1:-1:-1;;;13007:34:178;;-1:-1:-1;;;;;15773:32:504;;;13007:34:178;;;15755:51:504;12984:20:178;;13007:28;;;;;;15728:18:504;;13007:34:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12984:57;-1:-1:-1;13054:28:178;13069:13;12984:57;13054:28;:::i;:::-;13047:35;11897:1190;-1:-1:-1;;;;;;11897:1190:178:o;1406:231::-;1488:26;1522:24;1549:11;-1:-1:-1;;;;;1549:25:178;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1549:27:178;;;;;;;;;;;;:::i;:::-;1522:54;;1589:43;1611:7;1620:11;1589:21;:43::i;6856:522::-;7005:6;7019:28;7050:6;-1:-1:-1;;;;;7050:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7019:51;;7076:22;7101:11;-1:-1:-1;;;;;7101:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7076:45;;7127:13;7247:11;7182:56;7210:4;7216:6;7224:13;7182:27;:56::i;:::-;7143:30;7166:6;7143:22;:30::i;:::-;:95;;;;:::i;:::-;:115;;;;:::i;:::-;7331:33;;-1:-1:-1;;;7331:33:178;;-1:-1:-1;;;;;15773:32:504;;;7331:33:178;;;15755:51:504;7127:131:178;;-1:-1:-1;7369:4:178;;7331:25;;;;;15728:18:504;;7331:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7288:32;;-1:-1:-1;;;7288:32:178;;-1:-1:-1;;;;;15773:32:504;;;7288::178;;;15755:51:504;7288:26:178;;;;;15728:18:504;;7288:32:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7272:49;;:6;:49;:::i;:::-;:93;;;;:::i;:::-;7271:102;;;;:::i;:::-;7264:109;6856:522;-1:-1:-1;;;;;;;;6856:522:178:o;2062:2179::-;2175:26;-1:-1:-1;;;;;2215:34:178;;;;:57;;-1:-1:-1;2253:14:178;;:19;2215:57;2211:96;;;2281:26;;;2305:1;2281:26;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2281:26:178;;;;;;;;;;;;;;;;2274:33;;;;2211:96;2314:26;2343:11;-1:-1:-1;;;;;2343:32:178;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2343:34:178;;;;;;;;;;;;:::i;:::-;2314:63;;2383:29;2429:9;:16;-1:-1:-1;;;;;2415:31:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2415:31:178;;2383:63;;2452:34;2503:9;:16;-1:-1:-1;;;;;2489:31:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2489:31:178;;2452:68;;2526:36;2579:9;:16;-1:-1:-1;;;;;2565:31:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2565:31:178;;2526:70;;2602:22;2627:11;-1:-1:-1;;;;;2627:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2602:45;;2654:35;2716:7;:14;-1:-1:-1;;;;;2692:39:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;2692:39:178;;;;;;;;;;;;;;;;2654:77;;2742:9;2737:1478;2761:7;:14;2757:1;:18;2737:1478;;;2790:32;2843:9;:16;-1:-1:-1;;;;;2825:35:178;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2825:35:178;;;;;;;;;;;;;;;;;2790:70;;2869:14;2902:7;2910:1;2902:10;;;;;;;;:::i;:::-;;;;;;;2869:45;;2922:13;2938:6;-1:-1:-1;;;;;2938:12:178;;2951:6;-1:-1:-1;;;;;2951:17:178;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2938:33;;-1:-1:-1;;;;;;2938:33:178;;;;;;;-1:-1:-1;;;;;15773:32:504;;;2938:33:178;;;15755:51:504;15728:18;;2938:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2922:49;-1:-1:-1;3002:6:178;2998:370;;3025:9;3020:340;3044:9;:16;3040:1;:20;3020:340;;;3079:17;3117:9;3127:1;3117:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3099:43:178;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3079:65;;3182:11;3156:12;3169:1;3156:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3156:38:178;;;:15;;;;;;;;;:38;3229:34;;-1:-1:-1;;;3229:34:178;;15773:32:504;;;3229:34:178;;;15755:51:504;3229:12:178;;;;;;15728:18:504;;3229:34:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3206:17;3224:1;3206:20;;;;;;;;:::i;:::-;;;;;;:57;;;;;3326:11;-1:-1:-1;;;;;3326:20:178;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3318:31;;3293:19;3313:1;3293:22;;;;;;;;:::i;:::-;;;;;;;;;;:56;-1:-1:-1;3062:3:178;;;;:::i;:::-;;;;3020:340;;;;2998:370;3381:9;3376:723;3400:9;:16;3396:1;:20;3376:723;;;3433:26;3480:9;3490:1;3480:12;;;;;;;;:::i;:::-;;;;;;;3433:60;;3504:36;3543:113;3586:8;3606:6;3624:19;3644:1;3624:22;;;;;;;;:::i;:::-;;;;;;;3543:31;:113::i;:::-;3504:152;;3666:11;3680:95;3687:28;3717:17;3735:1;3717:20;;;;;;;;:::i;:::-;;;;;;;3739:5;3746:6;-1:-1:-1;;;;;3746:26:178;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3680:6;:95::i;:::-;3666:109;;3803:287;;;;;;;;3857:28;3803:287;;;;3933:17;3951:1;3933:20;;;;;;;;:::i;:::-;;;;;;;3803:287;;;;3979:3;3803:287;;;;4030:8;-1:-1:-1;;;;;3803:287:178;;;;;4064:12;4077:1;4064:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;3803:287:178;;;;3786:11;3798:1;3786:14;;;;;;;;:::i;:::-;;;;;;:304;;;;3423:676;;;3418:3;;;;;:::i;:::-;;;;3376:723;;;;4121:87;;;;;;;;4200:5;4121:87;;;;4149:6;-1:-1:-1;;;;;4121:87:178;;;;;4170:11;4121:87;;;4107:8;4116:1;4107:11;;;;;;;;:::i;:::-;;;;;;:101;;;;2782:1433;;;2777:3;;;;;:::i;:::-;;;;2737:1478;;;-1:-1:-1;4228:8:178;2062:2179;-1:-1:-1;;;;;;;;2062:2179:178:o;7382:972::-;7537:33;;-1:-1:-1;;;7537:33:178;;-1:-1:-1;;;;;15773:32:504;;;7537:33:178;;;15755:51:504;7505:6:178;;;;7537:27;;;;;15728:18:504;;7537:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7595:32;;-1:-1:-1;;;7595:32:178;;-1:-1:-1;;;;;15773:32:504;;;7595::178;;;15755:51:504;7519::178;;-1:-1:-1;7576:16:178;;7595:26;;;;;15728:18:504;;7595:32:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7576:51;;7633:26;7662:6;-1:-1:-1;;;;;7662:25:178;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7633:56;;7695:26;7724:6;-1:-1:-1;;;;;7724:25:178;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7695:56;;7758:28;7789:6;-1:-1:-1;;;;;7789:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7758:51;;7815:22;7840:11;-1:-1:-1;;;;;7840:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7887:33;;-1:-1:-1;;;7887:33:178;;-1:-1:-1;;;;;15773:32:504;;;7887:33:178;;;15755:51:504;7815:45:178;;-1:-1:-1;7866:18:178;;7887:25;;;;;15728:18:504;;7887:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7866:54;-1:-1:-1;7926:23:178;7978:4;7953:21;7866:54;7953:8;:21;:::i;:::-;7952:30;;;;:::i;:::-;7926:56;-1:-1:-1;7988:20:178;8036:4;8012:20;8022:10;8012:7;:20;:::i;:::-;8011:29;;;;:::i;:::-;7988:52;-1:-1:-1;8047:26:178;8076:36;8094:18;8076:15;:36;:::i;:::-;8047:65;-1:-1:-1;8118:33:178;8154;8169:18;8154:12;:33;:::i;:::-;8118:69;-1:-1:-1;8198:20:178;8194:34;;8227:1;8220:8;;;;;;;;;;;;;;;8194:34;8333:15;8309:13;8243:62;8279:25;8250:18;8243:62;:::i;:::-;8242:80;;;;:::i;:::-;8241:108;;;;:::i;:::-;8234:115;7382:972;-1:-1:-1;;;;;;;;;;;;;;;7382:972:178:o;5930:922::-;5996:28;6032;6063:6;-1:-1:-1;;;;;6063:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6032:51;;6089:22;6114:11;-1:-1:-1;;;;;6114:18:178;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6166:33;;-1:-1:-1;;;6166:33:178;;-1:-1:-1;;;;;15773:32:504;;;6166:33:178;;;15755:51:504;6089:45:178;;-1:-1:-1;6140:23:178;;6166:25;;;;;15728:18:504;;6166:33:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6140:59;;6206:26;6235:11;-1:-1:-1;;;;;6235:32:178;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6235:34:178;;;;;;;;;;;;:::i;:::-;6206:63;;6280:9;6275:573;6299:9;:16;6295:1;:20;6275:573;;;6330:26;6377:9;6387:1;6377:12;;;;;;;;:::i;:::-;;;;;;;6330:60;;6398:17;6418:8;-1:-1:-1;;;;;6418:20:178;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6398:42;;6449:36;6488:114;6529:8;6547:6;6571:11;-1:-1:-1;;;;;6571:20:178;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6563:31;;6488;:114::i;:::-;6685:34;;-1:-1:-1;;;6685:34:178;;-1:-1:-1;;;;;15773:32:504;;;6685:34:178;;;15755:51:504;6449:153:178;;-1:-1:-1;6611:17:178;;6631:159;;6449:153;;6685:12;;;;;15728:18:504;;6685:34:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6729:15;6754:6;-1:-1:-1;;;;;6754:26:178;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6631:159;6611:179;-1:-1:-1;6799:42:178;6611:179;6799:42;;:::i;:::-;;;6322:526;;;;6317:3;;;;;:::i;:::-;;;;6275:573;;;;6026:826;;;;5930:922;;;:::o;4464:698::-;4749:32;;-1:-1:-1;;;4749:32:178;;-1:-1:-1;;;;;15773:32:504;;;4749::178;;;15755:51:504;4601:36:178;;4676:6;;4601:36;;;;4749:22;;;;;15728:18:504;;4749:32:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4787:37;;-1:-1:-1;;;4787:37:178;;-1:-1:-1;;;;;23119:15:504;;;4787:37:178;;;23101:34:504;4821:1:178;23151:18:504;;;23144:43;4690:91:178;;-1:-1:-1;4690:91:178;;-1:-1:-1;4787:15:178;;;;;;23036:18:504;;4787:37:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;4887:32:178;;-1:-1:-1;;;4887:32:178;;-1:-1:-1;;;;;15773:32:504;;;4887::178;;;15755:51:504;4831:18:178;;;;4887:22;;;;;15728:18:504;;4887:32:178;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4830:89;;;;4957:26;4929:54;;:25;:54;;;4925:233;;;5096:54;5124:26;5096:25;:54;:::i;:::-;5032:119;;:52;5048:24;5061:11;5048:10;:24;:::i;:::-;-1:-1:-1;;;;;5032:52:178;5075:8;5032:14;:52::i;:::-;:119;;;;:::i;:::-;4993:158;;4925:233;4639:523;;;;;4464:698;;;;;:::o;5166:760::-;5336:7;5355:33;5351:47;;-1:-1:-1;5397:1:178;5390:8;;5351:47;5404:37;5444:47;5475:16;5444:28;:47;:::i;:::-;5404:87;-1:-1:-1;5515:35:178;5553:43;5404:87;5585:11;5553:43;:::i;:::-;5515:81;-1:-1:-1;5620:34:178;5657:45;5687:15;5515:81;5657:45;:::i;:::-;5620:82;-1:-1:-1;5726:40:178;5769:33;5620:82;5798:4;5769:33;:::i;:::-;5726:76;-1:-1:-1;5826:11:178;5840:47;5875:12;5726:76;5840:47;:::i;:::-;5826:61;5166:760;-1:-1:-1;;;;;;;;;;5166:760:178:o;4245:215::-;4329:7;4363:2;4351:8;:14;;:104;;4440:13;4451:2;4440:8;:13;:::i;:::-;4435:19;;:2;:19;:::i;:::-;4413:42;;4421:9;4413:42;:::i;:::-;4351:104;;;4395:13;4400:8;4395:2;:13;:::i;:::-;4390:19;;:2;:19;:::i;:::-;4368:42;;4376:9;4368:42;:::i;14:131:504:-;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:314::-;217:6;225;278:2;266:9;257:7;253:23;249:32;246:52;;;294:1;291;284:12;246:52;333:9;320:23;352:31;377:5;352:31;:::i;:::-;402:5;454:2;439:18;;;;426:32;;-1:-1:-1;;;150:314:504:o;649:461::-;702:3;740:5;734:12;767:6;762:3;755:19;793:4;822:2;817:3;813:12;806:19;;859:2;852:5;848:14;880:1;890:195;904:6;901:1;898:13;890:195;;;969:13;;-1:-1:-1;;;;;965:39:504;953:52;;1025:12;;;;1060:15;;;;1001:1;919:9;890:195;;;-1:-1:-1;1101:3:504;;649:461;-1:-1:-1;;;;;649:461:504:o;1115:261::-;1294:2;1283:9;1276:21;1257:4;1314:56;1366:2;1355:9;1351:18;1343:6;1314:56;:::i;1381:414::-;1475:6;1483;1536:2;1524:9;1515:7;1511:23;1507:32;1504:52;;;1552:1;1549;1542:12;1504:52;1591:9;1578:23;1610:31;1635:5;1610:31;:::i;:::-;1660:5;-1:-1:-1;1717:2:504;1702:18;;1689:32;1730:33;1689:32;1730:33;:::i;:::-;1782:7;1772:17;;;1381:414;;;;;:::o;1800:435::-;1853:3;1891:5;1885:12;1918:6;1913:3;1906:19;1944:4;1973:2;1968:3;1964:12;1957:19;;2010:2;2003:5;1999:14;2031:1;2041:169;2055:6;2052:1;2049:13;2041:169;;;2116:13;;2104:26;;2150:12;;;;2185:15;;;;2077:1;2070:9;2041:169;;2240:1064;2613:2;2625:21;;;2695:13;;2598:18;;;2717:22;;;2565:4;;2793;;2770:3;2755:19;;;2820:15;;;2565:4;2863:195;2877:6;2874:1;2871:13;2863:195;;;2942:13;;-1:-1:-1;;;;;2938:39:504;2926:52;;2998:12;;;;3033:15;;;;2974:1;2892:9;2863:195;;;2867:3;;;3103:9;3098:3;3094:19;3089:2;3078:9;3074:18;3067:47;3137:41;3174:3;3166:6;3137:41;:::i;:::-;3123:55;;;3226:9;3218:6;3214:22;3209:2;3198:9;3194:18;3187:50;3254:44;3291:6;3283;3254:44;:::i;3309:386::-;3391:8;3401:6;3455:3;3448:4;3440:6;3436:17;3432:27;3422:55;;3473:1;3470;3463:12;3422:55;-1:-1:-1;3496:20:504;;-1:-1:-1;;;;;3528:30:504;;3525:50;;;3571:1;3568;3561:12;3525:50;3608:4;3600:6;3596:17;3584:29;;3668:3;3661:4;3651:6;3648:1;3644:14;3636:6;3632:27;3628:38;3625:47;3622:67;;;3685:1;3682;3675:12;3622:67;3309:386;;;;;:::o;3700:1128::-;3880:6;3888;3896;3904;3912;3920;3973:3;3961:9;3952:7;3948:23;3944:33;3941:53;;;3990:1;3987;3980:12;3941:53;4029:9;4016:23;4048:31;4073:5;4048:31;:::i;:::-;4098:5;-1:-1:-1;4155:2:504;4140:18;;4127:32;4168:33;4127:32;4168:33;:::i;:::-;4220:7;-1:-1:-1;4278:2:504;4263:18;;4250:32;-1:-1:-1;;;;;4331:14:504;;;4328:34;;;4358:1;4355;4348:12;4328:34;4397:89;4478:7;4469:6;4458:9;4454:22;4397:89;:::i;:::-;4505:8;;-1:-1:-1;4371:115:504;-1:-1:-1;4593:2:504;4578:18;;4565:32;;-1:-1:-1;4609:16:504;;;4606:36;;;4638:1;4635;4628:12;4606:36;;4677:91;4760:7;4749:8;4738:9;4734:24;4677:91;:::i;:::-;3700:1128;;;;-1:-1:-1;3700:1128:504;;-1:-1:-1;3700:1128:504;;4787:8;;3700:1128;-1:-1:-1;;;3700:1128:504:o;4833:127::-;4894:10;4889:3;4885:20;4882:1;4875:31;4925:4;4922:1;4915:15;4949:4;4946:1;4939:15;4965:253;5037:2;5031:9;5079:4;5067:17;;-1:-1:-1;;;;;5099:34:504;;5135:22;;;5096:62;5093:88;;;5161:18;;:::i;:::-;5197:2;5190:22;4965:253;:::o;5223:275::-;5294:2;5288:9;5359:2;5340:13;;-1:-1:-1;;5336:27:504;5324:40;;-1:-1:-1;;;;;5379:34:504;;5415:22;;;5376:62;5373:88;;;5441:18;;:::i;:::-;5477:2;5470:22;5223:275;;-1:-1:-1;5223:275:504:o;5503:183::-;5563:4;-1:-1:-1;;;;;5588:6:504;5585:30;5582:56;;;5618:18;;:::i;:::-;-1:-1:-1;5663:1:504;5659:14;5675:4;5655:25;;5503:183::o;5691:661::-;5744:5;5797:3;5790:4;5782:6;5778:17;5774:27;5764:55;;5815:1;5812;5805:12;5764:55;5851:6;5838:20;5877:4;5901:60;5917:43;5957:2;5917:43;:::i;:::-;5901:60;:::i;:::-;5995:15;;;6081:1;6077:10;;;;6065:23;;6061:32;;;6026:12;;;;6105:15;;;6102:35;;;6133:1;6130;6123:12;6102:35;6169:2;6161:6;6157:15;6181:142;6197:6;6192:3;6189:15;6181:142;;;6263:17;;6251:30;;6301:12;;;;6214;;6181:142;;;-1:-1:-1;6341:5:504;5691:661;-1:-1:-1;;;;;;5691:661:504:o;6357:1420::-;6491:6;6499;6507;6515;6568:3;6556:9;6547:7;6543:23;6539:33;6536:53;;;6585:1;6582;6575:12;6536:53;6624:9;6611:23;6643:31;6668:5;6643:31;:::i;:::-;6693:5;-1:-1:-1;6717:2:504;6751:18;;;6738:32;;-1:-1:-1;6821:2:504;6806:18;;6793:32;-1:-1:-1;;;;;6874:14:504;;;6871:34;;;6901:1;6898;6891:12;6871:34;6939:6;6928:9;6924:22;6914:32;;6984:7;6977:4;6973:2;6969:13;6965:27;6955:55;;7006:1;7003;6996:12;6955:55;7042:2;7029:16;7065:60;7081:43;7121:2;7081:43;:::i;7065:60::-;7159:15;;;7241:1;7237:10;;;;7229:19;;7225:28;;;7190:12;;;;7265:19;;;7262:39;;;7297:1;7294;7287:12;7262:39;7321:11;;;;7341:223;7357:6;7352:3;7349:15;7341:223;;;7439:3;7426:17;7456:33;7481:7;7456:33;:::i;:::-;7502:20;;7374:12;;;;7542;;;;7341:223;;;7583:5;-1:-1:-1;;;7641:2:504;7626:18;;7613:32;;-1:-1:-1;7657:16:504;;;7654:36;;;7686:1;7683;7676:12;7654:36;;;7709:62;7763:7;7752:8;7741:9;7737:24;7709:62;:::i;:::-;7699:72;;;6357:1420;;;;;;;:::o;7782:983::-;7883:6;7914:2;7957;7945:9;7936:7;7932:23;7928:32;7925:52;;;7973:1;7970;7963:12;7925:52;8013:9;8000:23;-1:-1:-1;;;;;8038:6:504;8035:30;8032:50;;;8078:1;8075;8068:12;8032:50;8101:22;;8154:4;8146:13;;8142:27;-1:-1:-1;8132:55:504;;8183:1;8180;8173:12;8132:55;8219:2;8206:16;8242:60;8258:43;8298:2;8258:43;:::i;8242:60::-;8336:15;;;8418:1;8414:10;;;;8406:19;;8402:28;;;8367:12;;;;8442:19;;;8439:39;;;8474:1;8471;8464:12;8439:39;8498:11;;;;8518:217;8534:6;8529:3;8526:15;8518:217;;;8614:3;8601:17;8631:31;8656:5;8631:31;:::i;:::-;8675:18;;8551:12;;;;8713;;;;8518:217;;;8754:5;7782:983;-1:-1:-1;;;;;;;7782:983:504:o;8770:2002::-;8984:4;9013:2;9053;9042:9;9038:18;9083:2;9072:9;9065:21;9106:6;9141;9135:13;9172:6;9164;9157:22;9198:2;9188:12;;9231:2;9220:9;9216:18;9209:25;;9293:2;9283:6;9280:1;9276:14;9265:9;9261:30;9257:39;9331:2;9323:6;9319:15;9352:1;9362:1381;9376:6;9373:1;9370:13;9362:1381;;;9441:22;;;-1:-1:-1;;9437:36:504;9425:49;;9497:13;;9607:9;;9592:25;;9656:11;;;9650:18;-1:-1:-1;;;;;9747:21:504;;;9730:15;;;9723:46;9810:11;;;9804:18;9533:4;9842:15;;;9835:27;;;9923:21;;9564:15;;;9957:24;;;10073:23;;;;9533:4;;10004:3;;10029:15;;;;10120:1;10134:501;10150:8;10145:3;10142:17;10134:501;;;10223:15;;10269:9;;10255:24;;10325:11;;;10319:18;10303:14;;;10296:42;10384:11;;;10378:18;10362:14;;;10355:42;10447:11;;;10441:18;10437:27;;10421:14;;;10414:51;10515:11;;10509:18;10505:27;;10489:14;;;10482:51;10604:17;;;;10570:4;10559:16;;;;10178:1;10169:11;10134:501;;;-1:-1:-1;;;10721:12:504;;;;10658:5;-1:-1:-1;;;10686:15:504;;;;-1:-1:-1;9398:1:504;9391:9;9362:1381;;;-1:-1:-1;10760:6:504;;8770:2002;-1:-1:-1;;;;;;;;8770:2002:504:o;10777:756::-;10850:5;10903:3;10896:4;10888:6;10884:17;10880:27;10870:55;;10921:1;10918;10911:12;10870:55;10957:6;10944:20;10983:4;11007:60;11023:43;11063:2;11023:43;:::i;11007:60::-;11101:15;;;11187:1;11183:10;;;;11171:23;;11167:32;;;11132:12;;;;11211:15;;;11208:35;;;11239:1;11236;11229:12;11208:35;11275:2;11267:6;11263:15;11287:217;11303:6;11298:3;11295:15;11287:217;;;11383:3;11370:17;11400:31;11425:5;11400:31;:::i;:::-;11444:18;;11482:12;;;;11320;;11287:217;;11538:160;11603:20;;11659:13;;11652:21;11642:32;;11632:60;;11688:1;11685;11678:12;11632:60;11538:160;;;:::o;11703:662::-;11754:5;11807:3;11800:4;11792:6;11788:17;11784:27;11774:55;;11825:1;11822;11815:12;11774:55;11861:6;11848:20;11887:4;11911:60;11927:43;11967:2;11927:43;:::i;11911:60::-;12005:15;;;12091:1;12087:10;;;;12075:23;;12071:32;;;12036:12;;;;12115:15;;;12112:35;;;12143:1;12140;12133:12;12112:35;12179:2;12171:6;12167:15;12191:145;12207:6;12202:3;12199:15;12191:145;;;12273:20;12289:3;12273:20;:::i;:::-;12261:33;;12314:12;;;;12224;;12191:145;;12370:1637;12571:6;12579;12587;12595;12648:3;12636:9;12627:7;12623:23;12619:33;12616:53;;;12665:1;12662;12655:12;12616:53;12704:9;12691:23;12723:31;12748:5;12723:31;:::i;:::-;12773:5;-1:-1:-1;12797:2:504;12835:18;;;12822:32;-1:-1:-1;;;;;12903:14:504;;;12900:34;;;12930:1;12927;12920:12;12900:34;12968:6;12957:9;12953:22;12943:32;;13013:7;13006:4;13002:2;12998:13;12994:27;12984:55;;13035:1;13032;13025:12;12984:55;13071:2;13058:16;13094:60;13110:43;13150:2;13110:43;:::i;13094:60::-;13188:15;;;13270:1;13266:10;;;;13258:19;;13254:28;;;13219:12;;;;13294:19;;;13291:39;;;13326:1;13323;13316:12;13291:39;13350:11;;;;13370:223;13386:6;13381:3;13378:15;13370:223;;;13468:3;13455:17;13485:33;13510:7;13485:33;:::i;:::-;13531:20;;13403:12;;;;13571;;;;13370:223;;;13612:5;-1:-1:-1;;;13670:2:504;13655:18;;13642:32;;-1:-1:-1;13686:16:504;;;13683:36;;;13715:1;13712;13705:12;13683:36;13738:82;13812:7;13801:8;13790:9;13786:24;13738:82;:::i;:::-;13728:92;;13873:2;13862:9;13858:18;13845:32;13829:48;;13902:2;13892:8;13889:16;13886:36;;;13918:1;13915;13908:12;13886:36;;;13941:60;13993:7;13982:8;13971:9;13967:24;13941:60;:::i;14012:247::-;14071:6;14124:2;14112:9;14103:7;14099:23;14095:32;14092:52;;;14140:1;14137;14130:12;14092:52;14179:9;14166:23;14198:31;14223:5;14198:31;:::i;14264:465::-;14521:2;14510:9;14503:21;14484:4;14547:56;14599:2;14588:9;14584:18;14576:6;14547:56;:::i;:::-;14651:9;14643:6;14639:22;14634:2;14623:9;14619:18;14612:50;14679:44;14716:6;14708;14679:44;:::i;:::-;14671:52;14264:465;-1:-1:-1;;;;;14264:465:504:o;15817:138::-;15896:13;;15918:31;15896:13;15918:31;:::i;15960:2531::-;16029:5;16059:4;16103:3;16098:2;16090:6;16086:15;16082:25;16072:53;;16121:1;16118;16111:12;16072:53;16150:6;16144:13;16176:4;16200:60;16216:43;16256:2;16216:43;:::i;16200:60::-;16294:15;;;16380:1;16376:10;;;;16364:23;;16360:32;;;16325:12;;;;16404:15;;;16401:35;;;16432:1;16429;16422:12;16401:35;16468:2;16460:6;16456:15;16480:1982;16496:6;16491:3;16488:15;16480:1982;;;16575:3;16569:10;-1:-1:-1;;;;;16652:2:504;16639:11;16636:19;16633:109;;;16696:1;16725:2;16721;16714:14;16633:109;16765:24;;;;16812:4;-1:-1:-1;;16870:12:504;;;16866:21;;16862:30;-1:-1:-1;16859:120:504;;;16933:1;16962:2;16958;16951:14;16859:120;17005:22;;:::i;:::-;17070:2;17066;17062:11;17056:18;17103:2;17093:8;17090:16;17087:109;;;17148:1;17178:3;17173;17166:16;17087:109;17220:17;;17273:2;17264:12;;17260:22;-1:-1:-1;17250:123:504;;17325:1;17355:3;17350;17343:16;17250:123;17412:2;17407:3;17403:12;17397:19;17440:2;17435:3;17432:11;17429:37;;;17446:18;;:::i;:::-;17494:47;17537:2;17532;17527;17522:3;17518:12;17514:21;17510:30;17494:47;:::i;:::-;17479:62;;17570:3;17561:7;17554:20;17598:2;17587:13;;17644:3;17638;17632;17627;17623:13;17619:23;17616:32;17613:125;;;17690:1;17720:3;17715;17708:16;17613:125;17760:1;17774:145;17788:3;17785:1;17782:10;17774:145;;;17886:11;;;17882:21;;17876:28;17854:15;;;17850:24;;17843:62;17800:10;;17774:145;;;17941:3;17938:1;17935:10;17932:95;;;18011:1;18006:2;18000:3;17991:7;17987:17;17983:26;17976:37;17932:95;;;;18054:7;18047:5;18040:22;18098:43;18136:3;18132:2;18128:12;18098:43;:::i;:::-;18093:2;18086:5;18082:14;18075:67;18166:2;18155:13;;18205:43;18243:3;18239:2;18235:12;18205:43;:::i;:::-;18188:15;;;18181:68;;;;18273:3;18319:12;;;18313:19;18296:15;;;18289:44;;;;18376:11;;18370:18;18353:15;;;18346:43;18402:18;;18440:12;;;;16513;;16480:1982;;;-1:-1:-1;18480:5:504;15960:2531;-1:-1:-1;;;;;;;15960:2531:504:o;18496:1160::-;18647:6;18655;18708:2;18696:9;18687:7;18683:23;18679:32;18676:52;;;18724:1;18721;18714:12;18676:52;18757:9;18751:16;-1:-1:-1;;;;;18827:2:504;18819:6;18816:14;18813:34;;;18843:1;18840;18833:12;18813:34;18881:6;18870:9;18866:22;18856:32;;18926:7;18919:4;18915:2;18911:13;18907:27;18897:55;;18948:1;18945;18938:12;18897:55;18977:2;18971:9;18999:4;19023:60;19039:43;19079:2;19039:43;:::i;19023:60::-;19117:15;;;19199:1;19195:10;;;;19187:19;;19183:28;;;19148:12;;;;19223:19;;;19220:39;;;19255:1;19252;19245:12;19220:39;19279:11;;;;19299:135;19315:6;19310:3;19307:15;19299:135;;;19381:10;;19369:23;;19332:12;;;;19412;;;;19299:135;;;19489:18;;;19483:25;19453:5;;-1:-1:-1;19483:25:504;;-1:-1:-1;;;19520:16:504;;;19517:36;;;19549:1;19546;19539:12;19517:36;;19572:78;19642:7;19631:8;19620:9;19616:24;19572:78;:::i;:::-;19562:88;;;18496:1160;;;;;:::o;19661:127::-;19722:10;19717:3;19713:20;19710:1;19703:31;19753:4;19750:1;19743:15;19777:4;19774:1;19767:15;19793:956;19888:6;19919:2;19962;19950:9;19941:7;19937:23;19933:32;19930:52;;;19978:1;19975;19968:12;19930:52;20011:9;20005:16;-1:-1:-1;;;;;20036:6:504;20033:30;20030:50;;;20076:1;20073;20066:12;20030:50;20099:22;;20152:4;20144:13;;20140:27;-1:-1:-1;20130:55:504;;20181:1;20178;20171:12;20130:55;20210:2;20204:9;20233:60;20249:43;20289:2;20249:43;:::i;20233:60::-;20327:15;;;20409:1;20405:10;;;;20397:19;;20393:28;;;20358:12;;;;20433:19;;;20430:39;;;20465:1;20462;20455:12;20430:39;20489:11;;;;20509:210;20525:6;20520:3;20517:15;20509:210;;;20598:3;20592:10;20615:31;20640:5;20615:31;:::i;:::-;20659:18;;20542:12;;;;20697;;;;20509:210;;20754:127;20815:10;20810:3;20806:20;20803:1;20796:31;20846:4;20843:1;20836:15;20870:4;20867:1;20860:15;20886:128;20926:3;20957:1;20953:6;20950:1;20947:13;20944:39;;;20963:18;;:::i;:::-;-1:-1:-1;20999:9:504;;20886:128::o;21019:135::-;21058:3;-1:-1:-1;;21079:17:504;;21076:43;;;21099:18;;:::i;:::-;-1:-1:-1;21146:1:504;21135:13;;21019:135::o;21159:267::-;21245:6;21298:2;21286:9;21277:7;21273:23;21269:32;21266:52;;;21314:1;21311;21304:12;21266:52;21346:9;21340:16;21365:31;21390:5;21365:31;:::i;21431:973::-;21543:6;21574:2;21617;21605:9;21596:7;21592:23;21588:32;21585:52;;;21633:1;21630;21623:12;21585:52;21666:9;21660:16;-1:-1:-1;;;;;21691:6:504;21688:30;21685:50;;;21731:1;21728;21721:12;21685:50;21754:22;;21807:4;21799:13;;21795:27;-1:-1:-1;21785:55:504;;21836:1;21833;21826:12;21785:55;21865:2;21859:9;21888:60;21904:43;21944:2;21904:43;:::i;21888:60::-;21982:15;;;22064:1;22060:10;;;;22052:19;;22048:28;;;22013:12;;;;22088:19;;;22085:39;;;22120:1;22117;22110:12;22085:39;22144:11;;;;22164:210;22180:6;22175:3;22172:15;22164:210;;;22253:3;22247:10;22270:31;22295:5;22270:31;:::i;:::-;22314:18;;22197:12;;;;22352;;;;22164:210;;22409:180;22465:6;22518:2;22506:9;22497:7;22493:23;22489:32;22486:52;;;22534:1;22531;22524:12;22486:52;22557:26;22573:9;22557:26;:::i;23198:184::-;23268:6;23321:2;23309:9;23300:7;23296:23;23292:32;23289:52;;;23337:1;23334;23327:12;23289:52;-1:-1:-1;23360:16:504;;23198:184;-1:-1:-1;23198:184:504:o;24101:168::-;24141:7;24207:1;24203;24199:6;24195:14;24192:1;24189:21;24184:1;24177:9;24170:17;24166:45;24163:71;;;24214:18;;:::i;:::-;-1:-1:-1;24254:9:504;;24101:168::o;24274:127::-;24335:10;24330:3;24326:20;24323:1;24316:31;24366:4;24363:1;24356:15;24390:4;24387:1;24380:15;24406:193;24445:1;24471;24461:35;;24476:18;;:::i;:::-;-1:-1:-1;;;24512:18:504;;-1:-1:-1;;24532:13:504;;24508:38;24505:64;;;24549:18;;:::i;:::-;-1:-1:-1;24583:10:504;;24406:193::o;24604:265::-;24643:3;24671:9;;;24696:10;;-1:-1:-1;;;;;24715:27:504;;;24708:35;;24692:52;24689:78;;;24747:18;;:::i;:::-;-1:-1:-1;;;24794:19:504;;;24787:27;;24779:36;;24776:62;;;24818:18;;:::i;:::-;-1:-1:-1;;24854:9:504;;24604:265::o;24874:553::-;24913:7;-1:-1:-1;;;;;24983:9:504;;;25011;;;25036:11;;;25055:10;;;25049:17;;25032:35;25029:61;;;25070:18;;:::i;:::-;-1:-1:-1;;;25146:1:504;25139:9;;25164:11;;;25184;;;25177:19;;25160:37;25157:63;;;25200:18;;:::i;:::-;25246:1;25243;25239:9;25229:19;;25293:1;25289:2;25284:11;25281:1;25277:19;25272:2;25268;25264:11;25260:37;25257:63;;;25300:18;;:::i;:::-;25365:1;25361:2;25356:11;25353:1;25349:19;25344:2;25340;25336:11;25332:37;25329:63;;;25372:18;;:::i;:::-;-1:-1:-1;;;25412:9:504;;;;;24874:553;-1:-1:-1;;;24874:553:504:o;25714:125::-;25754:4;25782:1;25779;25776:8;25773:34;;;25787:18;;:::i;:::-;-1:-1:-1;25824:9:504;;25714:125::o;26100:273::-;26168:6;26221:2;26209:9;26200:7;26196:23;26192:32;26189:52;;;26237:1;26234;26227:12;26189:52;26269:9;26263:16;26319:4;26312:5;26308:16;26301:5;26298:27;26288:55;;26339:1;26336;26329:12;26378:120;26418:1;26444;26434:35;;26449:18;;:::i;:::-;-1:-1:-1;26483:9:504;;26378:120::o;26503:267::-;26542:4;26571:9;;;26596:10;;-1:-1:-1;;;26615:19:504;;26608:27;;26592:44;26589:70;;;26639:18;;:::i;:::-;-1:-1:-1;;;;;26686:27:504;;26679:35;;26671:44;;26668:70;;;26718:18;;:::i;:::-;-1:-1:-1;;26755:9:504;;26503:267::o;26999:455::-;27077:6;27085;27138:2;27126:9;27117:7;27113:23;27109:32;27106:52;;;27154:1;27151;27144:12;27106:52;27180:16;;-1:-1:-1;;;;;27225:31:504;;27215:42;;27205:70;;27271:1;27268;27261:12;27205:70;27344:2;27329:18;;27323:25;27294:5;;-1:-1:-1;27392:10:504;27379:24;;27367:37;;27357:65;;27418:1;27415;27408:12;27459:221;27498:4;27527:10;27587;;;;27557;;27609:12;;;27606:38;;;27624:18;;:::i;:::-;27661:13;;27459:221;-1:-1:-1;;;27459:221:504:o;27685:231::-;27725:4;-1:-1:-1;;;;;27823:10:504;;;;27793;;27845:12;;;27842:38;;;27860:18;;:::i;27921:422::-;28010:1;28053:5;28010:1;28067:270;28088:7;28078:8;28075:21;28067:270;;;28147:4;28143:1;28139:6;28135:17;28129:4;28126:27;28123:53;;;28156:18;;:::i;:::-;28206:7;28196:8;28192:22;28189:55;;;28226:16;;;;28189:55;28305:22;;;;28265:15;;;;28067:270;;;28071:3;27921:422;;;;;:::o;28348:806::-;28397:5;28427:8;28417:80;;-1:-1:-1;28468:1:504;28482:5;;28417:80;28516:4;28506:76;;-1:-1:-1;28553:1:504;28567:5;;28506:76;28598:4;28616:1;28611:59;;;;28684:1;28679:130;;;;28591:218;;28611:59;28641:1;28632:10;;28655:5;;;28679:130;28716:3;28706:8;28703:17;28700:43;;;28723:18;;:::i;:::-;-1:-1:-1;;28779:1:504;28765:16;;28794:5;;28591:218;;28893:2;28883:8;28880:16;28874:3;28868:4;28865:13;28861:36;28855:2;28845:8;28842:16;28837:2;28831:4;28828:12;28824:35;28821:77;28818:159;;;-1:-1:-1;28930:19:504;;;28962:5;;28818:159;29009:34;29034:8;29028:4;29009:34;:::i;:::-;29079:6;29075:1;29071:6;29067:19;29058:7;29055:32;29052:58;;;29090:18;;:::i;:::-;29128:20;;28348:806;-1:-1:-1;;;28348:806:504:o;29159:131::-;29219:5;29248:36;29275:8;29269:4;29248:36;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "claimAllRewardTokens(address)": "9cf1fd53", + "claimRewardsForMarket(address,address,address[],bool[])": "4f471e6d", + "claimRewardsForMarkets(address,address[],address[],bool[])": "8260a696", + "claimRewardsForPool(address,address)": "3610c407", + "claimRewardsOfRewardToken(address,address)": "bdfc1839", + "fpd()": "de858c63", + "getAdjustedUserNetApr(address,int256,address[],int256[])": "7d3cab4c", + "getAllRewardTokens()": "12edb24c", + "getMarketRewardsInfo(address[])": "7e70aa49", + "getPoolMarketRewardsInfo(address)": "d1040bae", + "getUserNetApr(address,int256)": "0d9d7fdc" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/JumpRateModel.json b/packages/sdk/deployments/bob/JumpRateModel.json new file mode 100644 index 000000000..5f49686c3 --- /dev/null +++ b/packages/sdk/deployments/bob/JumpRateModel.json @@ -0,0 +1,669 @@ +{ + "address": "0x1D89E5ba287E67AC0046D2218Be5fE1382cE47b4", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_blocksPerYear", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "baseRatePerYear", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "multiplierPerYear", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "jumpMultiplierPerYear", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "kink_", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "baseRatePerBlock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "blocksPerYear", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBorrowRate", + "inputs": [ + { + "name": "cash", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrows", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reserves", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSupplyRate", + "inputs": [ + { + "name": "cash", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrows", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reserves", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reserveFactorMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "isInterestRateModel", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "jumpMultiplierPerBlock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "kink", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "multiplierPerBlock", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "utilizationRate", + "inputs": [ + { + "name": "cash", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrows", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reserves", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "pure" + }, + { + "type": "event", + "name": "NewInterestParams", + "inputs": [ + { + "name": "baseRatePerBlock", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "multiplierPerBlock", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "jumpMultiplierPerBlock", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "kink", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xa16bf13ae4dc7f69730251f1a379771a4cffa4640738ca0855f2ed5dbbcc13e6", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x1D89E5ba287E67AC0046D2218Be5fE1382cE47b4", + "transactionIndex": 2, + "gasUsed": "354459", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000000000000000000000000000000000000000000000000004000000000000000000000000080000000000000002000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc774829ca2b4de5c07600b8b5ecc8dd4d5d3f7386e41a0ff623033385ca4a37d", + "transactionHash": "0xa16bf13ae4dc7f69730251f1a379771a4cffa4640738ca0855f2ed5dbbcc13e6", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 3777889, + "transactionHash": "0xa16bf13ae4dc7f69730251f1a379771a4cffa4640738ca0855f2ed5dbbcc13e6", + "address": "0x1D89E5ba287E67AC0046D2218Be5fE1382cE47b4", + "topics": [ + "0x6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d" + ], + "data": "0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002a86b16fa0000000000000000000000000000000000000000000000000000003b1068377e0000000000000000000000000000000000000000000000000b1a2bc2ec500000", + "logIndex": 4, + "blockHash": "0xc774829ca2b4de5c07600b8b5ecc8dd4d5d3f7386e41a0ff623033385ca4a37d" + } + ], + "blockNumber": 3777889, + "cumulativeGasUsed": "762426", + "status": 1, + "byzantium": true + }, + "args": [ + 15768000, + "0", + "180000000000000000", + "4000000000000000000", + "800000000000000000" + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "_blocksPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "baseRatePerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "multiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "jumpMultiplierPerYear", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "kink_", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "baseRatePerBlock", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "multiplierPerBlock", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "jumpMultiplierPerBlock", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "kink", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "NewInterestParams", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "baseRatePerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactorMantissa", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSupplyRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "isInterestRateModel", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "jumpMultiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "kink", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "multiplierPerBlock", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "cash", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrows", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserves", + "type": "uint256" + } + ], + "stateMutability": "pure", + "type": "function", + "name": "utilizationRate", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "constructor": { + "params": { + "_blocksPerYear": "The approximate number of blocks per year", + "baseRatePerYear": "The approximate target base APR, as a mantissa (scaled by 1e18)", + "jumpMultiplierPerYear": "The multiplierPerBlock after hitting a specified utilization point", + "kink_": "The utilization point at which the jump multiplier is applied", + "multiplierPerYear": "The rate of increase in interest rate wrt utilization (scaled by 1e18)" + } + }, + "getBorrowRate(uint256,uint256,uint256)": { + "params": { + "borrows": "The amount of borrows in the market", + "cash": "The amount of cash in the market", + "reserves": "The amount of reserves in the market" + }, + "returns": { + "_0": "The borrow rate percentage per block as a mantissa (scaled by 1e18)" + } + }, + "getSupplyRate(uint256,uint256,uint256,uint256)": { + "params": { + "borrows": "The amount of borrows in the market", + "cash": "The amount of cash in the market", + "reserveFactorMantissa": "The current reserve factor for the market", + "reserves": "The amount of reserves in the market" + }, + "returns": { + "_0": "The supply rate percentage per block as a mantissa (scaled by 1e18)" + } + }, + "utilizationRate(uint256,uint256,uint256)": { + "params": { + "borrows": "The amount of borrows in the market", + "cash": "The amount of cash in the market", + "reserves": "The amount of reserves in the market (currently unused)" + }, + "returns": { + "_0": "The utilization rate as a mantissa between [0, 1e18]" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "baseRatePerBlock()": { + "notice": "The base interest rate which is the y-intercept when utilization rate is 0" + }, + "blocksPerYear()": { + "notice": "The approximate number of blocks per year that is assumed by the interest rate model" + }, + "constructor": { + "notice": "Construct an interest rate model" + }, + "getBorrowRate(uint256,uint256,uint256)": { + "notice": "Calculates the current borrow rate per block, with the error code expected by the market" + }, + "getSupplyRate(uint256,uint256,uint256,uint256)": { + "notice": "Calculates the current supply rate per block" + }, + "isInterestRateModel()": { + "notice": "Indicator that this is an InterestRateModel contract (for inspection)" + }, + "jumpMultiplierPerBlock()": { + "notice": "The multiplierPerBlock after hitting a specified utilization point" + }, + "kink()": { + "notice": "The utilization point at which the jump multiplier is applied" + }, + "multiplierPerBlock()": { + "notice": "The multiplier of utilization rate that gives the slope of the interest rate" + }, + "utilizationRate(uint256,uint256,uint256)": { + "notice": "Calculates the utilization rate of the market: `borrows / (cash + borrows - reserves)`" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/compound/JumpRateModel.sol": "JumpRateModel" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/JumpRateModel.sol": { + "keccak256": "0x58c22b251b5a400a582b65598e64e5005e850797dcb8e1afc3f32ece462ef2c3", + "urls": [ + "bzz-raw://d849afc568f51e016f1d0313034d20dd1cf2a698fa89b1eea64f9a4ead78a4bf", + "dweb:/ipfs/QmSTDXPDQTdnUnGzqTDNuB84s54y3QARM5b4EM6DW5bvqq" + ], + "license": "UNLICENSED" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506040516104de3803806104de83398101604081905261002f916100c1565b600085905561003e8585610101565b60025560005461004e9084610101565b60015560005461005e9083610101565b60038190556004829055600254600154604080519283526020830191909152810191909152606081018290527f6960ab234c7ef4b0c9197100f5393cfcde7c453ac910a27bd2000aa1dd4c068d9060800160405180910390a15050505050610123565b600080600080600060a086880312156100d957600080fd5b5050835160208501516040860151606087015160809097015192989197509594509092509050565b60008261011e57634e487b7160e01b600052601260045260246000fd5b500490565b6103ac806101326000396000f3fe608060405234801561001057600080fd5b50600436106100935760003560e01c8063a385fb9611610066578063a385fb96146100f2578063b8168816146100fb578063b9f9850a1461010e578063f14039de14610117578063fd2da3391461012057600080fd5b806315f24053146100985780632191f92a146100be5780636e71e2d8146100d65780638726bb89146100e9575b600080fd5b6100ab6100a63660046102bb565b610129565b6040519081526020015b60405180910390f35b6100c6600181565b60405190151581526020016100b5565b6100ab6100e43660046102bb565b6101f7565b6100ab60015481565b6100ab60005481565b6100ab6101093660046102e7565b61023f565b6100ab60035481565b6100ab60025481565b6100ab60045481565b6000806101378585856101f7565b9050600454811161017857600254670de0b6b3a76400006001548361015c919061032f565b610166919061034e565b6101709190610370565b9150506101f0565b6000600254670de0b6b3a7640000600154600454610196919061032f565b6101a0919061034e565b6101aa9190610370565b90506000600454836101bc9190610388565b905081670de0b6b3a7640000600354836101d6919061032f565b6101e0919061034e565b6101ea9190610370565b93505050505b9392505050565b600082610206575060006101f0565b816102118486610370565b61021b9190610388565b61022d84670de0b6b3a764000061032f565b610237919061034e565b949350505050565b60008061025483670de0b6b3a7640000610388565b90506000610263878787610129565b90506000670de0b6b3a764000061027a848461032f565b610284919061034e565b9050670de0b6b3a76400008161029b8a8a8a6101f7565b6102a5919061032f565b6102af919061034e565b98975050505050505050565b6000806000606084860312156102d057600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156102fd57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561034957610349610319565b500290565b60008261036b57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561038357610383610319565b500190565b60008282101561039a5761039a610319565b50039056fea164736f6c634300080a000a", + "sourceMap": "172:4226:29:-:0;;;1533:498;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1697:13;:30;;;1752:31;1713:14;1752:15;:31;:::i;:::-;1733:16;:50;1830:13;;1810:33;;:17;:33;:::i;:::-;1789:18;:54;1898:13;;1874:37;;:21;:37;:::i;:::-;1849:22;:62;;;1917:4;:12;;;1959:16;;1977:18;;1941:85;;;902:25:504;;;958:2;943:18;;936:34;;;;986:18;;979:34;;;;1044:2;1029:18;;1022:34;;;1941:85:29;;889:3:504;874:19;1941:85:29;;;;;;;1533:498;;;;;172:4226;;14:430:504;120:6;128;136;144;152;205:3;193:9;184:7;180:23;176:33;173:53;;;222:1;219;212:12;173:53;-1:-1:-1;;245:16:504;;301:2;286:18;;280:25;345:2;330:18;;324:25;389:2;374:18;;368:25;433:3;418:19;;;412:26;245:16;;280:25;;-1:-1:-1;324:25:504;368;-1:-1:-1;412:26:504;;-1:-1:-1;14:430:504;-1:-1:-1;14:430:504:o;449:217::-;489:1;515;505:132;;559:10;554:3;550:20;547:1;540:31;594:4;591:1;584:15;622:4;619:1;612:15;505:132;-1:-1:-1;651:9:504;;449:217::o;671:391::-;172:4226:29;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100935760003560e01c8063a385fb9611610066578063a385fb96146100f2578063b8168816146100fb578063b9f9850a1461010e578063f14039de14610117578063fd2da3391461012057600080fd5b806315f24053146100985780632191f92a146100be5780636e71e2d8146100d65780638726bb89146100e9575b600080fd5b6100ab6100a63660046102bb565b610129565b6040519081526020015b60405180910390f35b6100c6600181565b60405190151581526020016100b5565b6100ab6100e43660046102bb565b6101f7565b6100ab60015481565b6100ab60005481565b6100ab6101093660046102e7565b61023f565b6100ab60035481565b6100ab60025481565b6100ab60045481565b6000806101378585856101f7565b9050600454811161017857600254670de0b6b3a76400006001548361015c919061032f565b610166919061034e565b6101709190610370565b9150506101f0565b6000600254670de0b6b3a7640000600154600454610196919061032f565b6101a0919061034e565b6101aa9190610370565b90506000600454836101bc9190610388565b905081670de0b6b3a7640000600354836101d6919061032f565b6101e0919061034e565b6101ea9190610370565b93505050505b9392505050565b600082610206575060006101f0565b816102118486610370565b61021b9190610388565b61022d84670de0b6b3a764000061032f565b610237919061034e565b949350505050565b60008061025483670de0b6b3a7640000610388565b90506000610263878787610129565b90506000670de0b6b3a764000061027a848461032f565b610284919061034e565b9050670de0b6b3a76400008161029b8a8a8a6101f7565b6102a5919061032f565b6102af919061034e565b98975050505050505050565b6000806000606084860312156102d057600080fd5b505081359360208301359350604090920135919050565b600080600080608085870312156102fd57600080fd5b5050823594602084013594506040840135936060013592509050565b634e487b7160e01b600052601160045260246000fd5b600081600019048311821515161561034957610349610319565b500290565b60008261036b57634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561038357610383610319565b500190565b60008282101561039a5761039a610319565b50039056fea164736f6c634300080a000a", + "sourceMap": "172:4226:29:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3045:505;;;;;;:::i;:::-;;:::i;:::-;;;481:25:504;;;469:2;454:18;3045:505:29;;;;;;;;266:47:28;;309:4;266:47;;;;;682:14:504;;675:22;657:41;;645:2;630:18;266:47:28;517:187:504;2396:286:29;;;;;;:::i;:::-;;:::i;613:33::-;;;;;;478:28;;;;;;3945:451;;;;;;:::i;:::-;;:::i;879:37::-;;;;;;751:31;;;;;;1008:19;;;;;;3045:505;3163:7;3178:12;3193:40;3209:4;3215:7;3224:8;3193:15;:40::i;:::-;3178:55;;3252:4;;3244;:12;3240:306;;3312:16;;3304:4;3282:18;;3275:4;:25;;;;:::i;:::-;3274:34;;;;:::i;:::-;3273:55;;;;:::i;:::-;3266:62;;;;;3240:306;3349:18;3409:16;;3401:4;3379:18;;3372:4;;:25;;;;:::i;:::-;3371:34;;;;:::i;:::-;3370:55;;;;:::i;:::-;3349:76;;3433:18;3461:4;;3454;:11;;;;:::i;:::-;3433:32;;3529:10;3521:4;3495:22;;3482:10;:35;;;;:::i;:::-;3481:44;;;;:::i;:::-;3480:59;;;;:::i;:::-;3473:66;;;;;3045:505;;;;;;:::o;2396:286::-;2507:7;2581:12;2577:41;;-1:-1:-1;2610:1:29;2603:8;;2577:41;2668:8;2651:14;2658:7;2651:4;:14;:::i;:::-;:25;;;;:::i;:::-;2632:14;:7;2642:4;2632:14;:::i;:::-;2631:46;;;;:::i;:::-;2624:53;2396:286;-1:-1:-1;;;;2396:286:29:o;3945:451::-;4106:7;;4153:28;4160:21;4153:4;:28;:::i;:::-;4121:60;;4187:18;4208:38;4222:4;4228:7;4237:8;4208:13;:38::i;:::-;4187:59;-1:-1:-1;4252:18:29;4312:4;4274:34;4287:21;4187:59;4274:34;:::i;:::-;4273:43;;;;:::i;:::-;4252:64;;4387:4;4373:10;4330:40;4346:4;4352:7;4361:8;4330:15;:40::i;:::-;:53;;;;:::i;:::-;4329:62;;;;:::i;:::-;4322:69;3945:451;-1:-1:-1;;;;;;;;3945:451:29:o;14:316:504:-;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:504;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:504;305:18;;;292:32;;14:316;-1:-1:-1;14:316:504:o;709:385::-;795:6;803;811;819;872:3;860:9;851:7;847:23;843:33;840:53;;;889:1;886;879:12;840:53;-1:-1:-1;;912:23:504;;;982:2;967:18;;954:32;;-1:-1:-1;1033:2:504;1018:18;;1005:32;;1084:2;1069:18;1056:32;;-1:-1:-1;709:385:504;-1:-1:-1;709:385:504:o;1099:127::-;1160:10;1155:3;1151:20;1148:1;1141:31;1191:4;1188:1;1181:15;1215:4;1212:1;1205:15;1231:168;1271:7;1337:1;1333;1329:6;1325:14;1322:1;1319:21;1314:1;1307:9;1300:17;1296:45;1293:71;;;1344:18;;:::i;:::-;-1:-1:-1;1384:9:504;;1231:168::o;1404:217::-;1444:1;1470;1460:132;;1514:10;1509:3;1505:20;1502:1;1495:31;1549:4;1546:1;1539:15;1577:4;1574:1;1567:15;1460:132;-1:-1:-1;1606:9:504;;1404:217::o;1626:128::-;1666:3;1697:1;1693:6;1690:1;1687:13;1684:39;;;1703:18;;:::i;:::-;-1:-1:-1;1739:9:504;;1626:128::o;1759:125::-;1799:4;1827:1;1824;1821:8;1818:34;;;1832:18;;:::i;:::-;-1:-1:-1;1869:9:504;;1759:125::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "baseRatePerBlock()": "f14039de", + "blocksPerYear()": "a385fb96", + "getBorrowRate(uint256,uint256,uint256)": "15f24053", + "getSupplyRate(uint256,uint256,uint256,uint256)": "b8168816", + "isInterestRateModel()": "2191f92a", + "jumpMultiplierPerBlock()": "b9f9850a", + "kink()": "fd2da339", + "multiplierPerBlock()": "8726bb89", + "utilizationRate(uint256,uint256,uint256)": "6e71e2d8" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LeveredPositionFactory.json b/packages/sdk/deployments/bob/LeveredPositionFactory.json new file mode 100644 index 000000000..0cfea07c2 --- /dev/null +++ b/packages/sdk/deployments/bob/LeveredPositionFactory.json @@ -0,0 +1,940 @@ +{ + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_feeDistributor", + "type": "address", + "internalType": "contract IFeeDistributor" + }, + { + "name": "_registry", + "type": "address", + "internalType": "contract ILiquidatorsRegistry" + }, + { + "name": "_blocksPerYear", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "fallback", + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_listExtensions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_registerExtension", + "inputs": [ + { + "name": "extensionToAdd", + "type": "address", + "internalType": "contract DiamondExtension" + }, + { + "name": "extensionToReplace", + "type": "address", + "internalType": "contract DiamondExtension" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setLiquidatorsRegistry", + "inputs": [ + { + "name": "_liquidatorsRegistry", + "type": "address", + "internalType": "contract ILiquidatorsRegistry" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPairWhitelisted", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_stableMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_whitelisted", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "blocksPerYear", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "feeDistributor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IFeeDistributor" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidatorsRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ILiquidatorsRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "FunctionAlreadyAdded", + "inputs": [ + { + "name": "_functionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "_currentImpl", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "FunctionNotFound", + "inputs": [ + { + "name": "_functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + } + ], + "transactionHash": "0x3ace43a45d98cbf0c071a156175202a5c81f60337b32185ed5f4c7d8f1534b34", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "transactionIndex": 1, + "gasUsed": "1148266", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000400100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000000400000000000000000000000000000000000004000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000020000000000000000000", + "blockHash": "0x7a5bbefd574f966e9c3fcb2ff7a06ad68db4f991d73ce6c9baba9b3f0feae99b", + "transactionHash": "0x3ace43a45d98cbf0c071a156175202a5c81f60337b32185ed5f4c7d8f1534b34", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3778007, + "transactionHash": "0x3ace43a45d98cbf0c071a156175202a5c81f60337b32185ed5f4c7d8f1534b34", + "address": "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x7a5bbefd574f966e9c3fcb2ff7a06ad68db4f991d73ce6c9baba9b3f0feae99b" + } + ], + "blockNumber": 3778007, + "cumulativeGasUsed": "1192093", + "status": 1, + "byzantium": true + }, + "args": [ + "0x985a323A1CccA8Cd5fb8935590EE33FbcFE849d0", + "0xeC7D0330E86485474C13A2152Fa867ddd41Bb12B", + 15768000 + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "_feeDistributor", + "type": "address" + }, + { + "internalType": "contract ILiquidatorsRegistry", + "name": "_registry", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_blocksPerYear", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "_currentImpl", + "type": "address" + } + ], + "type": "error", + "name": "FunctionAlreadyAdded" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "type": "error", + "name": "FunctionNotFound" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_listExtensions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_registerExtension" + }, + { + "inputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "_liquidatorsRegistry", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setLiquidatorsRegistry" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "bool", + "name": "_whitelisted", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPairWhitelisted" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_registerExtension(address,address)": { + "details": "register a logic extension", + "params": { + "extensionToAdd": "the extension whose functions are to be added", + "extensionToReplace": "the extension whose functions are to be removed/replaced" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/levered/LeveredPositionFactory.sol": "LeveredPositionFactory" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/LeveredPositionFactory.sol": { + "keccak256": "0x46b4b9c8b3b669d7a0af3165c6109fc87bce87074cb5b85c5511c7694c828516", + "urls": [ + "bzz-raw://66f13c0409689ff6632e808d9e649360c6a73232e8c66428786a174937010224", + "dweb:/ipfs/QmfKXfyPaqhM3yoqtiW6awMJYpDEWmt5beRVKdAL4K1fum" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactoryStorage.sol": { + "keccak256": "0xec2c0858dfa3924ea09559bf081c579ff5b19a56ce36b2e986affad3e4f7cc4f", + "urls": [ + "bzz-raw://6973d7b17ad48d6f17fb9566c629b8db4abcd907d40c8085a01af647e5e1d016", + "dweb:/ipfs/QmVzc1JhAXMQY1Yr1EUc5rWfFTLZmB1aj8HRdnqehvVegh" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b506040516200136838038062001368833981016040819052620000349162000108565b6200003f3362000078565b600980546001600160a01b039485166001600160a01b031991821617909155600a805493909416921691909117909155600b5562000150565b600180546001600160a01b03191690556200009f81620000a2602090811b6200058117901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b03811681146200009f57600080fd5b6000806000606084860312156200011e57600080fd5b83516200012b81620000f2565b60208501519093506200013e81620000f2565b80925050604084015190509250925092565b61120880620001606000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638715b16b116100715780638715b16b146101a857806389cd9855146101bb5780638da5cb5b146101ce578063a385fb96146101df578063e30c3978146101f6578063f2fde38b14610207576100b4565b8063035d2a381461012b5780630d43e8ad1461014057806316bb997f146101705780636333d00114610183578063715018a61461019857806379ba5097146101a0575b60006100cb6000356001600160e01b03191661021a565b90506001600160a01b03811661010757604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610126573d6000f35b3d6000fd5b61013e610139366004610f07565b61023a565b005b600954610153906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600a54610153906001600160a01b031681565b61018b6103f7565b6040516101679190610f57565b61013e610406565b61013e610456565b61013e6101b6366004610fa4565b6104d0565b61013e6101c9366004610fc1565b6104fa565b6000546001600160a01b0316610153565b6101e8600b5481565b604051908152602001610167565b6001546001600160a01b0316610153565b61013e610215366004610fa4565b610510565b6000610234826000805160206111dc8339815191526105d1565b92915050565b610242610677565b816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a49190610ffa565b6001600160a01b0316836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030f9190610ffa565b6001600160a01b0316146103655760405162461bcd60e51b815260206004820152601c60248201527f6d61726b657473206e6f74206f66207468652073616d6520706f6f6c0000000060448201526064016100fe565b801561039f576103766005846106d3565b506001600160a01b038316600090815260076020526040902061039990836106d3565b50505050565b6001600160a01b03831660009081526007602052604090206103c190836106ef565b506001600160a01b03831660009081526007602052604090206103e390610704565b6103f2576103996005846106ef565b505050565b606061040161070e565b905090565b61040e610677565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064016100fe565b60015433906001600160a01b031681146104c45760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016100fe565b6104cd81610780565b50565b6104d8610677565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610502610677565b61050c8282610799565b5050565b610518610677565b600180546001600160a01b0383166001600160a01b031990911681179091556105496000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8054600090815b8181101561066c57846001600160e01b03191684600001828154811061060057610600611017565b600091825260209091200154600160a01b900460e01b6001600160e01b031916141561065a5783600001818154811061063b5761063b611017565b6000918252602090912001546001600160a01b03169250610234915050565b8061066481611043565b9150506105d8565b506000949350505050565b6000546001600160a01b031633146106d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016100fe565b565b60006106e8836001600160a01b0384166107ba565b9392505050565b60006106e8836001600160a01b038416610809565b6000610234825490565b60606000805160206111dc83398151915260010180548060200260200160405190810160405280929190818152602001828054801561077657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610758575b5050505050905090565b600180546001600160a01b03191690556104cd81610581565b6001600160a01b038116156107b1576107b1816108fc565b61050c82610a2c565b600081815260018301602052604081205461080157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610234565b506000610234565b600081815260018301602052604081205480156108f257600061082d60018361105e565b85549091506000906108419060019061105e565b90508181146108a657600086600001828154811061086157610861611017565b906000526020600020015490508087600001848154811061088457610884611017565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806108b7576108b7611075565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610234565b6000915050610234565b6000805160206111dc83398151915261091482610b24565b60005b600182015460ff821610156103f257826001600160a01b0316826001018260ff168154811061094857610948611017565b6000918252602090912001546001600160a01b03161415610a1a576001808301805490916109759161105e565b8154811061098557610985611017565b6000918252602090912001546001830180546001600160a01b039092169160ff84169081106109b6576109b6611017565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806109f7576109f7611075565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610a248161108b565b915050610917565b6000805160206111dc83398151915260005b600182015460ff82161015610ae457826001600160a01b0316826001018260ff1681548110610a6f57610a6f611017565b6000918252602090912001546001600160a01b03161415610ad25760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c726561647920616464656400000000000000000060448201526064016100fe565b80610adc8161108b565b915050610a3e565b50610aee82610ce3565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b8c91908101906110de565b90506000805160206111dc83398151915260005b82518161ffff161015610399576000838261ffff1681518110610bc557610bc5611017565b60200260200101519050610bd981846105d1565b6001600160a01b0316856001600160a01b031614610bf957610bf96111a3565b6000610c058285610e6a565b84549091508490610c189060019061105e565b81548110610c2857610c28611017565b90600052602060002001846000018261ffff1681548110610c4b57610c4b611017565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080610cac57610cac611075565b600082815260209020810160001990810180546001600160c01b031916905501905550819050610cdb816111b9565b915050610ba0565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d4b91908101906110de565b6000805160206111dc83398151915280549192509060005b8351811015610e63576000848281518110610d8057610d80611017565b602002602001015190506000610d9682866105d1565b90506001600160a01b03811615610ddb57604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b03821660248201526044016100fe565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b0319909216939092169290921791909117905583610e4b816111b9565b94505050508080610e5b90611043565b915050610d63565b5050505050565b8054600090815b8161ffff168161ffff161015610ee657846001600160e01b031916846000018261ffff1681548110610ea557610ea5611017565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610ed45791506102349050565b80610ede816111b9565b915050610e71565b5061ffff949350505050565b6001600160a01b03811681146104cd57600080fd5b600080600060608486031215610f1c57600080fd5b8335610f2781610ef2565b92506020840135610f3781610ef2565b915060408401358015158114610f4c57600080fd5b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f985783516001600160a01b031683529284019291840191600101610f73565b50909695505050505050565b600060208284031215610fb657600080fd5b81356106e881610ef2565b60008060408385031215610fd457600080fd5b8235610fdf81610ef2565b91506020830135610fef81610ef2565b809150509250929050565b60006020828403121561100c57600080fd5b81516106e881610ef2565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156110575761105761102d565b5060010190565b6000828210156110705761107061102d565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156110a2576110a261102d565b60010192915050565b634e487b7160e01b600052604160045260246000fd5b80516001600160e01b0319811681146110d957600080fd5b919050565b600060208083850312156110f157600080fd5b825167ffffffffffffffff8082111561110957600080fd5b818501915085601f83011261111d57600080fd5b81518181111561112f5761112f6110ab565b8060051b604051601f19603f83011681018181108582111715611154576111546110ab565b60405291825284820192508381018501918883111561117257600080fd5b938501935b8285101561119757611188856110c1565b84529385019392850192611177565b98975050505050505050565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156111d1576111d161102d565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000a", + "sourceMap": "849:1760:149:-:0;;;1163:233;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:470;719:10:484;936:18:470;:32::i;:::-;1286:14:149;:32;;-1:-1:-1;;;;;1286:32:149;;;-1:-1:-1;;;;;;1286:32:149;;;;;;;1324:19;:31;;;;;;;;;;;;;;;1361:13;:30;849:1760;;1496:153:471;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:148:504:-;-1:-1:-1;;;;;106:31:504;;96:42;;86:70;;152:1;149;142:12;167:535;310:6;318;326;379:2;367:9;358:7;354:23;350:32;347:52;;;395:1;392;385:12;347:52;427:9;421:16;446:48;488:5;446:48;:::i;:::-;563:2;548:18;;542:25;513:5;;-1:-1:-1;576:50:504;542:25;576:50;:::i;:::-;645:7;635:17;;;692:2;681:9;677:18;671:25;661:35;;167:535;;;;;:::o;:::-;849:1760:149;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638715b16b116100715780638715b16b146101a857806389cd9855146101bb5780638da5cb5b146101ce578063a385fb96146101df578063e30c3978146101f6578063f2fde38b14610207576100b4565b8063035d2a381461012b5780630d43e8ad1461014057806316bb997f146101705780636333d00114610183578063715018a61461019857806379ba5097146101a0575b60006100cb6000356001600160e01b03191661021a565b90506001600160a01b03811661010757604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610126573d6000f35b3d6000fd5b61013e610139366004610f07565b61023a565b005b600954610153906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600a54610153906001600160a01b031681565b61018b6103f7565b6040516101679190610f57565b61013e610406565b61013e610456565b61013e6101b6366004610fa4565b6104d0565b61013e6101c9366004610fc1565b6104fa565b6000546001600160a01b0316610153565b6101e8600b5481565b604051908152602001610167565b6001546001600160a01b0316610153565b61013e610215366004610fa4565b610510565b6000610234826000805160206111dc8339815191526105d1565b92915050565b610242610677565b816001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610280573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102a49190610ffa565b6001600160a01b0316836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061030f9190610ffa565b6001600160a01b0316146103655760405162461bcd60e51b815260206004820152601c60248201527f6d61726b657473206e6f74206f66207468652073616d6520706f6f6c0000000060448201526064016100fe565b801561039f576103766005846106d3565b506001600160a01b038316600090815260076020526040902061039990836106d3565b50505050565b6001600160a01b03831660009081526007602052604090206103c190836106ef565b506001600160a01b03831660009081526007602052604090206103e390610704565b6103f2576103996005846106ef565b505050565b606061040161070e565b905090565b61040e610677565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064016100fe565b60015433906001600160a01b031681146104c45760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b60648201526084016100fe565b6104cd81610780565b50565b6104d8610677565b600a80546001600160a01b0319166001600160a01b0392909216919091179055565b610502610677565b61050c8282610799565b5050565b610518610677565b600180546001600160a01b0383166001600160a01b031990911681179091556105496000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8054600090815b8181101561066c57846001600160e01b03191684600001828154811061060057610600611017565b600091825260209091200154600160a01b900460e01b6001600160e01b031916141561065a5783600001818154811061063b5761063b611017565b6000918252602090912001546001600160a01b03169250610234915050565b8061066481611043565b9150506105d8565b506000949350505050565b6000546001600160a01b031633146106d15760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016100fe565b565b60006106e8836001600160a01b0384166107ba565b9392505050565b60006106e8836001600160a01b038416610809565b6000610234825490565b60606000805160206111dc83398151915260010180548060200260200160405190810160405280929190818152602001828054801561077657602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610758575b5050505050905090565b600180546001600160a01b03191690556104cd81610581565b6001600160a01b038116156107b1576107b1816108fc565b61050c82610a2c565b600081815260018301602052604081205461080157508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155610234565b506000610234565b600081815260018301602052604081205480156108f257600061082d60018361105e565b85549091506000906108419060019061105e565b90508181146108a657600086600001828154811061086157610861611017565b906000526020600020015490508087600001848154811061088457610884611017565b6000918252602080832090910192909255918252600188019052604090208390555b85548690806108b7576108b7611075565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050610234565b6000915050610234565b6000805160206111dc83398151915261091482610b24565b60005b600182015460ff821610156103f257826001600160a01b0316826001018260ff168154811061094857610948611017565b6000918252602090912001546001600160a01b03161415610a1a576001808301805490916109759161105e565b8154811061098557610985611017565b6000918252602090912001546001830180546001600160a01b039092169160ff84169081106109b6576109b6611017565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b03160217905550816001018054806109f7576109f7611075565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610a248161108b565b915050610917565b6000805160206111dc83398151915260005b600182015460ff82161015610ae457826001600160a01b0316826001018260ff1681548110610a6f57610a6f611017565b6000918252602090912001546001600160a01b03161415610ad25760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c726561647920616464656400000000000000000060448201526064016100fe565b80610adc8161108b565b915050610a3e565b50610aee82610ce3565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610b64573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610b8c91908101906110de565b90506000805160206111dc83398151915260005b82518161ffff161015610399576000838261ffff1681518110610bc557610bc5611017565b60200260200101519050610bd981846105d1565b6001600160a01b0316856001600160a01b031614610bf957610bf96111a3565b6000610c058285610e6a565b84549091508490610c189060019061105e565b81548110610c2857610c28611017565b90600052602060002001846000018261ffff1681548110610c4b57610c4b611017565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080610cac57610cac611075565b600082815260209020810160001990810180546001600160c01b031916905501905550819050610cdb816111b9565b915050610ba0565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d23573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d4b91908101906110de565b6000805160206111dc83398151915280549192509060005b8351811015610e63576000848281518110610d8057610d80611017565b602002602001015190506000610d9682866105d1565b90506001600160a01b03811615610ddb57604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b03821660248201526044016100fe565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b0319909216939092169290921791909117905583610e4b816111b9565b94505050508080610e5b90611043565b915050610d63565b5050505050565b8054600090815b8161ffff168161ffff161015610ee657846001600160e01b031916846000018261ffff1681548110610ea557610ea5611017565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610ed45791506102349050565b80610ede816111b9565b915050610e71565b5061ffff949350505050565b6001600160a01b03811681146104cd57600080fd5b600080600060608486031215610f1c57600080fd5b8335610f2781610ef2565b92506020840135610f3781610ef2565b915060408401358015158114610f4c57600080fd5b809150509250925092565b6020808252825182820181905260009190848201906040850190845b81811015610f985783516001600160a01b031683529284019291840191600101610f73565b50909695505050505050565b600060208284031215610fb657600080fd5b81356106e881610ef2565b60008060408385031215610fd457600080fd5b8235610fdf81610ef2565b91506020830135610fef81610ef2565b809150509250929050565b60006020828403121561100c57600080fd5b81516106e881610ef2565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156110575761105761102d565b5060010190565b6000828210156110705761107061102d565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156110a2576110a261102d565b60010192915050565b634e487b7160e01b600052604160045260246000fd5b80516001600160e01b0319811681146110d957600080fd5b919050565b600060208083850312156110f157600080fd5b825167ffffffffffffffff8082111561110957600080fd5b818501915085601f83011261111d57600080fd5b81518181111561112f5761112f6110ab565b8060051b604051601f19603f83011681018181108582111715611154576111546110ab565b60405291825284820192508381018501918883111561117257600080fd5b938501935b8285101561119757611188856110c1565b84529385019392850192611177565b98975050505050505050565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156111d1576111d161102d565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000a", + "sourceMap": "849:1760:149:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1275:17:135;1295:43;1330:7;;-1:-1:-1;;;;;;1330:7:135;1295:34;:43::i;:::-;1275:63;-1:-1:-1;;;;;;1348:23:135;;1344:61;;1380:25;;-1:-1:-1;;;1380:25:135;;-1:-1:-1;;;;;;1397:7:135;;;1380:25;;;158:52:504;131:18;;1380:25:135;;;;;;;;1344:61;1586:14;1583:1;1580;1567:34;1726:1;1723;1707:14;1704:1;1693:9;1686:5;1673:55;1786:16;1783:1;1780;1765:38;1878:6;1891:52;;;;1978:16;1975:1;1968:27;1891:52;1918:16;1915:1;1908:27;1583:655:149;;;;;;:::i;:::-;;:::i;:::-;;1127:37:152;;;;;-1:-1:-1;;;;;1127:37:152;;;;;;-1:-1:-1;;;;;1177:32:504;;;1159:51;;1147:2;1132:18;1127:37:152;;;;;;;;1168:47;;;;;-1:-1:-1;;;;;1168:47:152;;;1134:111:135;;;:::i;:::-;;;;;;;:::i;174:106:139:-;;;:::i;1729:206:471:-;;;:::i;2242:148:149:-;;;;;;:::i;:::-;;:::i;2394:213::-;;;;;;:::i;:::-;;:::i;1201:85:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;1201:85;;1219:28:152;;;;;;;;;3230:25:504;;;3218:2;3203:18;1219:28:152;3084:177:504;842:99:471;921:13;;-1:-1:-1;;;;;921:13:471;842:99;;1134:178;;;;;;:::i;:::-;;:::i;2384:147:135:-;2455:7;2477:49;2501:6;-1:-1:-1;;;;;;;;;;;2477:23:135;:49::i;:::-;2470:56;2384:147;-1:-1:-1;;2384:147:135:o;1583:655:149:-;1094:13:470;:11;:13::i;:::-;1765::149::1;-1:-1:-1::0;;;;;1765:25:149::1;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1730:62:149::1;:17;-1:-1:-1::0;;;;;1730:29:149::1;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1730:62:149::1;;1722:103;;;::::0;-1:-1:-1;;;1722:103:149;;4020:2:504;1722:103:149::1;::::0;::::1;4002:21:504::0;4059:2;4039:18;;;4032:30;4098;4078:18;;;4071:58;4146:18;;1722:103:149::1;3818:352:504::0;1722:103:149::1;1836:12;1832:402;;;1858:49;:17;1888::::0;1858:21:::1;:49::i;:::-;-1:-1:-1::0;;;;;;1915:48:149;::::1;;::::0;;;:29:::1;:48;::::0;;;;:76:::1;::::0;1976:13;1915:52:::1;:76::i;:::-;;1583:655:::0;;;:::o;1832:402::-:1;-1:-1:-1::0;;;;;2012:48:149;::::1;;::::0;;;:29:::1;:48;::::0;;;;:79:::1;::::0;2076:13;2012:55:::1;:79::i;:::-;-1:-1:-1::0;;;;;;2103:48:149;::::1;;::::0;;;:29:::1;:48;::::0;;;;:57:::1;::::0;:55:::1;:57::i;:::-;2099:128;;2175:52;:17;2208::::0;2175:24:::1;:52::i;2099:128::-;1583:655:::0;;;:::o;1134:111:135:-;1182:16;1213:27;:25;:27::i;:::-;1206:34;;1134:111;:::o;174:106:139:-;1094:13:470;:11;:13::i;:::-;235:40:139::1;::::0;-1:-1:-1;;;235:40:139;;4377:2:504;235:40:139::1;::::0;::::1;4359:21:504::0;4416:2;4396:18;;;4389:30;4455:32;4435:18;;;4428:60;4505:18;;235:40:139::1;4175:354:504::0;1729:206:471;921:13;;719:10:484;;-1:-1:-1;;;;;921:13:471;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:471;;4736:2:504;1814:78:471;;;4718:21:504;4775:2;4755:18;;;4748:30;4814:34;4794:18;;;4787:62;-1:-1:-1;;;4865:18:504;;;4858:39;4914:19;;1814:78:471;4534:405:504;1814:78:471;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;2242:148:149:-;1094:13:470;:11;:13::i;:::-;2343:19:149::1;:42:::0;;-1:-1:-1;;;;;;2343:42:149::1;-1:-1:-1::0;;;;;2343:42:149;;;::::1;::::0;;;::::1;::::0;;2242:148::o;2394:213::-;1094:13:470;:11;:13::i;:::-;2538:64:149::1;2567:14;2583:18;2538:28;:64::i;:::-;2394:213:::0;;:::o;1134:178:471:-;1094:13:470;:11;:13::i;:::-;1223::471::1;:24:::0;;-1:-1:-1;;;;;1223:24:471;::::1;-1:-1:-1::0;;;;;;1223:24:471;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::470::0;1273:6;-1:-1:-1;;;;;1273:6:470;;1201:85;1287:7:471::1;-1:-1:-1::0;;;;;1262:43:471::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;5191:309:135:-;5321:19;;5289:7;;;5346:126;5370:6;5366:1;:10;5346:126;;;5423:8;-1:-1:-1;;;;;5395:36:135;;:2;:12;;5408:1;5395:15;;;;;;;;:::i;:::-;;;;;;;;;;:24;-1:-1:-1;;;5395:24:135;;;;-1:-1:-1;;;;;;5395:36:135;;5391:74;;;5440:2;:12;;5453:1;5440:15;;;;;;;;:::i;:::-;;;;;;;;;;:25;-1:-1:-1;;;;;5440:25:135;;-1:-1:-1;5433:32:135;;-1:-1:-1;;5433:32:135;5391:74;5378:3;;;;:::i;:::-;;;;5346:126;;;-1:-1:-1;5493:1:135;;5191:309;-1:-1:-1;;;;5191:309:135:o;1359:130:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;719:10:484;1422:23:470;1414:68;;;;-1:-1:-1;;;1414:68:470;;5550:2:504;1414:68:470;;;5532:21:504;;;5569:18;;;5562:30;5628:34;5608:18;;;5601:62;5680:18;;1414:68:470;5348:356:504;1414:68:470;1359:130::o;8297:150:487:-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:487;;8390:4;:50::i;:::-;8383:57;8297:150;-1:-1:-1;;;8297:150:487:o;8615:156::-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:487;;8711:7;:53::i;9098:115::-;9161:7;9187:19;9195:3;4537:18;;4455:107;2714:112:135;2763:16;-1:-1:-1;;;;;;;;;;;2794:27:135;;2787:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2787:34:135;;;;;;;;;;;;;;;;;;;;;;;2714:112;:::o;1496:153:471:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;:34::i;2830:247:135:-;-1:-1:-1;;;;;2946:41:135;;;2942:97;;2997:35;3013:18;2997:15;:35::i;:::-;3044:28;3057:14;3044:12;:28::i;2206:404:487:-;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:487;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:487;2581:12;;2778:1388;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:487;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;3081:430:135;-1:-1:-1;;;;;;;;;;;3253:35:135;3278:9;3253:24;:35::i;:::-;3299:7;3294:213;3316:13;;;:20;3312:24;;;;3294:213;;;3383:9;-1:-1:-1;;;;;3355:38:135;:2;:13;;3369:1;3355:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3355:16:135;:38;3351:150;;;3424:13;;;;3438:20;;3424:13;;3438:24;;;:::i;:::-;3424:39;;;;;;;;:::i;:::-;;;;;;;;;;;;3405:13;;:16;;-1:-1:-1;;;;;3424:39:135;;;;3405:16;;;;;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1;;;;;3405:58:135;;;;;-1:-1:-1;;;;;3405:58:135;;;;;;3473:2;:13;;:19;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;3473:19:135;;;;;-1:-1:-1;;;;;;3473:19:135;;;;;;3351:150;3338:3;;;;:::i;:::-;;;;3294:213;;3515:337;-1:-1:-1;;;;;;;;;;;3580:23:135;3628:138;3650:13;;;:20;3646:24;;;;3628:138;;;3721:9;-1:-1:-1;;;;;3693:38:135;:2;:13;;3707:1;3693:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3693:16:135;:38;;3685:74;;;;-1:-1:-1;;;3685:74:135;;6353:2:504;3685:74:135;;;6335:21:504;6392:2;6372:18;;;6365:30;6431:25;6411:18;;;6404:53;6474:18;;3685:74:135;6151:347:504;3685:74:135;3672:3;;;;:::i;:::-;;;;3628:138;;;;3771:32;3793:9;3771:21;:32::i;:::-;3809:13;;;;:38;;;;;;;-1:-1:-1;3809:38:135;;;;;;;;;-1:-1:-1;;;;;;3809:38:135;-1:-1:-1;;;;;3809:38:135;;;;;;;;;;3515:337::o;3856:672::-;3933:27;3963:9;-1:-1:-1;;;;;3963:32:135;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3963:34:135;;;;;;;;;;;;:::i;:::-;3933:64;-1:-1:-1;;;;;;;;;;;;4003:23:135;4051:473;4074:11;:18;4070:1;:22;;;4051:473;;;4107:23;4133:11;4145:1;4133:14;;;;;;;;;;:::i;:::-;;;;;;;4107:40;;4209:45;4233:16;4251:2;4209:23;:45::i;:::-;-1:-1:-1;;;;;4187:67:135;4195:9;-1:-1:-1;;;;;4187:67:135;;4180:75;;;;:::i;:::-;4356:18;4377:41;4397:16;4415:2;4377:19;:41::i;:::-;4467:19;;4356:62;;-1:-1:-1;4454:2:135;;4467:23;;4489:1;;4467:23;:::i;:::-;4454:37;;;;;;;;:::i;:::-;;;;;;;;4426:2;:12;;4439:11;4426:25;;;;;;;;;;:::i;:::-;;;;;;;;;:65;;:25;;:65;;-1:-1:-1;;;;;4426:65:135;;;-1:-1:-1;;;;;;4426:65:135;;;;;;;;-1:-1:-1;;;;;;4426:65:135;;;;;;-1:-1:-1;;;4426:65:135;;;;;;;;;;;;4499:18;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;4499:18:135;;;;;-1:-1:-1;;;;;;4499:18:135;;;;;;-1:-1:-1;4094:3:135;;-1:-1:-1;4094:3:135;;;:::i;:::-;;;;4051:473;;4532:655;4606:24;4633:9;-1:-1:-1;;;;;4633:32:135;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4633:34:135;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;4752:19:135;;4606:61;;-1:-1:-1;2182:47:135;4673:23;4778:405;4828:8;:15;4811:14;:32;4778:405;;;4871:15;4889:8;4898:14;4889:24;;;;;;;;:::i;:::-;;;;;;;4871:42;;4921:25;4949:37;4973:8;4983:2;4949:23;:37::i;:::-;4921:65;-1:-1:-1;;;;;;4998:31:135;;;4994:93;;5038:49;;-1:-1:-1;;;5038:49:135;;-1:-1:-1;;;;;;8473:33:504;;5038:49:135;;;8455:52:504;-1:-1:-1;;;;;8543:32:504;;8523:18;;;8516:60;8428:18;;5038:49:135;8283:299:504;4994:93:135;5113:38;;;;;;;;;-1:-1:-1;;;;;5113:38:135;;;;;-1:-1:-1;;;;;;5113:38:135;;;;;;;;;5095:57;;;;;;;:12;:57;;;;;;;;;;;;;;;;;-1:-1:-1;;;5095:57:135;-1:-1:-1;;;;;;5095:57:135;;;;;;;;;;;;;;;;;5160:16;;;;:::i;:::-;;;;4863:320;;4845:16;;;;;:::i;:::-;;;;4778:405;;;;4600:587;;;4532:655;:::o;5504:292::-;5635:19;;5598:6;;;5661:101;5684:6;5680:10;;:1;:10;;;5661:101;;;5737:8;-1:-1:-1;;;;;5709:36:135;;:2;:12;;5722:1;5709:15;;;;;;;;;;:::i;:::-;;;;;;;;;;:24;-1:-1:-1;;;5709:24:135;;;;-1:-1:-1;;;;;;5709:36:135;;5705:50;;;5754:1;-1:-1:-1;5747:8:135;;-1:-1:-1;5747:8:135;5705:50;5692:3;;;;:::i;:::-;;;;5661:101;;;-1:-1:-1;5775:16:135;;5504:292;-1:-1:-1;;;;5504:292:135:o;221:140:504:-;-1:-1:-1;;;;;305:31:504;;295:42;;285:70;;351:1;348;341:12;366:609;474:6;482;490;543:2;531:9;522:7;518:23;514:32;511:52;;;559:1;556;549:12;511:52;598:9;585:23;617:40;651:5;617:40;:::i;:::-;676:5;-1:-1:-1;733:2:504;718:18;;705:32;746:42;705:32;746:42;:::i;:::-;807:7;-1:-1:-1;866:2:504;851:18;;838:32;908:15;;901:23;889:36;;879:64;;939:1;936;929:12;879:64;962:7;952:17;;;366:609;;;;;:::o;1459:658::-;1630:2;1682:21;;;1752:13;;1655:18;;;1774:22;;;1601:4;;1630:2;1853:15;;;;1827:2;1812:18;;;1601:4;1896:195;1910:6;1907:1;1904:13;1896:195;;;1975:13;;-1:-1:-1;;;;;1971:39:504;1959:52;;2066:15;;;;2031:12;;;;2007:1;1925:9;1896:195;;;-1:-1:-1;2108:3:504;;1459:658;-1:-1:-1;;;;;;1459:658:504:o;2122:286::-;2211:6;2264:2;2252:9;2243:7;2239:23;2235:32;2232:52;;;2280:1;2277;2270:12;2232:52;2319:9;2306:23;2338:40;2372:5;2338:40;:::i;2413:458::-;2533:6;2541;2594:2;2582:9;2573:7;2569:23;2565:32;2562:52;;;2610:1;2607;2600:12;2562:52;2649:9;2636:23;2668:40;2702:5;2668:40;:::i;:::-;2727:5;-1:-1:-1;2784:2:504;2769:18;;2756:32;2797:42;2756:32;2797:42;:::i;:::-;2858:7;2848:17;;;2413:458;;;;;:::o;3527:286::-;3623:6;3676:2;3664:9;3655:7;3651:23;3647:32;3644:52;;;3692:1;3689;3682:12;3644:52;3724:9;3718:16;3743:40;3777:5;3743:40;:::i;4944:127::-;5005:10;5000:3;4996:20;4993:1;4986:31;5036:4;5033:1;5026:15;5060:4;5057:1;5050:15;5076:127;5137:10;5132:3;5128:20;5125:1;5118:31;5168:4;5165:1;5158:15;5192:4;5189:1;5182:15;5208:135;5247:3;-1:-1:-1;;5268:17:504;;5265:43;;;5288:18;;:::i;:::-;-1:-1:-1;5335:1:504;5324:13;;5208:135::o;5709:125::-;5749:4;5777:1;5774;5771:8;5768:34;;;5782:18;;:::i;:::-;-1:-1:-1;5819:9:504;;5709:125::o;5839:127::-;5900:10;5895:3;5891:20;5888:1;5881:31;5931:4;5928:1;5921:15;5955:4;5952:1;5945:15;5971:175;6008:3;6052:4;6045:5;6041:16;6081:4;6072:7;6069:17;6066:43;;;6089:18;;:::i;:::-;6138:1;6125:15;;5971:175;-1:-1:-1;;5971:175:504:o;6503:127::-;6564:10;6559:3;6555:20;6552:1;6545:31;6595:4;6592:1;6585:15;6619:4;6616:1;6609:15;6635:177;6713:13;;-1:-1:-1;;;;;;6755:32:504;;6745:43;;6735:71;;6802:1;6799;6792:12;6735:71;6635:177;;;:::o;6817:1127::-;6911:6;6942:2;6985;6973:9;6964:7;6960:23;6956:32;6953:52;;;7001:1;6998;6991:12;6953:52;7034:9;7028:16;7063:18;7104:2;7096:6;7093:14;7090:34;;;7120:1;7117;7110:12;7090:34;7158:6;7147:9;7143:22;7133:32;;7203:7;7196:4;7192:2;7188:13;7184:27;7174:55;;7225:1;7222;7215:12;7174:55;7254:2;7248:9;7276:2;7272;7269:10;7266:36;;;7282:18;;:::i;:::-;7328:2;7325:1;7321:10;7360:2;7354:9;7423:2;7419:7;7414:2;7410;7406:11;7402:25;7394:6;7390:38;7478:6;7466:10;7463:22;7458:2;7446:10;7443:18;7440:46;7437:72;;;7489:18;;:::i;:::-;7525:2;7518:22;7575:18;;;7609:15;;;;-1:-1:-1;7651:11:504;;;7647:20;;;7679:19;;;7676:39;;;7711:1;7708;7701:12;7676:39;7735:11;;;;7755:158;7771:6;7766:3;7763:15;7755:158;;;7837:33;7866:3;7837:33;:::i;:::-;7825:46;;7788:12;;;;7891;;;;7755:158;;;7932:6;6817:1127;-1:-1:-1;;;;;;;;6817:1127:504:o;7949:127::-;8010:10;8005:3;8001:20;7998:1;7991:31;8041:4;8038:1;8031:15;8065:4;8062:1;8055:15;8081:197;8119:3;8147:6;8188:2;8181:5;8177:14;8215:2;8206:7;8203:15;8200:41;;;8221:18;;:::i;:::-;8270:1;8257:15;;8081:197;-1:-1:-1;;;8081:197:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_listExtensions()": "6333d001", + "_registerExtension(address,address)": "89cd9855", + "_setLiquidatorsRegistry(address)": "8715b16b", + "_setPairWhitelisted(address,address,bool)": "035d2a38", + "acceptOwnership()": "79ba5097", + "blocksPerYear()": "a385fb96", + "feeDistributor()": "0d43e8ad", + "liquidatorsRegistry()": "16bb997f", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LeveredPositionFactoryFirstExtension.json b/packages/sdk/deployments/bob/LeveredPositionFactoryFirstExtension.json new file mode 100644 index 000000000..6d531e25a --- /dev/null +++ b/packages/sdk/deployments/bob/LeveredPositionFactoryFirstExtension.json @@ -0,0 +1,1248 @@ +{ + "address": "0x5d74800e977bFc8E14Eca28C9405BacbD091738E", + "abi": [ + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "blocksPerYear", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "closeAndRemoveUserPosition", + "inputs": [ + { + "name": "position", + "type": "address", + "internalType": "contract LeveredPosition" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "feeDistributor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IFeeDistributor" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAccountsWithOpenPositions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBorrowableMarketsByCollateral", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMinBorrowNative", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPositionsByAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "positions", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "closed", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPositionsExtension", + "inputs": [ + { + "name": "msgSig", + "type": "bytes4", + "internalType": "bytes4" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRedemptionStrategies", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IRedemptionStrategy[]" + }, + { + "name": "strategiesData", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWhitelistedCollateralMarkets", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidatorsRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ILiquidatorsRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeClosedPosition", + "inputs": [ + { + "name": "closedPosition", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "NoSuchPosition", + "inputs": [] + }, + { + "type": "error", + "name": "PairNotWhitelisted", + "inputs": [] + }, + { + "type": "error", + "name": "PositionNotClosed", + "inputs": [] + } + ], + "transactionHash": "0xd2b5ca2b4b895078d079f1f4cfe01fea5afaea06d91252cc5407820842c969ac", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x5d74800e977bFc8E14Eca28C9405BacbD091738E", + "transactionIndex": 1, + "gasUsed": "1123353", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000100020000000000000000000800000000000000000000000000400000400000000000000000000000000000100000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7dbec6183b6d89da611d9c8a4b2d491d66fe219fe6f6b9cd755d30c0720f6599", + "transactionHash": "0xd2b5ca2b4b895078d079f1f4cfe01fea5afaea06d91252cc5407820842c969ac", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3778012, + "transactionHash": "0xd2b5ca2b4b895078d079f1f4cfe01fea5afaea06d91252cc5407820842c969ac", + "address": "0x5d74800e977bFc8E14Eca28C9405BacbD091738E", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x7dbec6183b6d89da611d9c8a4b2d491d66fe219fe6f6b9cd755d30c0720f6599" + } + ], + "blockNumber": 3778012, + "cumulativeGasUsed": "1167192", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "type": "error", + "name": "NoSuchPosition" + }, + { + "inputs": [], + "type": "error", + "name": "PairNotWhitelisted" + }, + { + "inputs": [], + "type": "error", + "name": "PositionNotClosed" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "position", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "closeAndRemoveUserPosition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAccountsWithOpenPositions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowableMarketsByCollateral", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getMinBorrowNative", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPositionsByAccount", + "outputs": [ + { + "internalType": "address[]", + "name": "positions", + "type": "address[]" + }, + { + "internalType": "bool[]", + "name": "closed", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "msgSig", + "type": "bytes4" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPositionsExtension", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRedemptionStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategiesData", + "type": "bytes[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getWhitelistedCollateralMarkets", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "closedPosition", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeClosedPosition", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/levered/LeveredPositionFactoryFirstExtension.sol": "LeveredPositionFactoryFirstExtension" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/compound/ICToken.sol": { + "keccak256": "0xd90b56c414ed688746f99b939cd2550cd1a646996ed7ee020f95877068324c48", + "urls": [ + "bzz-raw://73318f893d20ec8720226ed2bd0f3937d0a78050b77e368065edae1ba648a2e3", + "dweb:/ipfs/QmRVMeofs12tydFoWyyfGVX2s8uzD5JkGd3CXmRLRAGcbp" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IComptroller.sol": { + "keccak256": "0x3ca179bd72163f50f68d15175625f68e4892df753851afdb60fda626c85fa763", + "urls": [ + "bzz-raw://666ca145270cce0ee54f2856915c39383e6dd2ea06013cd6cf83a11e084468a8", + "dweb:/ipfs/QmaKtT9AYojeWsBPjWf5DuFxBWpXLkyTT5YnumgPXLm1bK" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IPriceOracle.sol": { + "keccak256": "0x501ba6588dc3bbcbcd7629eb294b2249dce97cb78e1c78feb1815d220b488368", + "urls": [ + "bzz-raw://19fa30ac47cf668858b1d9e8842e1a2d9a6c8bbae85bc12ce8a0f1bbe0868559", + "dweb:/ipfs/QmYuypErSBwLnNWjUBZiBvp5xJ95DxbBDCvCSnE3NZjaev" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IRewardsDistributor.sol": { + "keccak256": "0x175299449a462109cf22ec786c1bcc820f16eba8052dcfa621e65666e657e3f3", + "urls": [ + "bzz-raw://4986563cd770103066f69b5e86331a4bbbefc4337f94a260a46545da4416d858", + "dweb:/ipfs/Qmd64tG56C3DS5gGHebbTEZi1TM6SXG1Ahot7paYjH8gKF" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IUnitroller.sol": { + "keccak256": "0x629111448df95d5f4c6cae88cd8fceb67537af80e82f643e697d2dd4c22e1c49", + "urls": [ + "bzz-raw://6cf120d715430134deccb0add41e71c92618843aba8bac15135e96fb912b0424", + "dweb:/ipfs/QmaSRgMRrG8n5Ck4pZNaHj6LArRDGCnQ9wQhpL7WZ9MT6e" + ], + "license": "BSD-3-Clause" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/IFlashLoanReceiver.sol": { + "keccak256": "0x3db1dbf3e47975f60cccc859740aa84665d9fd683079c7329285008502c454da", + "urls": [ + "bzz-raw://89727af88e6d376eced9a6ea97c3da80d6c801198f133d9d6b887894f7b8ab00", + "dweb:/ipfs/QmVS7Thpbkt3RGi4UsKev94BJdLstHiGHrGk1mPXadSqS2" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/ILeveredPositionFactory.sol": { + "keccak256": "0x422831aefc6bc1edc9864205bf710620d25b9e4d8138bcf5c13020fe3738f103", + "urls": [ + "bzz-raw://d05924628c79254bdeb073a2791e1b82c5cae603015dbeb138f87267fd886c3b", + "dweb:/ipfs/QmbP4oeh1TksPdLMPEM1SzSZaeCF7bCX99ycNuo4ezPPGZ" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/LeveredPosition.sol": { + "keccak256": "0x7313f8b1f26bc2ee299926399992dde9eccb7fd4a37504699481874163d093ea", + "urls": [ + "bzz-raw://077f337985aa2c8d5aa6cb306c1214e82992bdeb519cfaa396c92dc892f7f25d", + "dweb:/ipfs/QmQcLA9ULKaKSHD8LDJYVpaQLroybuBtKywWKSjskSfjF7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactoryFirstExtension.sol": { + "keccak256": "0xe726bb36c895e102c6b3b2eda228c4bd95bf7126c02fcbdb35c950fc82aa4324", + "urls": [ + "bzz-raw://568ac3e6f77a5ccae209f42d13d6d1e9245951f98934ac44e455d98cba36949f", + "dweb:/ipfs/QmVaKYPrPRuAwyMvfxaeycSqXzHZzscRbfWxjDqTYfaeiJ" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactoryStorage.sol": { + "keccak256": "0xec2c0858dfa3924ea09559bf081c579ff5b19a56ce36b2e986affad3e4f7cc4f", + "urls": [ + "bzz-raw://6973d7b17ad48d6f17fb9566c629b8db4abcd907d40c8085a01af647e5e1d016", + "dweb:/ipfs/QmVzc1JhAXMQY1Yr1EUc5rWfFTLZmB1aj8HRdnqehvVegh" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionStorage.sol": { + "keccak256": "0xe3342347e2315c9a7a8503ef7ba83390f1cd296318a50952a88d984af940e430", + "urls": [ + "bzz-raw://e6245ac45d4f691c1565e1f7228e475dcfa012ac5394a5b3142e1437efc33ba5", + "dweb:/ipfs/Qme2VMo4kP4DpANSZVrsAYYF8bEq9aySjMveDo1y7iMMC7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheel.sol": { + "keccak256": "0x8d4dc0e54619cbf9d7a503c9664163c55dbfbd43dc4ec6c5156711a5fd6bee34", + "urls": [ + "bzz-raw://90e2282f7bc72e65c084f40eee44e77f5a59a0702b66222595c417d078094cd5", + "dweb:/ipfs/QmY6jo9jnqeQsD8S6vSSWWT7NJdsXpVQZQh6Vaq6ZZo5QA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5061001a3361001f565b610096565b600180546001600160a01b031916905561004381610046602090811b610a0617901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6112d8806100a56000396000f3fe608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063d337a1da11610071578063d337a1da1461022e578063e30c397814610241578063ed287f3f14610252578063f2fde38b14610273578063f4e610661461028657600080fd5b80638da5cb5b146101e9578063a339d751146101fa578063a385fb9614610202578063ca2de6bc1461020b57600080fd5b806316bb997f116100e957806316bb997f1461019b578063715018a6146101ae57806379ba5097146101b857806386ef7482146101c057806389f8132e146101d457600080fd5b80630973e9161461011b5780630d43e8ad146101455780630da2262c1461017057806312468b7714610186575b600080fd5b61012e610129366004610d62565b610299565b60405161013c929190610dc3565b60405180910390f35b600954610158906001600160a01b031681565b6040516001600160a01b03909116815260200161013c565b6101786103c8565b60405190815260200161013c565b61018e61043b565b60405161013c9190610e1c565b600a54610158906001600160a01b031681565b6101b6610447565b005b6101b661049c565b6101586101ce366004610e2f565b50600090565b6101dc610516565b60405161013c9190610e59565b6000546001600160a01b0316610158565b61018e6107e0565b610178600b5481565b61021e610219366004610d62565b6107ec565b604051901515815260200161013c565b61021e61023c366004610d62565b6107f8565b6001546001600160a01b0316610158565b610265610260366004610ea7565b6108e8565b60405161013c929190610f10565b6101b6610281366004610d62565b610971565b61018e610294366004610d62565b6109e2565b6001600160a01b038116600090815260046020526040902060609081906102bf90610a56565b9150815167ffffffffffffffff8111156102db576102db610fc9565b604051908082528060200260200182016040528015610304578160200160208202803683370190505b50905060005b82518110156103c25782818151811061032557610325610fdf565b60200260200101516001600160a01b0316633e2f147f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561036a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038e9190610ff5565b8282815181106103a0576103a0610fdf565b91151560209283029190910190910152806103ba8161102d565b91505061030a565b50915091565b6009546040805163fdb25fb160e01b815290516000926001600160a01b03169163fdb25fb19160048083019260209291908290030181865afa158015610412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104369190611048565b905090565b60606104366002610a56565b61044f610a63565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b0316811461050a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610493565b61051381610abf565b50565b60408051600980825261014082019092526060919060009082602082016101208036833701905050905063328b79af60e21b8161055284611061565b93508360ff168151811061056857610568610fdf565b6001600160e01b03199092166020928302919091019091015263699bd0ed60e11b8161059384611061565b93508360ff16815181106105a9576105a9610fdf565b6001600160e01b031990921660209283029190910190910152630368898b60e21b816105d484611061565b93508360ff16815181106105ea576105ea610fdf565b6001600160e01b03199092166020928302919091019091015263ed287f3f60e01b8161061584611061565b93508360ff168151811061062b5761062b610fdf565b6001600160e01b031990921660209283029190910190910152637a73083360e11b8161065684611061565b93508360ff168151811061066c5761066c610fdf565b6001600160e01b03199092166020928302919091019091015263a339d75160e01b8161069784611061565b93508360ff16815181106106ad576106ad610fdf565b6001600160e01b0319909216602092830291909101909101526312468b7760e01b816106d884611061565b93508360ff16815181106106ee576106ee610fdf565b6001600160e01b0319909216602092830291909101909101526304b9f48b60e11b8161071984611061565b93508360ff168151811061072f5761072f610fdf565b6001600160e01b031990921660209283029190910190910152634377ba4160e11b8161075a84611061565b93508360ff168151811061077057610770610fdf565b6001600160e01b03199092166020928302919091019091015260ff8216156107da5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610493565b92915050565b60606104366005610a56565b60006107da8233610ad8565b6000610802610a63565b6000826001600160a01b031663cb2af14b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610866919061107e565b604051632f86e2dd60e01b81526001600160a01b03808316600483015291925090841690632f86e2dd906024016020604051808303816000875af11580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190611048565b506108e18382610ad8565b9392505050565b600a5460405163ed287f3f60e01b81526001600160a01b0384811660048301528381166024830152606092839291169063ed287f3f90604401600060405180830381865afa15801561093e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096691908101906111d9565b915091509250929050565b610979610a63565b600180546001600160a01b0383166001600160a01b031990911681179091556109aa6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03811660009081526007602052604090206060906107da90610a56565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006108e183610bdf565b6000546001600160a01b03163314610abd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610493565b565b600180546001600160a01b031916905561051381610a06565b6001600160a01b0381166000908152600460205260408120610b1681856001600160a01b031660009081526001919091016020526040902054151590565b610b3357604051632af0900d60e21b815260040160405180910390fd5b836001600160a01b0316633e2f147f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b959190610ff5565b610bb2576040516345916a4760e11b815260040160405180910390fd5b610bbc8185610c3b565b9150610bc781610c50565b610bd857610bd6600284610c3b565b505b5092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c2f57602002820191906000526020600020905b815481526020019060010190808311610c1b575b50505050509050919050565b60006108e1836001600160a01b038416610c5a565b60006107da825490565b60008181526001830160205260408120548015610d43576000610c7e60018361129e565b8554909150600090610c929060019061129e565b9050818114610cf7576000866000018281548110610cb257610cb2610fdf565b9060005260206000200154905080876000018481548110610cd557610cd5610fdf565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610d0857610d086112b5565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107da565b60009150506107da565b6001600160a01b038116811461051357600080fd5b600060208284031215610d7457600080fd5b81356108e181610d4d565b600081518084526020808501945080840160005b83811015610db85781516001600160a01b031687529582019590820190600101610d93565b509495945050505050565b604081526000610dd66040830185610d7f565b82810360208481019190915284518083528582019282019060005b81811015610e0f578451151583529383019391830191600101610df1565b5090979650505050505050565b6020815260006108e16020830184610d7f565b600060208284031215610e4157600080fd5b81356001600160e01b0319811681146108e157600080fd5b6020808252825182820181905260009190848201906040850190845b81811015610e9b5783516001600160e01b03191683529284019291840191600101610e75565b50909695505050505050565b60008060408385031215610eba57600080fd5b8235610ec581610d4d565b91506020830135610ed581610d4d565b809150509250929050565b60005b83811015610efb578181015183820152602001610ee3565b83811115610f0a576000848401525b50505050565b604080825283519082018190526000906020906060840190828701845b82811015610f525781516001600160a01b031684529284019290840190600101610f2d565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015610fba57601f198087850301865282518051808652610f9c818b88018c8501610ee0565b96890196601f01909116939093018701925090860190600101610f74565b50909998505050505050505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561100757600080fd5b815180151581146108e157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561104157611041611017565b5060010190565b60006020828403121561105a57600080fd5b5051919050565b600060ff82168061107457611074611017565b6000190192915050565b60006020828403121561109057600080fd5b81516108e181610d4d565b604051601f8201601f1916810167ffffffffffffffff811182821017156110c4576110c4610fc9565b604052919050565b600067ffffffffffffffff8211156110e6576110e6610fc9565b5060051b60200190565b6000601f838184011261110257600080fd5b82516020611117611112836110cc565b61109b565b82815260059290921b8501810191818101908784111561113657600080fd5b8287015b848110156111cd57805167ffffffffffffffff8082111561115b5760008081fd5b818a0191508a603f8301126111705760008081fd5b8582015160408282111561118657611186610fc9565b611197828b01601f1916890161109b565b92508183528c818386010111156111ae5760008081fd5b6111bd82898501838701610ee0565b505084525091830191830161113a565b50979650505050505050565b600080604083850312156111ec57600080fd5b825167ffffffffffffffff8082111561120457600080fd5b818501915085601f83011261121857600080fd5b81516020611228611112836110cc565b82815260059290921b8401810191818101908984111561124757600080fd5b948201945b8386101561126e57855161125f81610d4d565b8252948201949082019061124c565b9188015191965090935050508082111561128757600080fd5b50611294858286016110f0565b9150509250929050565b6000828210156112b0576112b0611017565b500390565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080a000a", + "sourceMap": "1041:3986:150:-:0;;;;;;;;;;;;-1:-1:-1;936:32:470;719:10:484;936:18:470;:32::i;:::-;1041:3986:150;;1496:153:471;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1041:3986:150:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101165760003560e01c80638da5cb5b116100a2578063d337a1da11610071578063d337a1da1461022e578063e30c397814610241578063ed287f3f14610252578063f2fde38b14610273578063f4e610661461028657600080fd5b80638da5cb5b146101e9578063a339d751146101fa578063a385fb9614610202578063ca2de6bc1461020b57600080fd5b806316bb997f116100e957806316bb997f1461019b578063715018a6146101ae57806379ba5097146101b857806386ef7482146101c057806389f8132e146101d457600080fd5b80630973e9161461011b5780630d43e8ad146101455780630da2262c1461017057806312468b7714610186575b600080fd5b61012e610129366004610d62565b610299565b60405161013c929190610dc3565b60405180910390f35b600954610158906001600160a01b031681565b6040516001600160a01b03909116815260200161013c565b6101786103c8565b60405190815260200161013c565b61018e61043b565b60405161013c9190610e1c565b600a54610158906001600160a01b031681565b6101b6610447565b005b6101b661049c565b6101586101ce366004610e2f565b50600090565b6101dc610516565b60405161013c9190610e59565b6000546001600160a01b0316610158565b61018e6107e0565b610178600b5481565b61021e610219366004610d62565b6107ec565b604051901515815260200161013c565b61021e61023c366004610d62565b6107f8565b6001546001600160a01b0316610158565b610265610260366004610ea7565b6108e8565b60405161013c929190610f10565b6101b6610281366004610d62565b610971565b61018e610294366004610d62565b6109e2565b6001600160a01b038116600090815260046020526040902060609081906102bf90610a56565b9150815167ffffffffffffffff8111156102db576102db610fc9565b604051908082528060200260200182016040528015610304578160200160208202803683370190505b50905060005b82518110156103c25782818151811061032557610325610fdf565b60200260200101516001600160a01b0316633e2f147f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561036a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061038e9190610ff5565b8282815181106103a0576103a0610fdf565b91151560209283029190910190910152806103ba8161102d565b91505061030a565b50915091565b6009546040805163fdb25fb160e01b815290516000926001600160a01b03169163fdb25fb19160048083019260209291908290030181865afa158015610412573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104369190611048565b905090565b60606104366002610a56565b61044f610a63565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b0316811461050a5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610493565b61051381610abf565b50565b60408051600980825261014082019092526060919060009082602082016101208036833701905050905063328b79af60e21b8161055284611061565b93508360ff168151811061056857610568610fdf565b6001600160e01b03199092166020928302919091019091015263699bd0ed60e11b8161059384611061565b93508360ff16815181106105a9576105a9610fdf565b6001600160e01b031990921660209283029190910190910152630368898b60e21b816105d484611061565b93508360ff16815181106105ea576105ea610fdf565b6001600160e01b03199092166020928302919091019091015263ed287f3f60e01b8161061584611061565b93508360ff168151811061062b5761062b610fdf565b6001600160e01b031990921660209283029190910190910152637a73083360e11b8161065684611061565b93508360ff168151811061066c5761066c610fdf565b6001600160e01b03199092166020928302919091019091015263a339d75160e01b8161069784611061565b93508360ff16815181106106ad576106ad610fdf565b6001600160e01b0319909216602092830291909101909101526312468b7760e01b816106d884611061565b93508360ff16815181106106ee576106ee610fdf565b6001600160e01b0319909216602092830291909101909101526304b9f48b60e11b8161071984611061565b93508360ff168151811061072f5761072f610fdf565b6001600160e01b031990921660209283029190910190910152634377ba4160e11b8161075a84611061565b93508360ff168151811061077057610770610fdf565b6001600160e01b03199092166020928302919091019091015260ff8216156107da5760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610493565b92915050565b60606104366005610a56565b60006107da8233610ad8565b6000610802610a63565b6000826001600160a01b031663cb2af14b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610842573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610866919061107e565b604051632f86e2dd60e01b81526001600160a01b03808316600483015291925090841690632f86e2dd906024016020604051808303816000875af11580156108b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108d69190611048565b506108e18382610ad8565b9392505050565b600a5460405163ed287f3f60e01b81526001600160a01b0384811660048301528381166024830152606092839291169063ed287f3f90604401600060405180830381865afa15801561093e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261096691908101906111d9565b915091509250929050565b610979610a63565b600180546001600160a01b0383166001600160a01b031990911681179091556109aa6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b6001600160a01b03811660009081526007602052604090206060906107da90610a56565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b606060006108e183610bdf565b6000546001600160a01b03163314610abd5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610493565b565b600180546001600160a01b031916905561051381610a06565b6001600160a01b0381166000908152600460205260408120610b1681856001600160a01b031660009081526001919091016020526040902054151590565b610b3357604051632af0900d60e21b815260040160405180910390fd5b836001600160a01b0316633e2f147f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b71573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b959190610ff5565b610bb2576040516345916a4760e11b815260040160405180910390fd5b610bbc8185610c3b565b9150610bc781610c50565b610bd857610bd6600284610c3b565b505b5092915050565b606081600001805480602002602001604051908101604052809291908181526020018280548015610c2f57602002820191906000526020600020905b815481526020019060010190808311610c1b575b50505050509050919050565b60006108e1836001600160a01b038416610c5a565b60006107da825490565b60008181526001830160205260408120548015610d43576000610c7e60018361129e565b8554909150600090610c929060019061129e565b9050818114610cf7576000866000018281548110610cb257610cb2610fdf565b9060005260206000200154905080876000018481548110610cd557610cd5610fdf565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080610d0857610d086112b5565b6001900381819060005260206000200160009055905585600101600086815260200190815260200160002060009055600193505050506107da565b60009150506107da565b6001600160a01b038116811461051357600080fd5b600060208284031215610d7457600080fd5b81356108e181610d4d565b600081518084526020808501945080840160005b83811015610db85781516001600160a01b031687529582019590820190600101610d93565b509495945050505050565b604081526000610dd66040830185610d7f565b82810360208481019190915284518083528582019282019060005b81811015610e0f578451151583529383019391830191600101610df1565b5090979650505050505050565b6020815260006108e16020830184610d7f565b600060208284031215610e4157600080fd5b81356001600160e01b0319811681146108e157600080fd5b6020808252825182820181905260009190848201906040850190845b81811015610e9b5783516001600160e01b03191683529284019291840191600101610e75565b50909695505050505050565b60008060408385031215610eba57600080fd5b8235610ec581610d4d565b91506020830135610ed581610d4d565b809150509250929050565b60005b83811015610efb578181015183820152602001610ee3565b83811115610f0a576000848401525b50505050565b604080825283519082018190526000906020906060840190828701845b82811015610f525781516001600160a01b031684529284019290840190600101610f2d565b50505083810382850152845180825282820190600581901b8301840187850160005b83811015610fba57601f198087850301865282518051808652610f9c818b88018c8501610ee0565b96890196601f01909116939093018701925090860190600101610f74565b50909998505050505050505050565b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b60006020828403121561100757600080fd5b815180151581146108e157600080fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561104157611041611017565b5060010190565b60006020828403121561105a57600080fd5b5051919050565b600060ff82168061107457611074611017565b6000190192915050565b60006020828403121561109057600080fd5b81516108e181610d4d565b604051601f8201601f1916810167ffffffffffffffff811182821017156110c4576110c4610fc9565b604052919050565b600067ffffffffffffffff8211156110e6576110e6610fc9565b5060051b60200190565b6000601f838184011261110257600080fd5b82516020611117611112836110cc565b61109b565b82815260059290921b8501810191818101908784111561113657600080fd5b8287015b848110156111cd57805167ffffffffffffffff8082111561115b5760008081fd5b818a0191508a603f8301126111705760008081fd5b8582015160408282111561118657611186610fc9565b611197828b01601f1916890161109b565b92508183528c818386010111156111ae5760008081fd5b6111bd82898501838701610ee0565b505084525091830191830161113a565b50979650505050505050565b600080604083850312156111ec57600080fd5b825167ffffffffffffffff8082111561120457600080fd5b818501915085601f83011261121857600080fd5b81516020611228611112836110cc565b82815260059290921b8401810191818101908984111561124757600080fd5b948201945b8386101561126e57855161125f81610d4d565b8252948201949082019061124c565b9188015191965090935050508082111561128757600080fd5b50611294858286016110f0565b9150509250929050565b6000828210156112b0576112b0611017565b500390565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080a000a", + "sourceMap": "1041:3986:150:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4081:364;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;1127:37:152;;;;;-1:-1:-1;;;;;1127:37:152;;;;;;-1:-1:-1;;;;;1884:32:504;;;1866:51;;1854:2;1839:18;1127:37:152;1687:236:504;3675:109:150;;;:::i;:::-;;;2074:25:504;;;2062:2;2047:18;3675:109:150;1928:177:504;4449:133:150;;;:::i;:::-;;;;;;;:::i;1168:47:152:-;;;;;-1:-1:-1;;;;;1168:47:152;;;174:106:139;;;:::i;:::-;;1729:206:471;;;:::i;4907:118:150:-;;;;;;:::i;:::-;-1:-1:-1;4976:7:150;;4907:118;1378:954;;;:::i;:::-;;;;;;;:::i;1201:85:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;1201:85;;4586:128:150;;;:::i;1219:28:152:-;;;;;;2565:145:150;;;;;;:::i;:::-;;:::i;:::-;;;3940:14:504;;3933:22;3915:41;;3903:2;3888:18;2565:145:150;3775:187:504;2714:266:150;;;;;;:::i;:::-;;:::i;842:99:471:-;921:13;;-1:-1:-1;;;;;921:13:471;842:99;;3788:289:150;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1134:178:471:-;;;;;;:::i;:::-;;:::i;4718:185:150:-;;;;;;:::i;:::-;;:::i;4081:364::-;-1:-1:-1;;;;;4234:27:150;;;;;;:18;:27;;;;;4164:26;;;;4234:36;;:34;:36::i;:::-;4222:48;;4296:9;:16;4285:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4285:28:150;;4276:37;;4324:9;4319:122;4343:9;:16;4339:1;:20;4319:122;;;4402:9;4412:1;4402:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;4386:46:150;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4374:6;4381:1;4374:9;;;;;;;;:::i;:::-;:60;;;:9;;;;;;;;;;;:60;4361:3;;;;:::i;:::-;;;;4319:122;;;;4081:364;;;:::o;3675:109::-;3750:14;;:29;;;-1:-1:-1;;;3750:29:150;;;;3728:7;;-1:-1:-1;;;;;3750:14:150;;:27;;:29;;;;;;;;;;;;;;:14;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3743:36;;3675:109;:::o;4449:133::-;4512:16;4543:34;:25;:32;:34::i;174:106:139:-;1094:13:470;:11;:13::i;:::-;235:40:139::1;::::0;-1:-1:-1;;;235:40:139;;8021:2:504;235:40:139::1;::::0;::::1;8003:21:504::0;8060:2;8040:18;;;8033:30;8099:32;8079:18;;;8072:60;8149:18;;235:40:139::1;;;;;;;;1729:206:471::0;921:13;;719:10:484;;-1:-1:-1;;;;;921:13:471;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:471;;8380:2:504;1814:78:471;;;8362:21:504;8419:2;8399:18;;;8392:30;8458:34;8438:18;;;8431:62;-1:-1:-1;;;8509:18:504;;;8502:39;8558:19;;1814:78:471;8178:405:504;1814:78:471;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;1378:954:150:-;1527:22;;;1484:1;1527:22;;;;;;;;;1444:15;;1484:1;1467:14;;1484:1;1527:22;;;;;;;;;;-1:-1:-1;;1491:58:150;-1:-1:-1;;;;1491:58:150;1573:10;;;:::i;:::-;;;;1555:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1555:66:150;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;1627:17:150;1645:10;;;:::i;:::-;;;;1627:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1627:72:150;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;1705:17:150;1723:10;;;:::i;:::-;;;;1705:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1705:64:150;;;:29;;;;;;;;;;;:64;-1:-1:-1;;;1775:17:150;1793:10;;;:::i;:::-;;;;1775:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1775:69:150;;;:29;;;;;;;;;;;:69;-1:-1:-1;;;1850:17:150;1868:10;;;:::i;:::-;;;;1850:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1850:78:150;;;:29;;;;;;;;;;;:78;-1:-1:-1;;;1934:17:150;1952:10;;;:::i;:::-;;;;1934:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1934:77:150;;;:29;;;;;;;;;;;:77;-1:-1:-1;;;2017:17:150;2035:10;;;:::i;:::-;;;;2017:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2017:74:150;;;:29;;;;;;;;;;;:74;-1:-1:-1;;;2097:17:150;2115:10;;;:::i;:::-;;;;2097:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2097:67:150;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;2170:17:150;2188:10;;;:::i;:::-;;;;2170:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2170:67:150;;;:29;;;;;;;;;;;:67;2251:13;;;;2243:54;;;;-1:-1:-1;;;2243:54:150;;8973:2:504;2243:54:150;;;8955:21:504;9012:2;8992:18;;;8985:30;9051;9031:18;;;9024:58;9099:18;;2243:54:150;8771:352:504;2243:54:150;2310:17;1378:954;-1:-1:-1;;1378:954:150:o;4586:128::-;4652:16;4683:26;:17;:24;:26::i;2565:145::-;2637:4;2656:49;2678:14;2694:10;2656:21;:49::i;2714:266::-;2804:4;1094:13:470;:11;:13::i;:::-;2816:21:150::1;2840:8;-1:-1:-1::0;;;;;2840:22:150::1;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2870:37;::::0;-1:-1:-1;;;2870:37:150;;-1:-1:-1;;;;;1884:32:504;;;2870:37:150::1;::::0;::::1;1866:51:504::0;2816:48:150;;-1:-1:-1;2870:22:150;;::::1;::::0;::::1;::::0;1839:18:504;;2870:37:150::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;2920:55;2950:8;2961:13;2920:21;:55::i;:::-;2913:62:::0;2714:266;-1:-1:-1;;;2714:266:150:o;3788:289::-;4004:19;;:68;;-1:-1:-1;;;4004:68:150;;-1:-1:-1;;;;;9670:15:504;;;4004:68:150;;;9652:34:504;9722:15;;;9702:18;;;9695:43;3917:39:150;;;;4004:19;;;:43;;9587:18:504;;4004:68:150;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4004:68:150;;;;;;;;;;;;:::i;:::-;3997:75;;;;3788:289;;;;;:::o;1134:178:471:-;1094:13:470;:11;:13::i;:::-;1223::471::1;:24:::0;;-1:-1:-1;;;;;1223:24:471;::::1;-1:-1:-1::0;;;;;;1223:24:471;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::470::0;1273:6;-1:-1:-1;;;;;1273:6:470;;1201:85;1287:7:471::1;-1:-1:-1::0;;;;;1262:43:471::1;;;;;;;;;;;1134:178:::0;:::o;4718:185:150:-;-1:-1:-1;;;;;4841:48:150;;;;;;:29;:48;;;;;4810:16;;4841:57;;:55;:57::i;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;10251:300:487:-;10314:16;10342:22;10367:19;10375:3;10367:7;:19::i;1359:130:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;719:10:484;1422:23:470;1414:68;;;;-1:-1:-1;;;1414:68:470;;13226:2:504;1414:68:470;;;13208:21:504;;;13245:18;;;13238:30;13304:34;13284:18;;;13277:62;13356:18;;1414:68:470;13024:356:504;1414:68:470;1359:130::o;1496:153:471:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;:34::i;2984:505:150:-;-1:-1:-1;;;;;3149:33:150;;3080:12;3149:33;;;:18;:33;;;;;3193:38;3149:33;3216:14;-1:-1:-1;;;;;8985:23:487;8932:4;4343:19;;;:12;;;;;:19;;;;;;:24;;;8852:165;3193:38:150;3188:68;;3240:16;;-1:-1:-1;;;3240:16:150;;;;;;;;;;;3188:68;3283:14;-1:-1:-1;;;;;3267:48:150;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3262:83;;3326:19;;-1:-1:-1;;;3326:19:150;;;;;;;;;;;3262:83;3362:36;:13;3383:14;3362:20;:36::i;:::-;3352:46;;3408:22;:13;:20;:22::i;:::-;3404:80;;3437:47;:25;3470:13;3437:32;:47::i;:::-;;3404:80;3094:395;2984:505;;;;:::o;5562:109:487:-;5618:16;5653:3;:11;;5646:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:109;;;:::o;8615:156::-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:487;;8711:7;:53::i;9098:115::-;9161:7;9187:19;9195:3;4537:18;;4455:107;2778:1388;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:487;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;14:131:504;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;402:461::-;455:3;493:5;487:12;520:6;515:3;508:19;546:4;575:2;570:3;566:12;559:19;;612:2;605:5;601:14;633:1;643:195;657:6;654:1;651:13;643:195;;;722:13;;-1:-1:-1;;;;;718:39:504;706:52;;778:12;;;;813:15;;;;754:1;672:9;643:195;;;-1:-1:-1;854:3:504;;402:461;-1:-1:-1;;;;;402:461:504:o;868:814::-;1119:2;1108:9;1101:21;1082:4;1145:56;1197:2;1186:9;1182:18;1174:6;1145:56;:::i;:::-;1258:22;;;1220:2;1238:18;;;1231:50;;;;1330:13;;1352:22;;;1428:15;;;;1390;;;1461:1;1471:185;1485:6;1482:1;1479:13;1471:185;;;1560:13;;1553:21;1546:29;1534:42;;1631:15;;;;1596:12;;;;1507:1;1500:9;1471:185;;;-1:-1:-1;1673:3:504;;868:814;-1:-1:-1;;;;;;;868:814:504:o;2110:261::-;2289:2;2278:9;2271:21;2252:4;2309:56;2361:2;2350:9;2346:18;2338:6;2309:56;:::i;2614:286::-;2672:6;2725:2;2713:9;2704:7;2700:23;2696:32;2693:52;;;2741:1;2738;2731:12;2693:52;2767:23;;-1:-1:-1;;;;;;2819:32:504;;2809:43;;2799:71;;2866:1;2863;2856:12;3113:657;3282:2;3334:21;;;3404:13;;3307:18;;;3426:22;;;3253:4;;3282:2;3505:15;;;;3479:2;3464:18;;;3253:4;3548:196;3562:6;3559:1;3556:13;3548:196;;;3627:13;;-1:-1:-1;;;;;;3623:40:504;3611:53;;3719:15;;;;3684:12;;;;3584:1;3577:9;3548:196;;;-1:-1:-1;3761:3:504;;3113:657;-1:-1:-1;;;;;;3113:657:504:o;4244:444::-;4368:6;4376;4429:2;4417:9;4408:7;4404:23;4400:32;4397:52;;;4445:1;4442;4435:12;4397:52;4484:9;4471:23;4503:31;4528:5;4503:31;:::i;:::-;4553:5;-1:-1:-1;4610:2:504;4595:18;;4582:32;4623:33;4582:32;4623:33;:::i;:::-;4675:7;4665:17;;;4244:444;;;;;:::o;4693:258::-;4765:1;4775:113;4789:6;4786:1;4783:13;4775:113;;;4865:11;;;4859:18;4846:11;;;4839:39;4811:2;4804:10;4775:113;;;4906:6;4903:1;4900:13;4897:48;;;4941:1;4932:6;4927:3;4923:16;4916:27;4897:48;;4693:258;;;:::o;4956:1582::-;5271:2;5283:21;;;5353:13;;5256:18;;;5375:22;;;5223:4;;5450;;5428:2;5413:18;;;5477:15;;;5223:4;5520:195;5534:6;5531:1;5528:13;5520:195;;;5599:13;;-1:-1:-1;;;;;5595:39:504;5583:52;;5655:12;;;;5690:15;;;;5631:1;5549:9;5520:195;;;-1:-1:-1;;;5751:19:504;;;5731:18;;;5724:47;5821:13;;5843:21;;;5882:12;;;;5934:1;5930:16;;;5921:26;;5917:35;;5977:15;;;6012:1;6022:487;6038:8;6033:3;6030:17;6022:487;;;6107:2;6103:7;6159:2;6153:3;6145:6;6141:16;6137:25;6130:5;6123:40;6192:8;6186:15;6236:2;6230:9;6267:8;6259:6;6252:24;6289:61;6341:8;6336:2;6328:6;6324:15;6319:2;6315;6311:11;6289:61;:::i;:::-;6485:14;;;;6407:2;6393:17;6389:26;;;6377:39;;;;6373:48;;;-1:-1:-1;6446:17:504;;;;6066:1;6057:11;6022:487;;;-1:-1:-1;6526:6:504;;4956:1582;-1:-1:-1;;;;;;;;;4956:1582:504:o;6812:127::-;6873:10;6868:3;6864:20;6861:1;6854:31;6904:4;6901:1;6894:15;6928:4;6925:1;6918:15;6944:127;7005:10;7000:3;6996:20;6993:1;6986:31;7036:4;7033:1;7026:15;7060:4;7057:1;7050:15;7076:277;7143:6;7196:2;7184:9;7175:7;7171:23;7167:32;7164:52;;;7212:1;7209;7202:12;7164:52;7244:9;7238:16;7297:5;7290:13;7283:21;7276:5;7273:32;7263:60;;7319:1;7316;7309:12;7358:127;7419:10;7414:3;7410:20;7407:1;7400:31;7450:4;7447:1;7440:15;7474:4;7471:1;7464:15;7490:135;7529:3;-1:-1:-1;;7550:17:504;;7547:43;;;7570:18;;:::i;:::-;-1:-1:-1;7617:1:504;7606:13;;7490:135::o;7630:184::-;7700:6;7753:2;7741:9;7732:7;7728:23;7724:32;7721:52;;;7769:1;7766;7759:12;7721:52;-1:-1:-1;7792:16:504;;7630:184;-1:-1:-1;7630:184:504:o;8588:178::-;8625:3;8669:4;8662:5;8658:16;8693:7;8683:41;;8704:18;;:::i;:::-;-1:-1:-1;;8740:20:504;;8588:178;-1:-1:-1;;8588:178:504:o;9128:251::-;9198:6;9251:2;9239:9;9230:7;9226:23;9222:32;9219:52;;;9267:1;9264;9257:12;9219:52;9299:9;9293:16;9318:31;9343:5;9318:31;:::i;9749:275::-;9820:2;9814:9;9885:2;9866:13;;-1:-1:-1;;9862:27:504;9850:40;;9920:18;9905:34;;9941:22;;;9902:62;9899:88;;;9967:18;;:::i;:::-;10003:2;9996:22;9749:275;;-1:-1:-1;9749:275:504:o;10029:204::-;10110:4;10143:18;10135:6;10132:30;10129:56;;;10165:18;;:::i;:::-;-1:-1:-1;10210:1:504;10206:14;10222:4;10202:25;;10029:204::o;10238:1510::-;10301:5;10331:4;10375:3;10370:2;10362:6;10358:15;10354:25;10344:53;;10393:1;10390;10383:12;10344:53;10422:6;10416:13;10448:4;10472:81;10488:64;10549:2;10488:64;:::i;:::-;10472:81;:::i;:::-;10587:15;;;10673:1;10669:10;;;;10657:23;;10653:32;;;10618:12;;;;10697:15;;;10694:35;;;10725:1;10722;10715:12;10694:35;10761:2;10753:6;10749:15;10773:946;10789:6;10784:3;10781:15;10773:946;;;10868:3;10862:10;10895:18;10945:2;10932:11;10929:19;10926:109;;;10989:1;11018:2;11014;11007:14;10926:109;11070:11;11062:6;11058:24;11048:34;;11122:3;11117:2;11113;11109:11;11105:21;11095:119;;11168:1;11197:2;11193;11186:14;11095:119;11251:2;11247;11243:11;11237:18;11278:2;11303;11299;11296:10;11293:36;;;11309:18;;:::i;:::-;11357:51;11381:11;;;-1:-1:-1;;11377:25:504;11373:34;;11357:51;:::i;:::-;11342:66;;11437:2;11428:7;11421:19;11481:3;11476:2;11471;11467;11463:11;11459:20;11456:29;11453:122;;;11527:1;11557:3;11552;11545:16;11453:122;11588:56;11641:2;11636;11627:7;11623:16;11618:2;11614;11610:11;11588:56;:::i;:::-;-1:-1:-1;;11657:20:504;;-1:-1:-1;11697:12:504;;;;10806;;10773:946;;;-1:-1:-1;11737:5:504;10238:1510;-1:-1:-1;;;;;;;10238:1510:504:o;11753:1266::-;11920:6;11928;11981:2;11969:9;11960:7;11956:23;11952:32;11949:52;;;11997:1;11994;11987:12;11949:52;12030:9;12024:16;12059:18;12100:2;12092:6;12089:14;12086:34;;;12116:1;12113;12106:12;12086:34;12154:6;12143:9;12139:22;12129:32;;12199:7;12192:4;12188:2;12184:13;12180:27;12170:55;;12221:1;12218;12211:12;12170:55;12250:2;12244:9;12272:4;12296:81;12312:64;12373:2;12312:64;:::i;12296:81::-;12411:15;;;12493:1;12489:10;;;;12481:19;;12477:28;;;12442:12;;;;12517:19;;;12514:39;;;12549:1;12546;12539:12;12514:39;12573:11;;;;12593:210;12609:6;12604:3;12601:15;12593:210;;;12682:3;12676:10;12699:31;12724:5;12699:31;:::i;:::-;12743:18;;12626:12;;;;12781;;;;12593:210;;;12858:18;;;12852:25;12822:5;;-1:-1:-1;12852:25:504;;-1:-1:-1;;;12889:16:504;;;12886:36;;;12918:1;12915;12908:12;12886:36;;12941:72;13005:7;12994:8;12983:9;12979:24;12941:72;:::i;:::-;12931:82;;;11753:1266;;;;;:::o;13385:125::-;13425:4;13453:1;13450;13447:8;13444:34;;;13458:18;;:::i;:::-;-1:-1:-1;13495:9:504;;13385:125::o;13515:127::-;13576:10;13571:3;13567:20;13564:1;13557:31;13607:4;13604:1;13597:15;13631:4;13628:1;13621:15", + "linkReferences": {} + }, + "methodIdentifiers": { + "_getExtensionFunctions()": "89f8132e", + "acceptOwnership()": "79ba5097", + "blocksPerYear()": "a385fb96", + "closeAndRemoveUserPosition(address)": "d337a1da", + "feeDistributor()": "0d43e8ad", + "getAccountsWithOpenPositions()": "12468b77", + "getBorrowableMarketsByCollateral(address)": "f4e61066", + "getMinBorrowNative()": "0da2262c", + "getPositionsByAccount(address)": "0973e916", + "getPositionsExtension(bytes4)": "86ef7482", + "getRedemptionStrategies(address,address)": "ed287f3f", + "getWhitelistedCollateralMarkets()": "a339d751", + "liquidatorsRegistry()": "16bb997f", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "removeClosedPosition(address)": "ca2de6bc", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LeveredPositionFactorySecondExtension.json b/packages/sdk/deployments/bob/LeveredPositionFactorySecondExtension.json new file mode 100644 index 000000000..a8468ccdd --- /dev/null +++ b/packages/sdk/deployments/bob/LeveredPositionFactorySecondExtension.json @@ -0,0 +1,1080 @@ +{ + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "abi": [ + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "blocksPerYear", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "createAndFundPosition", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_stableMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_fundingAsset", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "_fundingAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract LeveredPosition" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "createAndFundPositionAtRatio", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_stableMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_fundingAsset", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "_fundingAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_leverageRatio", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract LeveredPosition" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "createPosition", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_stableMarket", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract LeveredPosition" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "feeDistributor", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IFeeDistributor" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "liquidatorsRegistry", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ILiquidatorsRegistry" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "PairNotWhitelisted", + "inputs": [] + } + ], + "transactionHash": "0x0ba044df47e7932b702ff8e3642cdef52039049b0b0d282cd53d293f1529dbdd", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "transactionIndex": 1, + "gasUsed": "4892511", + "logsBloom": "0x000000000000000000000000000000000040000000000000008000000002000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000200000000000000000008000000000000000000000000000000004000000000000000000000000000000000000000000000000000000008004000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a0000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xcd0ca97ab2c8c460937862d15497daf13b58b64d4eeabd6be9bb9f09d764162d", + "transactionHash": "0x0ba044df47e7932b702ff8e3642cdef52039049b0b0d282cd53d293f1529dbdd", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3778016, + "transactionHash": "0x0ba044df47e7932b702ff8e3642cdef52039049b0b0d282cd53d293f1529dbdd", + "address": "0xC3cEc17c135d3C5d6BadC284AFF08f396447DaaC", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xcd0ca97ab2c8c460937862d15497daf13b58b64d4eeabd6be9bb9f09d764162d" + } + ], + "blockNumber": 3778016, + "cumulativeGasUsed": "4936350", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "type": "error", + "name": "PairNotWhitelisted" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "blocksPerYear", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "_fundingAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_fundingAmount", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "createAndFundPosition", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "_fundingAsset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_fundingAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_leverageRatio", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "createAndFundPositionAtRatio", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "createPosition", + "outputs": [ + { + "internalType": "contract LeveredPosition", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "feeDistributor", + "outputs": [ + { + "internalType": "contract IFeeDistributor", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "liquidatorsRegistry", + "outputs": [ + { + "internalType": "contract ILiquidatorsRegistry", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/levered/LeveredPositionFactorySecondExtension.sol": "LeveredPositionFactorySecondExtension" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/compound/ICToken.sol": { + "keccak256": "0xd90b56c414ed688746f99b939cd2550cd1a646996ed7ee020f95877068324c48", + "urls": [ + "bzz-raw://73318f893d20ec8720226ed2bd0f3937d0a78050b77e368065edae1ba648a2e3", + "dweb:/ipfs/QmRVMeofs12tydFoWyyfGVX2s8uzD5JkGd3CXmRLRAGcbp" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IComptroller.sol": { + "keccak256": "0x3ca179bd72163f50f68d15175625f68e4892df753851afdb60fda626c85fa763", + "urls": [ + "bzz-raw://666ca145270cce0ee54f2856915c39383e6dd2ea06013cd6cf83a11e084468a8", + "dweb:/ipfs/QmaKtT9AYojeWsBPjWf5DuFxBWpXLkyTT5YnumgPXLm1bK" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IPriceOracle.sol": { + "keccak256": "0x501ba6588dc3bbcbcd7629eb294b2249dce97cb78e1c78feb1815d220b488368", + "urls": [ + "bzz-raw://19fa30ac47cf668858b1d9e8842e1a2d9a6c8bbae85bc12ce8a0f1bbe0868559", + "dweb:/ipfs/QmYuypErSBwLnNWjUBZiBvp5xJ95DxbBDCvCSnE3NZjaev" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IRewardsDistributor.sol": { + "keccak256": "0x175299449a462109cf22ec786c1bcc820f16eba8052dcfa621e65666e657e3f3", + "urls": [ + "bzz-raw://4986563cd770103066f69b5e86331a4bbbefc4337f94a260a46545da4416d858", + "dweb:/ipfs/Qmd64tG56C3DS5gGHebbTEZi1TM6SXG1Ahot7paYjH8gKF" + ], + "license": "BSD-3-Clause" + }, + "contracts/external/compound/IUnitroller.sol": { + "keccak256": "0x629111448df95d5f4c6cae88cd8fceb67537af80e82f643e697d2dd4c22e1c49", + "urls": [ + "bzz-raw://6cf120d715430134deccb0add41e71c92618843aba8bac15135e96fb912b0424", + "dweb:/ipfs/QmaSRgMRrG8n5Ck4pZNaHj6LArRDGCnQ9wQhpL7WZ9MT6e" + ], + "license": "BSD-3-Clause" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/IFlashLoanReceiver.sol": { + "keccak256": "0x3db1dbf3e47975f60cccc859740aa84665d9fd683079c7329285008502c454da", + "urls": [ + "bzz-raw://89727af88e6d376eced9a6ea97c3da80d6c801198f133d9d6b887894f7b8ab00", + "dweb:/ipfs/QmVS7Thpbkt3RGi4UsKev94BJdLstHiGHrGk1mPXadSqS2" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/ILeveredPositionFactory.sol": { + "keccak256": "0x422831aefc6bc1edc9864205bf710620d25b9e4d8138bcf5c13020fe3738f103", + "urls": [ + "bzz-raw://d05924628c79254bdeb073a2791e1b82c5cae603015dbeb138f87267fd886c3b", + "dweb:/ipfs/QmbP4oeh1TksPdLMPEM1SzSZaeCF7bCX99ycNuo4ezPPGZ" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/LeveredPosition.sol": { + "keccak256": "0x7313f8b1f26bc2ee299926399992dde9eccb7fd4a37504699481874163d093ea", + "urls": [ + "bzz-raw://077f337985aa2c8d5aa6cb306c1214e82992bdeb519cfaa396c92dc892f7f25d", + "dweb:/ipfs/QmQcLA9ULKaKSHD8LDJYVpaQLroybuBtKywWKSjskSfjF7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactorySecondExtension.sol": { + "keccak256": "0x382500af7d15f66826c6a9ac369af80c00ff8f0ca424ef8c9f85e298de02d7d2", + "urls": [ + "bzz-raw://b7cd5273a1ec3ddaa70ef3d6701a662d925e09761386fd580c96aed3719075f9", + "dweb:/ipfs/QmbP3od8Fkf1KgQF6beNzy4vVsTkdQY9yyxtVZS9Ynr6M7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionFactoryStorage.sol": { + "keccak256": "0xec2c0858dfa3924ea09559bf081c579ff5b19a56ce36b2e986affad3e4f7cc4f", + "urls": [ + "bzz-raw://6973d7b17ad48d6f17fb9566c629b8db4abcd907d40c8085a01af647e5e1d016", + "dweb:/ipfs/QmVzc1JhAXMQY1Yr1EUc5rWfFTLZmB1aj8HRdnqehvVegh" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionStorage.sol": { + "keccak256": "0xe3342347e2315c9a7a8503ef7ba83390f1cd296318a50952a88d984af940e430", + "urls": [ + "bzz-raw://e6245ac45d4f691c1565e1f7228e475dcfa012ac5394a5b3142e1437efc33ba5", + "dweb:/ipfs/Qme2VMo4kP4DpANSZVrsAYYF8bEq9aySjMveDo1y7iMMC7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheel.sol": { + "keccak256": "0x8d4dc0e54619cbf9d7a503c9664163c55dbfbd43dc4ec6c5156711a5fd6bee34", + "urls": [ + "bzz-raw://90e2282f7bc72e65c084f40eee44e77f5a59a0702b66222595c417d078094cd5", + "dweb:/ipfs/QmY6jo9jnqeQsD8S6vSSWWT7NJdsXpVQZQh6Vaq6ZZo5QA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5061001a3361001f565b610096565b600180546001600160a01b031916905561004381610046602090811b61092c17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61571c806100a56000396000f3fe60806040523480156200001157600080fd5b5060043610620000c35760003560e01c80637bf8f349116200007a5780637bf8f349146200015157806389f8132e14620001685780638da5cb5b1462000181578063a385fb961462000193578063e30c397814620001ac578063f2fde38b14620001be57600080fd5b80630d43e8ad14620000c857806316bb997f14620000f9578063534da460146200010d5780636969e58b1462000124578063715018a6146200013b57806379ba50971462000147575b600080fd5b600954620000dc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600a54620000dc906001600160a01b031681565b620000dc6200011e36600462000d17565b620001d5565b620000dc6200013536600462000d79565b62000273565b6200014562000588565b005b62000145620005df565b620000dc6200016236600462000db7565b6200065d565b620001726200076c565b604051620000f0919062000e0f565b6000546001600160a01b0316620000dc565b6200019d600b5481565b604051908152602001620000f0565b6001546001600160a01b0316620000dc565b62000145620001cf36600462000e5f565b620008b8565b600080620001e6878787876200065d565b9050670de0b6b3a76400008311156200026957604051639028493360e01b8152600481018490526001600160a01b038216906390284933906024016020604051808303816000875af115801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000e7f565b505b9695505050505050565b6001600160a01b03821660009081526007602052604081206200029790836200097c565b620002b557604051633f94e3f760e01b815260040160405180910390fd5b6000338484604051620002c89062000cf3565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801562000305573d6000803e3d6000fd5b50905062000315600233620009a1565b50336000908152600460205260409020620003319082620009a1565b50600954604080516322ab0bc360e21b815290516000926001600160a01b031691638aac2f0c9160048083019260209291908290030181865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000e99565b90506000856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c919062000e99565b60405163ec2ffdd160e01b81526001600160a01b03808316600483015291925060009184169063ec2ffdd190602401602060405180830381865afa15801562000459573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047f919062000e99565b90506001600160a01b038116156200057b57826001600160a01b031663ca224d988386846001600160a01b0316633300183c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000507919062000eb9565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260ff16604482015260016064820152608401600060405180830381600087803b1580156200056157600080fd5b505af115801562000576573d6000803e3d6000fd5b505050505b5091925050505b92915050565b62000592620009b8565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b031681146200064f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401620005d6565b6200065a8162000a16565b50565b6000806200066c868662000273565b9050620006856001600160a01b03851633308662000a31565b60405163095ea7b360e01b81526001600160a01b0382811660048301526024820185905285169063095ea7b3906044016020604051808303816000875af1158015620006d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006fb919062000ede565b50604051633a8a230760e01b81526001600160a01b03858116600483015260248201859052821690633a8a230790604401600060405180830381600087803b1580156200074757600080fd5b505af11580156200075c573d6000803e3d6000fd5b509293505050505b949350505050565b604080516003808252608082019092526060919060009082602082018580368337019050509050636969e58b60e01b81620007a78462000f02565b93508360ff1681518110620007c057620007c062000f2e565b6001600160e01b031990921660209283029190910190910152637bf8f34960e01b81620007ed8462000f02565b93508360ff168151811062000806576200080662000f2e565b6001600160e01b03199092166020928302919091019091015263029a6d2360e51b81620008338462000f02565b93508360ff16815181106200084c576200084c62000f2e565b6001600160e01b03199092166020928302919091019091015260ff821615620005825760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401620005d6565b620008c2620009b8565b600180546001600160a01b0383166001600160a01b03199091168117909155620008f46000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b60006200099a836001600160a01b03841662000a93565b6000546001600160a01b0316331462000a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005d6565b565b600180546001600160a01b03191690556200065a816200092c565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905262000a8d90859062000ae5565b50505050565b600081815260018301602052604081205462000adc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000582565b50600062000582565b600062000b3c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000bc39092919063ffffffff16565b80519091501562000bbe578080602001905181019062000b5d919062000ede565b62000bbe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620005d6565b505050565b606062000764848460008585600080866001600160a01b0316858760405162000bed919062000f73565b60006040518083038185875af1925050503d806000811462000c2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000c31565b606091505b509150915062000c448783838762000c4f565b979650505050505050565b6060831562000cc057825162000cb8576001600160a01b0385163b62000cb85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620005d6565b508162000764565b62000764838381511562000cd75781518083602001fd5b8060405162461bcd60e51b8152600401620005d6919062000f91565b6147498062000fc783390190565b6001600160a01b03811681146200065a57600080fd5b600080600080600060a0868803121562000d3057600080fd5b853562000d3d8162000d01565b9450602086013562000d4f8162000d01565b9350604086013562000d618162000d01565b94979396509394606081013594506080013592915050565b6000806040838503121562000d8d57600080fd5b823562000d9a8162000d01565b9150602083013562000dac8162000d01565b809150509250929050565b6000806000806080858703121562000dce57600080fd5b843562000ddb8162000d01565b9350602085013562000ded8162000d01565b9250604085013562000dff8162000d01565b9396929550929360600135925050565b6020808252825182820181905260009190848201906040850190845b8181101562000e535783516001600160e01b0319168352928401929184019160010162000e2b565b50909695505050505050565b60006020828403121562000e7257600080fd5b81356200099a8162000d01565b60006020828403121562000e9257600080fd5b5051919050565b60006020828403121562000eac57600080fd5b81516200099a8162000d01565b60006020828403121562000ecc57600080fd5b815160ff811681146200099a57600080fd5b60006020828403121562000ef157600080fd5b815180151581146200099a57600080fd5b600060ff82168062000f2457634e487b7160e01b600052601160045260246000fd5b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101562000f6157818101518382015260200162000f47565b8381111562000a8d5750506000910152565b6000825162000f8781846020870162000f44565b9190910192915050565b602081526000825180602084015262000fb281604085016020870162000f44565b601f01601f1916919091016040019291505056fe60a06040523480156200001157600080fd5b5060405162004749380380620047498339810160408190526200003491620002e5565b6001600160a01b0380841660805260408051635fe3b56760e01b81529051600092851691635fe3b5679160048083019260209291908290030181865afa15801562000083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a9919062000339565b90506000826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000112919062000339565b9050806001600160a01b0316826001600160a01b0316146200017a5760405162461bcd60e51b815260206004820152601460248201527f6d61726b65747320706f6f6c7320646966666572000000000000000000000000604482015260640160405180910390fd5b600380546001600160a01b038085166001600160a01b03199283161790925560018054928716929091168217905560408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a919062000339565b600480546001600160a01b039283166001600160a01b031991821617825560028054938716939091168317905560408051636f307dc360e01b81529051636f307dc3928281019260209291908290030181865afa15801562000270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000296919062000339565b600580546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550620003609350505050565b6001600160a01b0381168114620002e257600080fd5b50565b600080600060608486031215620002fb57600080fd5b83516200030881620002cc565b60208501519093506200031b81620002cc565b60408501519092506200032e81620002cc565b809150509250925092565b6000602082840312156200034c57600080fd5b81516200035981620002cc565b9392505050565b6080516143b162000398600039600081816103a301528181610574015281816111e0015281816117dc0152611ba201526143b16000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063958fa280116100b8578063b21fd0291161007c578063b21fd02914610368578063c31443bb1461037b578063c393d0e314610383578063c45a01551461038b578063cb2af14b1461039e578063ef5cfb8c146103c557610142565b8063958fa28014610314578063a415deda14610327578063a7e269a61461033a578063a833cb7f1461034d578063aabaecd61461035557610142565b80633a8a23071161010a5780633a8a2307146102a55780633e2f147f146102b8578063459b9ef1146102d0578063555b334a146102d85780636813f999146102ee578063902849331461030157610142565b806316f0115b1461021a5780631d7d45b31461024a5780632f86e2dd14610272578063372500ab14610293578063374607041461029d575b60008054604051634377ba4160e11b815282356001600160e01b03191660048201526001600160a01b03909116906386ef748290602401602060405180830381865afa158015610196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ba9190613b12565b90506001600160a01b0381166101f657604051637d60257960e01b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610215573d6000f35b3d6000fd5b60035461022d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61025d610258366004613b2f565b6103d8565b60408051928352602083019190915201610241565b610285610280366004613b48565b610567565b604051908152602001610241565b61029b610908565b005b610285610913565b61029b6102b3366004613b65565b610a9c565b6102c0610c04565b6040519015158152602001610241565b610285610c77565b6102e0610e86565b604051610241929190613b91565b60055461022d906001600160a01b031681565b61028561030f366004613b2f565b6111d3565b61029b610322366004613c15565b61128b565b60015461022d906001600160a01b031681565b60025461022d906001600160a01b031681565b61028561150d565b60045461022d906001600160a01b031681565b610285610376366004613b48565b6117cf565b6102856118c6565b610285611b87565b60005461022d906001600160a01b031681565b61022d7f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d3366004613b48565b611b97565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104549190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c9190613c9e565b905060006105486118c6565b905080871161055981898587611f4b565b965096505050505050915091565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906105ad57506000546001600160a01b03163314155b156105cb576040516370d645e360e01b815260040160405180910390fd5b6105dc670de0b6b3a76400006123c0565b600160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190613c9e565b50600354600154604051630ede4edd60e41b81526001600160a01b039182166004820152600092919091169063ede4edd0906024016020604051808303816000875af11580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190613c9e565b905080156106f15760405163059548ef60e51b8152600481018290526024016101ed565b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063db006a759082906370a0823190602401602060405180830381865afa158015610741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107659190613c9e565b6040518263ffffffff1660e01b815260040161078391815260200190565b6020604051808303816000875af11580156107a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c69190613c9e565b905080156107ea5760405163eeddaac560e01b8152600481018290526024016101ed565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190613c9e565b111561087b57600554600454610879916001600160a01b039081169116612968565b505b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa1580156108c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e89190613c9e565b600454909250610902906001600160a01b03168484612af8565b50919050565b61091133611b97565b565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015610960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109849190613c9e565b90508061099357600091505090565b600354600254604051630cbb414760e11b81523060048201526001600160a01b039182166024820152600160448201526000929190911690631976828e90606401602060405180830381865afa1580156109f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a159190613c9e565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190613c9e565b9050610a94828483612b5b565b935050505090565b610ab16001600160a01b038316333084612ea4565b610aba82612edc565b5060035460015460405163929fe9a160e01b81526001600160a01b039283169263929fe9a192610af292309290911690600401613cb7565b602060405180830381865afa158015610b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b339190613cd1565b610c005760408051600180825281830190925260009160208083019080368337505060015482519293506001600160a01b031691839150600090610b7957610b79613d09565b6001600160a01b039283166020918202929092010152600354604051631853304760e31b815291169063c299823890610bb6908490600401613d1f565b6000604051808303816000875af1158015610bd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bfd9190810190613dc1565b50505b5050565b600154604051633af9e66960e01b81523060048201526000916001600160a01b031690633af9e66990602401602060405180830381865afa158015610c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c719190613c9e565b15919050565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190613c9e565b905080610cf757600091505090565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d659190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd99190613c9e565b905060008160008054906101000a90046001600160a01b03166001600160a01b0316630da2262c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190613c9e565b610e6590670de0b6b3a7640000613e6d565b610e6f9190613ea2565b9050610e7d81856000612b5b565b94505050505090565b6060806000600360009054906101000a90046001600160a01b03166001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f069190810190613eb6565b9050805167ffffffffffffffff811115610f2257610f22613cf3565b604051908082528060200260200182016040528015610f4b578160200160208202803683370190505b509250805167ffffffffffffffff811115610f6857610f68613cf3565b604051908082528060200260200182016040528015610f91578160200160208202803683370190505b50915060005b81518110156111cd576000828281518110610fb457610fb4613d09565b6020908102919091010151600154604051632e6f912b60e21b81529192506001600160a01b038084169263b9be44ac92610ff49216903090600401613cb7565b6020604051808303816000875af1158015611013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110379190613c9e565b50600254604051632e6f912b60e21b81526001600160a01b038381169263b9be44ac9261106c92909116903090600401613cb7565b6020604051808303816000875af115801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110af9190613c9e565b50806001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111129190613b12565b85838151811061112457611124613d09565b6001600160a01b039283166020918202929092010152604051630ff6b5a760e31b815230600482015290821690637fb5ad38906024016020604051808303816000875af1158015611179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119d9190613c9e565b8483815181106111af576111af613d09565b602090810291909101015250806111c581613f45565b915050610f97565b50509091565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061121957506000546001600160a01b03163314155b15611237576040516370d645e360e01b815260040160405180910390fd5b670de0b6b3a7640000821161125757611257670de0b6b3a76400006123c0565b816112606118c6565b10156112745761126f82613090565b61127d565b61127d826123c0565b6112856118c6565b92915050565b6001546001600160a01b03163314156113735760006112ac82840184613b2f565b90506112b7816133dd565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113299190613c9e565b90508481101561136c57600480546040516319ad25f160e11b81526001600160a01b039091169181019190915260248101829052604481018690526064016101ed565b5050611495565b6002546001600160a01b031633141561144d57600061139482840184613b2f565b90506113a084826134a3565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140d9190613c9e565b90508481101561136c576005546040516319ad25f160e11b81526001600160a01b03909116600482015260248101829052604481018690526064016101ed565b60405162461bcd60e51b815260206004820152601b60248201527f21666c206e6f742066726f6d20656974686572206d61726b657473000000000060448201526064016101ed565b60405163095ea7b360e01b8152336004820152602481018490526001600160a01b0385169063095ea7b3906044016020604051808303816000875af11580156114e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115069190613cd1565b5050505050565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115879190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa1580156115d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fb9190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f9190613c9e565b600154604051633af9e66960e01b81523060048201529192506000916001600160a01b0390911690633af9e66990602401602060405180830381865afa1580156116bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e19190613c9e565b90506000670de0b6b3a76400006116f88385613e6d565b6117029190613ea2565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa158015611750573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117749190613c9e565b90506000670de0b6b3a764000061178b8388613e6d565b6117959190613ea2565b905060006117a38285613f60565b9050856117b882670de0b6b3a7640000613e6d565b6117c29190613ea2565b9850505050505050505090565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461181a576040516370d645e360e01b815260040160405180910390fd5b611822610c04565b61183f5760405163716041e560e01b815260040160405180910390fd5b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190613c9e565b600554909150611285906001600160a01b03168483612af8565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119379190613c9e565b90508061194657600091505090565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190613b12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a289190613c9e565b90506000670de0b6b3a7640000611a3f8584613e6d565b611a499190613ea2565b6002546040516305eff7ef60e21b815230600482015291925060009182916001600160a01b0316906317bfdfbc90602401602060405180830381865afa158015611a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abb9190613c9e565b90508015611b565760025460405163fc57d4df60e01b81526001600160a01b03918216600482015260009187169063fc57d4df90602401602060405180830381865afa158015611b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b339190613c9e565b9050670de0b6b3a7640000611b488383613e6d565b611b529190613ea2565b9250505b611b608284613f60565b611b7284670de0b6b3a7640000613e6d565b611b7c9190613ea2565b965050505050505090565b6000611b9233610567565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611bdb57506000546001600160a01b03163314155b15611bf9576040516370d645e360e01b815260040160405180910390fd5b60035460408051633605b51b60e01b815290516000926001600160a01b031691633605b51b91600480830192869291908290030181865afa158015611c42573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6a9190810190613eb6565b905060005b8151811015611f46576000828281518110611c8c57611c8c613d09565b6020908102919091010151600154604051632e6f912b60e21b81529192506001600160a01b038084169263b9be44ac92611ccc9216903090600401613cb7565b6020604051808303816000875af1158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190613c9e565b50600254604051632e6f912b60e21b81526001600160a01b038381169263b9be44ac92611d4492909116903090600401613cb7565b6020604051808303816000875af1158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d879190613c9e565b50604051633bd73ee360e21b81523060048201526001600160a01b0382169063ef5cfb8c90602401600060405180830381600087803b158015611dc957600080fd5b505af1158015611ddd573d6000803e3d6000fd5b505050506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e459190613b12565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190613c9e565b90508015611f305760405163a9059cbb60e01b81526001600160a01b0387811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e9190613cd1565b505b5050508080611f3e90613f45565b915050611c6f565b505050565b600154604051633af9e66960e01b8152306004820152600091829182916001600160a01b031690633af9e66990602401602060405180830381865afa158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613c9e565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa15801561200a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202e9190613c9e565b90506000881561212d5760008054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad9190613b12565b60055460048054604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b946120e594908216939091169101613cb7565b602060405180830381865afa158015612102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121269190613c9e565b905061221d565b60008054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a29190613b12565b60048054600554604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b946121d9948216939091169101613cb7565b602060405180830381865afa1580156121f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221a9190613c9e565b90505b600061271061222c8382613f77565b61223e90670de0b6b3a7640000613e6d565b6122489190613ea2565b9050600080670de0b6b3a7640000612260878c613e6d565b61226a9190613ea2565b90506000670de0b6b3a7640000612281878c613e6d565b61228b9190613ea2565b90508b60006122a2670de0b6b3a764000083613f8f565b90508560006122b983670de0b6b3a7640000613fce565b6122c38584613fce565b6122cd9190613f8f565b6122d78587613fce565b6122e18886613fce565b6122eb9190613f8f565b6122fd90670de0b6b3a7640000613fce565b6123079190614053565b9050600081126123175780612320565b61232081614081565b96505050505050508881670de0b6b3a764000061233d9190613e6d565b6123479190613ea2565b96508761235c82670de0b6b3a7640000613e6d565b6123669190613ea2565b95508a1561239257670de0b6b3a76400006123818388613e6d565b61238b9190613ea2565b95506123b2565b670de0b6b3a76400006123a58389613e6d565b6123af9190613ea2565b96505b505050505094509492505050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa15801561248c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b09190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015612500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125249190613c9e565b9050670de0b6b3a764000086116126dc576002546040516305eff7ef60e21b81523060048201526001600160a01b03909116906317bfdfbc90602401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613c9e565b935060006125af8386613e6d565b905060008060009054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126299190613b12565b60048054600554604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b94612660948216939091169101613cb7565b602060405180830381865afa15801561267d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a19190613c9e565b905060006127106126b28382613f77565b6126bc9085613e6d565b6126c69190613ea2565b90506126d28482613ea2565b97505050506126ef565b6126e96000878385611f4b565b90955093505b8315612774576002546040805160208082018990528251808303909101815281830192839052633c3b4b8960e01b9092526001600160a01b0390921691633c3b4b8991612741918891906044016140f6565b600060405180830381600087803b15801561275b57600080fd5b505af115801561276f573d6000803e3d6000fd5b505050505b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156127bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e19190613c9e565b9050801561295f576002546040516305eff7ef60e21b81523060048201526000916001600160a01b0316906317bfdfbc90602401602060405180830381865afa158015612832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128569190613c9e565b9050801561295d57600082821161286d578161286f565b825b60055460025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af11580156128c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ea9190613cd1565b5060025460405163073a938160e11b8152600481018390526001600160a01b0390911690630e752702906024016020604051808303816000875af1158015612936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295a9190613c9e565b50505b505b50505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190613c9e565b6000805460405163ed287f3f60e01b8152929350909182916001600160a01b03169063ed287f3f90612a0d9089908990600401613cb7565b600060405180830381865afa158015612a2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a5291908101906141f3565b91509150815160001415612a7957604051634fd1fa8360e11b815260040160405180910390fd5b60005b8251811015612aee576000838281518110612a9957612a99613d09565b602002602001015190506000838381518110612ab757612ab7613d09565b60200260200101519050612acd898784846136e9565b9099508998509650869550829150612ae6905081613f45565b915050612a7c565b5050505092915050565b6040516001600160a01b038316602482015260448101829052611f4690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261376a565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd59190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015612c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c499190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015612c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbd9190613c9e565b90506000670de0b6b3a7640000612cd48488613e6d565b612cde9190613ea2565b90506000670de0b6b3a7640000612cf5858b613e6d565b612cff9190613ea2565b90506000670de0b6b3a7640000612d16858b613e6d565b612d209190613ea2565b905060008060009054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190613b12565b60055460048054604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b94612dd294908216939091169101613cb7565b602060405180830381865afa158015612def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e139190613c9e565b9050612e20600a82613f77565b90506000612e3082612710613f77565b612e3c85612710613e6d565b612e469190613ea2565b90508285828682612e5783866142b8565b612e619190613f8f565b612e6b9190613f8f565b612e7582856142b8565b612e8790670de0b6b3a7640000613fce565b612e919190614053565b9f9e505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610bfd9085906323b872dd60e01b90608401612b24565b6004546000906001600160a01b03838116911614612f0d57600454612f0b9083906001600160a01b0316612968565b505b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015612f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7a9190613c9e565b6004805460015460405163095ea7b360e01b81526001600160a01b039182169381019390935260248301849052929350919091169063095ea7b3906044016020604051808303816000875af1158015612fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffb9190613cd1565b5060015460405163140e25ad60e31b8152600481018390526000916001600160a01b03169063a0712d68906024016020604051808303816000875af1158015613048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306c9190613c9e565b9050801561090257604051631a25a97b60e31b8152600481018290526024016101ed565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa1580156130da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fe9190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa15801561314e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131729190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa1580156131c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e69190613c9e565b90506000806131f86001878587611f4b565b6001546040805160208082018590528251808303909101815281830192839052633c3b4b8960e01b9092529395509193506001600160a01b031691633c3b4b8991613248918691906044016140f6565b600060405180830381600087803b15801561326257600080fd5b505af1158015613276573d6000803e3d6000fd5b5050600480546040516370a0823160e01b81523092810192909252600093506001600160a01b031691506370a0823190602401602060405180830381865afa1580156132c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ea9190613c9e565b9050801561295f576004805460015460405163095ea7b360e01b81526001600160a01b039182169381019390935260248301849052169063095ea7b3906044016020604051808303816000875af1158015613349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336d9190613cd1565b5060015460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d68906024016020604051808303816000875af11580156133b9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295d9190613c9e565b6004546133f2906001600160a01b0316612edc565b5060025460405163317afabb60e21b8152600481018390526000916001600160a01b03169063c5ebeaec906024016020604051808303816000875af115801561343f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134639190613c9e565b9050801561348757604051636f86fa6b60e11b8152600481018290526024016101ed565b600554600454611f46916001600160a01b039081169116612968565b6002546040516305eff7ef60e21b81523060048201526000916001600160a01b0316906317bfdfbc90602401602060405180830381865afa1580156134ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135109190613c9e565b905060008184106135215781613523565b835b60055460025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af115801561357a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359e9190613cd1565b5060025460405163073a938160e11b8152600481018390526000916001600160a01b031690630e752702906024016020604051808303816000875af11580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f9190613c9e565b905080156136325760405162f0f70d60e41b8152600481018290526024016101ed565b60015460405163852a12e360e01b8152600481018690526001600160a01b039091169063852a12e3906024016020604051808303816000875af115801561367d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a19190613c9e565b905080156136c55760405163213e72eb60e11b8152600481018290526024016101ed565b6004546005546136e1916001600160a01b039081169116612968565b505050505050565b6000806000613746856310badf4e60e01b89898860405160240161370f939291906142f9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261383c565b90508080602001905181019061375c9190614320565b925092505094509492505050565b60006137bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139309092919063ffffffff16565b805190915015611f4657808060200190518101906137dd9190613cd1565b611f465760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ed565b60606001600160a01b0383163b6138a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ed565b600080846001600160a01b0316846040516138bf919061434e565b600060405180830381855af49150503d80600081146138fa576040519150601f19603f3d011682016040523d82523d6000602084013e6138ff565b606091505b5091509150613927828260405180606001604052806027815260200161437e60279139613949565b95945050505050565b606061393f8484600085613982565b90505b9392505050565b60608315613958575081613942565b8251156139685782518084602001fd5b8160405162461bcd60e51b81526004016101ed919061436a565b6060824710156139e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ed565b600080866001600160a01b031685876040516139ff919061434e565b60006040518083038185875af1925050503d8060008114613a3c576040519150601f19603f3d011682016040523d82523d6000602084013e613a41565b606091505b5091509150613a5287838387613a5f565b925050505b949350505050565b60608315613acb578251613ac4576001600160a01b0385163b613ac45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ed565b5081613a57565b613a578383815115613ae05781518083602001fd5b8060405162461bcd60e51b81526004016101ed919061436a565b6001600160a01b0381168114613b0f57600080fd5b50565b600060208284031215613b2457600080fd5b815161394281613afa565b600060208284031215613b4157600080fd5b5035919050565b600060208284031215613b5a57600080fd5b813561394281613afa565b60008060408385031215613b7857600080fd5b8235613b8381613afa565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015613bd35781516001600160a01b031684529284019290840190600101613bae565b5050508381038285015284518082528583019183019060005b81811015613c0857835183529284019291840191600101613bec565b5090979650505050505050565b60008060008060608587031215613c2b57600080fd5b8435613c3681613afa565b935060208501359250604085013567ffffffffffffffff80821115613c5a57600080fd5b818701915087601f830112613c6e57600080fd5b813581811115613c7d57600080fd5b886020828501011115613c8f57600080fd5b95989497505060200194505050565b600060208284031215613cb057600080fd5b5051919050565b6001600160a01b0392831681529116602082015260400190565b600060208284031215613ce357600080fd5b8151801515811461394257600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015613d605783516001600160a01b031683529284019291840191600101613d3b565b50909695505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613d9557613d95613cf3565b604052919050565b600067ffffffffffffffff821115613db757613db7613cf3565b5060051b60200190565b60006020808385031215613dd457600080fd5b825167ffffffffffffffff811115613deb57600080fd5b8301601f81018513613dfc57600080fd5b8051613e0f613e0a82613d9d565b613d6c565b81815260059190911b82018301908381019087831115613e2e57600080fd5b928401925b82841015613e4c57835182529284019290840190613e33565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613e8757613e87613e57565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613eb157613eb1613e8c565b500490565b60006020808385031215613ec957600080fd5b825167ffffffffffffffff811115613ee057600080fd5b8301601f81018513613ef157600080fd5b8051613eff613e0a82613d9d565b81815260059190911b82018301908381019087831115613f1e57600080fd5b928401925b82841015613e4c578351613f3681613afa565b82529284019290840190613f23565b6000600019821415613f5957613f59613e57565b5060010190565b600082821015613f7257613f72613e57565b500390565b60008219821115613f8a57613f8a613e57565b500190565b60008083128015600160ff1b850184121615613fad57613fad613e57565b6001600160ff1b0384018313811615613fc857613fc8613e57565b50500390565b60006001600160ff1b0381841382841380821686840486111615613ff457613ff4613e57565b600160ff1b600087128281168783058912161561401357614013613e57565b6000871292508782058712848416161561402f5761402f613e57565b8785058712818416161561404557614045613e57565b505050929093029392505050565b60008261406257614062613e8c565b600160ff1b82146000198414161561407c5761407c613e57565b500590565b6000600160ff1b82141561409757614097613e57565b5060000390565b60005b838110156140b95781810151838201526020016140a1565b83811115610bfd5750506000910152565b600081518084526140e281602086016020860161409e565b601f01601f19169290920160200192915050565b82815260406020820152600061393f60408301846140ca565b6000601f838184011261412157600080fd5b82516020614131613e0a83613d9d565b82815260059290921b8501810191818101908784111561415057600080fd5b8287015b848110156141e757805167ffffffffffffffff808211156141755760008081fd5b818a0191508a603f83011261418a5760008081fd5b858201516040828211156141a0576141a0613cf3565b6141b1828b01601f19168901613d6c565b92508183528c818386010111156141c85760008081fd5b6141d78289850183870161409e565b5050845250918301918301614154565b50979650505050505050565b6000806040838503121561420657600080fd5b825167ffffffffffffffff8082111561421e57600080fd5b818501915085601f83011261423257600080fd5b81516020614242613e0a83613d9d565b82815260059290921b8401810191818101908984111561426157600080fd5b948201945b8386101561428857855161427981613afa565b82529482019490820190614266565b918801519196509093505050808211156142a157600080fd5b506142ae8582860161410f565b9150509250929050565b600080821280156001600160ff1b03849003851316156142da576142da613e57565b600160ff1b83900384128116156142f3576142f3613e57565b50500190565b60018060a01b038416815282602082015260606040820152600061392760608301846140ca565b6000806040838503121561433357600080fd5b825161433e81613afa565b6020939093015192949293505050565b6000825161436081846020870161409e565b9190910192915050565b60208152600061394260208301846140ca56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "1042:2786:151:-:0;;;;;;;;;;;;-1:-1:-1;936:32:470;719:10:484;936:18:470;:32::i;:::-;1042:2786:151;;1496:153:471;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1042:2786:151:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040523480156200001157600080fd5b5060043610620000c35760003560e01c80637bf8f349116200007a5780637bf8f349146200015157806389f8132e14620001685780638da5cb5b1462000181578063a385fb961462000193578063e30c397814620001ac578063f2fde38b14620001be57600080fd5b80630d43e8ad14620000c857806316bb997f14620000f9578063534da460146200010d5780636969e58b1462000124578063715018a6146200013b57806379ba50971462000147575b600080fd5b600954620000dc906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b600a54620000dc906001600160a01b031681565b620000dc6200011e36600462000d17565b620001d5565b620000dc6200013536600462000d79565b62000273565b6200014562000588565b005b62000145620005df565b620000dc6200016236600462000db7565b6200065d565b620001726200076c565b604051620000f0919062000e0f565b6000546001600160a01b0316620000dc565b6200019d600b5481565b604051908152602001620000f0565b6001546001600160a01b0316620000dc565b62000145620001cf36600462000e5f565b620008b8565b600080620001e6878787876200065d565b9050670de0b6b3a76400008311156200026957604051639028493360e01b8152600481018490526001600160a01b038216906390284933906024016020604051808303816000875af115801562000241573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000267919062000e7f565b505b9695505050505050565b6001600160a01b03821660009081526007602052604081206200029790836200097c565b620002b557604051633f94e3f760e01b815260040160405180910390fd5b6000338484604051620002c89062000cf3565b6001600160a01b03938416815291831660208301529091166040820152606001604051809103906000f08015801562000305573d6000803e3d6000fd5b50905062000315600233620009a1565b50336000908152600460205260409020620003319082620009a1565b50600954604080516322ab0bc360e21b815290516000926001600160a01b031691638aac2f0c9160048083019260209291908290030181865afa1580156200037d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620003a3919062000e99565b90506000856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620003e6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200040c919062000e99565b60405163ec2ffdd160e01b81526001600160a01b03808316600483015291925060009184169063ec2ffdd190602401602060405180830381865afa15801562000459573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200047f919062000e99565b90506001600160a01b038116156200057b57826001600160a01b031663ca224d988386846001600160a01b0316633300183c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015620004e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000507919062000eb9565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260ff16604482015260016064820152608401600060405180830381600087803b1580156200056157600080fd5b505af115801562000576573d6000803e3d6000fd5b505050505b5091925050505b92915050565b62000592620009b8565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b031681146200064f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401620005d6565b6200065a8162000a16565b50565b6000806200066c868662000273565b9050620006856001600160a01b03851633308662000a31565b60405163095ea7b360e01b81526001600160a01b0382811660048301526024820185905285169063095ea7b3906044016020604051808303816000875af1158015620006d5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006fb919062000ede565b50604051633a8a230760e01b81526001600160a01b03858116600483015260248201859052821690633a8a230790604401600060405180830381600087803b1580156200074757600080fd5b505af11580156200075c573d6000803e3d6000fd5b509293505050505b949350505050565b604080516003808252608082019092526060919060009082602082018580368337019050509050636969e58b60e01b81620007a78462000f02565b93508360ff1681518110620007c057620007c062000f2e565b6001600160e01b031990921660209283029190910190910152637bf8f34960e01b81620007ed8462000f02565b93508360ff168151811062000806576200080662000f2e565b6001600160e01b03199092166020928302919091019091015263029a6d2360e51b81620008338462000f02565b93508360ff16815181106200084c576200084c62000f2e565b6001600160e01b03199092166020928302919091019091015260ff821615620005825760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401620005d6565b620008c2620009b8565b600180546001600160a01b0383166001600160a01b03199091168117909155620008f46000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6001600160a01b038116600090815260018301602052604081205415155b9392505050565b60006200099a836001600160a01b03841662000a93565b6000546001600160a01b0316331462000a145760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620005d6565b565b600180546001600160a01b03191690556200065a816200092c565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b17905262000a8d90859062000ae5565b50505050565b600081815260018301602052604081205462000adc5750815460018181018455600084815260208082209093018490558454848252828601909352604090209190915562000582565b50600062000582565b600062000b3c826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b031662000bc39092919063ffffffff16565b80519091501562000bbe578080602001905181019062000b5d919062000ede565b62000bbe5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401620005d6565b505050565b606062000764848460008585600080866001600160a01b0316858760405162000bed919062000f73565b60006040518083038185875af1925050503d806000811462000c2c576040519150601f19603f3d011682016040523d82523d6000602084013e62000c31565b606091505b509150915062000c448783838762000c4f565b979650505050505050565b6060831562000cc057825162000cb8576001600160a01b0385163b62000cb85760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401620005d6565b508162000764565b62000764838381511562000cd75781518083602001fd5b8060405162461bcd60e51b8152600401620005d6919062000f91565b6147498062000fc783390190565b6001600160a01b03811681146200065a57600080fd5b600080600080600060a0868803121562000d3057600080fd5b853562000d3d8162000d01565b9450602086013562000d4f8162000d01565b9350604086013562000d618162000d01565b94979396509394606081013594506080013592915050565b6000806040838503121562000d8d57600080fd5b823562000d9a8162000d01565b9150602083013562000dac8162000d01565b809150509250929050565b6000806000806080858703121562000dce57600080fd5b843562000ddb8162000d01565b9350602085013562000ded8162000d01565b9250604085013562000dff8162000d01565b9396929550929360600135925050565b6020808252825182820181905260009190848201906040850190845b8181101562000e535783516001600160e01b0319168352928401929184019160010162000e2b565b50909695505050505050565b60006020828403121562000e7257600080fd5b81356200099a8162000d01565b60006020828403121562000e9257600080fd5b5051919050565b60006020828403121562000eac57600080fd5b81516200099a8162000d01565b60006020828403121562000ecc57600080fd5b815160ff811681146200099a57600080fd5b60006020828403121562000ef157600080fd5b815180151581146200099a57600080fd5b600060ff82168062000f2457634e487b7160e01b600052601160045260246000fd5b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b60005b8381101562000f6157818101518382015260200162000f47565b8381111562000a8d5750506000910152565b6000825162000f8781846020870162000f44565b9190910192915050565b602081526000825180602084015262000fb281604085016020870162000f44565b601f01601f1916919091016040019291505056fe60a06040523480156200001157600080fd5b5060405162004749380380620047498339810160408190526200003491620002e5565b6001600160a01b0380841660805260408051635fe3b56760e01b81529051600092851691635fe3b5679160048083019260209291908290030181865afa15801562000083573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620000a9919062000339565b90506000826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015620000ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000112919062000339565b9050806001600160a01b0316826001600160a01b0316146200017a5760405162461bcd60e51b815260206004820152601460248201527f6d61726b65747320706f6f6c7320646966666572000000000000000000000000604482015260640160405180910390fd5b600380546001600160a01b038085166001600160a01b03199283161790925560018054928716929091168217905560408051636f307dc360e01b81529051636f307dc3916004808201926020929091908290030181865afa158015620001e4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200020a919062000339565b600480546001600160a01b039283166001600160a01b031991821617825560028054938716939091168317905560408051636f307dc360e01b81529051636f307dc3928281019260209291908290030181865afa15801562000270573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000296919062000339565b600580546001600160a01b03929092166001600160a01b0319928316179055600080549091163317905550620003609350505050565b6001600160a01b0381168114620002e257600080fd5b50565b600080600060608486031215620002fb57600080fd5b83516200030881620002cc565b60208501519093506200031b81620002cc565b60408501519092506200032e81620002cc565b809150509250925092565b6000602082840312156200034c57600080fd5b81516200035981620002cc565b9392505050565b6080516143b162000398600039600081816103a301528181610574015281816111e0015281816117dc0152611ba201526143b16000f3fe608060405234801561001057600080fd5b50600436106101425760003560e01c8063958fa280116100b8578063b21fd0291161007c578063b21fd02914610368578063c31443bb1461037b578063c393d0e314610383578063c45a01551461038b578063cb2af14b1461039e578063ef5cfb8c146103c557610142565b8063958fa28014610314578063a415deda14610327578063a7e269a61461033a578063a833cb7f1461034d578063aabaecd61461035557610142565b80633a8a23071161010a5780633a8a2307146102a55780633e2f147f146102b8578063459b9ef1146102d0578063555b334a146102d85780636813f999146102ee578063902849331461030157610142565b806316f0115b1461021a5780631d7d45b31461024a5780632f86e2dd14610272578063372500ab14610293578063374607041461029d575b60008054604051634377ba4160e11b815282356001600160e01b03191660048201526001600160a01b03909116906386ef748290602401602060405180830381865afa158015610196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101ba9190613b12565b90506001600160a01b0381166101f657604051637d60257960e01b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e808015610215573d6000f35b3d6000fd5b60035461022d906001600160a01b031681565b6040516001600160a01b0390911681526020015b60405180910390f35b61025d610258366004613b2f565b6103d8565b60408051928352602083019190915201610241565b610285610280366004613b48565b610567565b604051908152602001610241565b61029b610908565b005b610285610913565b61029b6102b3366004613b65565b610a9c565b6102c0610c04565b6040519015158152602001610241565b610285610c77565b6102e0610e86565b604051610241929190613b91565b60055461022d906001600160a01b031681565b61028561030f366004613b2f565b6111d3565b61029b610322366004613c15565b61128b565b60015461022d906001600160a01b031681565b60025461022d906001600160a01b031681565b61028561150d565b60045461022d906001600160a01b031681565b610285610376366004613b48565b6117cf565b6102856118c6565b610285611b87565b60005461022d906001600160a01b031681565b61022d7f000000000000000000000000000000000000000000000000000000000000000081565b61029b6103d3366004613b48565b611b97565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610430573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104549190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa1580156104a4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104c89190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015610518573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053c9190613c9e565b905060006105486118c6565b905080871161055981898587611f4b565b965096505050505050915091565b6000336001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016148015906105ad57506000546001600160a01b03163314155b156105cb576040516370d645e360e01b815260040160405180910390fd5b6105dc670de0b6b3a76400006123c0565b600160009054906101000a90046001600160a01b03166001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610631573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106559190613c9e565b50600354600154604051630ede4edd60e41b81526001600160a01b039182166004820152600092919091169063ede4edd0906024016020604051808303816000875af11580156106a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106cd9190613c9e565b905080156106f15760405163059548ef60e51b8152600481018290526024016101ed565b6001546040516370a0823160e01b81523060048201526001600160a01b039091169063db006a759082906370a0823190602401602060405180830381865afa158015610741573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107659190613c9e565b6040518263ffffffff1660e01b815260040161078391815260200190565b6020604051808303816000875af11580156107a2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107c69190613c9e565b905080156107ea5760405163eeddaac560e01b8152600481018290526024016101ed565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015610833573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108579190613c9e565b111561087b57600554600454610879916001600160a01b039081169116612968565b505b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa1580156108c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108e89190613c9e565b600454909250610902906001600160a01b03168484612af8565b50919050565b61091133611b97565b565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015610960573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109849190613c9e565b90508061099357600091505090565b600354600254604051630cbb414760e11b81523060048201526001600160a01b039182166024820152600160448201526000929190911690631976828e90606401602060405180830381865afa1580156109f1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a159190613c9e565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa158015610a63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a879190613c9e565b9050610a94828483612b5b565b935050505090565b610ab16001600160a01b038316333084612ea4565b610aba82612edc565b5060035460015460405163929fe9a160e01b81526001600160a01b039283169263929fe9a192610af292309290911690600401613cb7565b602060405180830381865afa158015610b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b339190613cd1565b610c005760408051600180825281830190925260009160208083019080368337505060015482519293506001600160a01b031691839150600090610b7957610b79613d09565b6001600160a01b039283166020918202929092010152600354604051631853304760e31b815291169063c299823890610bb6908490600401613d1f565b6000604051808303816000875af1158015610bd5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bfd9190810190613dc1565b50505b5050565b600154604051633af9e66960e01b81523060048201526000916001600160a01b031690633af9e66990602401602060405180830381865afa158015610c4d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c719190613c9e565b15919050565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015610cc4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ce89190613c9e565b905080610cf757600091505090565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa158015610d41573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d659190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015610db5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dd99190613c9e565b905060008160008054906101000a90046001600160a01b03166001600160a01b0316630da2262c6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190613c9e565b610e6590670de0b6b3a7640000613e6d565b610e6f9190613ea2565b9050610e7d81856000612b5b565b94505050505090565b6060806000600360009054906101000a90046001600160a01b03166001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ede573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610f069190810190613eb6565b9050805167ffffffffffffffff811115610f2257610f22613cf3565b604051908082528060200260200182016040528015610f4b578160200160208202803683370190505b509250805167ffffffffffffffff811115610f6857610f68613cf3565b604051908082528060200260200182016040528015610f91578160200160208202803683370190505b50915060005b81518110156111cd576000828281518110610fb457610fb4613d09565b6020908102919091010151600154604051632e6f912b60e21b81529192506001600160a01b038084169263b9be44ac92610ff49216903090600401613cb7565b6020604051808303816000875af1158015611013573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110379190613c9e565b50600254604051632e6f912b60e21b81526001600160a01b038381169263b9be44ac9261106c92909116903090600401613cb7565b6020604051808303816000875af115801561108b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110af9190613c9e565b50806001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110ee573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111129190613b12565b85838151811061112457611124613d09565b6001600160a01b039283166020918202929092010152604051630ff6b5a760e31b815230600482015290821690637fb5ad38906024016020604051808303816000875af1158015611179573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061119d9190613c9e565b8483815181106111af576111af613d09565b602090810291909101015250806111c581613f45565b915050610f97565b50509091565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161480159061121957506000546001600160a01b03163314155b15611237576040516370d645e360e01b815260040160405180910390fd5b670de0b6b3a7640000821161125757611257670de0b6b3a76400006123c0565b816112606118c6565b10156112745761126f82613090565b61127d565b61127d826123c0565b6112856118c6565b92915050565b6001546001600160a01b03163314156113735760006112ac82840184613b2f565b90506112b7816133dd565b600480546040516370a0823160e01b815230928101929092526000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015611305573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113299190613c9e565b90508481101561136c57600480546040516319ad25f160e11b81526001600160a01b039091169181019190915260248101829052604481018690526064016101ed565b5050611495565b6002546001600160a01b031633141561144d57600061139482840184613b2f565b90506113a084826134a3565b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156113e9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140d9190613c9e565b90508481101561136c576005546040516319ad25f160e11b81526001600160a01b03909116600482015260248101829052604481018690526064016101ed565b60405162461bcd60e51b815260206004820152601b60248201527f21666c206e6f742066726f6d20656974686572206d61726b657473000000000060448201526064016101ed565b60405163095ea7b360e01b8152336004820152602481018490526001600160a01b0385169063095ea7b3906044016020604051808303816000875af11580156114e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115069190613cd1565b5050505050565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611563573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115879190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa1580156115d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115fb9190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa15801561164b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061166f9190613c9e565b600154604051633af9e66960e01b81523060048201529192506000916001600160a01b0390911690633af9e66990602401602060405180830381865afa1580156116bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906116e19190613c9e565b90506000670de0b6b3a76400006116f88385613e6d565b6117029190613ea2565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa158015611750573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117749190613c9e565b90506000670de0b6b3a764000061178b8388613e6d565b6117959190613ea2565b905060006117a38285613f60565b9050856117b882670de0b6b3a7640000613e6d565b6117c29190613ea2565b9850505050505050505090565b6000336001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000161461181a576040516370d645e360e01b815260040160405180910390fd5b611822610c04565b61183f5760405163716041e560e01b815260040160405180910390fd5b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa158015611888573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118ac9190613c9e565b600554909150611285906001600160a01b03168483612af8565b600154604051633af9e66960e01b815230600482015260009182916001600160a01b0390911690633af9e66990602401602060405180830381865afa158015611913573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119379190613c9e565b90508061194657600091505090565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa158015611990573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119b49190613b12565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015611a04573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a289190613c9e565b90506000670de0b6b3a7640000611a3f8584613e6d565b611a499190613ea2565b6002546040516305eff7ef60e21b815230600482015291925060009182916001600160a01b0316906317bfdfbc90602401602060405180830381865afa158015611a97573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611abb9190613c9e565b90508015611b565760025460405163fc57d4df60e01b81526001600160a01b03918216600482015260009187169063fc57d4df90602401602060405180830381865afa158015611b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b339190613c9e565b9050670de0b6b3a7640000611b488383613e6d565b611b529190613ea2565b9250505b611b608284613f60565b611b7284670de0b6b3a7640000613e6d565b611b7c9190613ea2565b965050505050505090565b6000611b9233610567565b905090565b336001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001614801590611bdb57506000546001600160a01b03163314155b15611bf9576040516370d645e360e01b815260040160405180910390fd5b60035460408051633605b51b60e01b815290516000926001600160a01b031691633605b51b91600480830192869291908290030181865afa158015611c42573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6a9190810190613eb6565b905060005b8151811015611f46576000828281518110611c8c57611c8c613d09565b6020908102919091010151600154604051632e6f912b60e21b81529192506001600160a01b038084169263b9be44ac92611ccc9216903090600401613cb7565b6020604051808303816000875af1158015611ceb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d0f9190613c9e565b50600254604051632e6f912b60e21b81526001600160a01b038381169263b9be44ac92611d4492909116903090600401613cb7565b6020604051808303816000875af1158015611d63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d879190613c9e565b50604051633bd73ee360e21b81523060048201526001600160a01b0382169063ef5cfb8c90602401600060405180830381600087803b158015611dc957600080fd5b505af1158015611ddd573d6000803e3d6000fd5b505050506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e21573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e459190613b12565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038316906370a0823190602401602060405180830381865afa158015611e8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eb39190613c9e565b90508015611f305760405163a9059cbb60e01b81526001600160a01b0387811660048301526024820183905283169063a9059cbb906044016020604051808303816000875af1158015611f0a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2e9190613cd1565b505b5050508080611f3e90613f45565b915050611c6f565b505050565b600154604051633af9e66960e01b8152306004820152600091829182916001600160a01b031690633af9e66990602401602060405180830381865afa158015611f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611fbc9190613c9e565b6002546040516305eff7ef60e21b81523060048201529192506000916001600160a01b03909116906317bfdfbc90602401602060405180830381865afa15801561200a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061202e9190613c9e565b90506000881561212d5760008054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612089573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120ad9190613b12565b60055460048054604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b946120e594908216939091169101613cb7565b602060405180830381865afa158015612102573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121269190613c9e565b905061221d565b60008054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561217e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121a29190613b12565b60048054600554604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b946121d9948216939091169101613cb7565b602060405180830381865afa1580156121f6573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061221a9190613c9e565b90505b600061271061222c8382613f77565b61223e90670de0b6b3a7640000613e6d565b6122489190613ea2565b9050600080670de0b6b3a7640000612260878c613e6d565b61226a9190613ea2565b90506000670de0b6b3a7640000612281878c613e6d565b61228b9190613ea2565b90508b60006122a2670de0b6b3a764000083613f8f565b90508560006122b983670de0b6b3a7640000613fce565b6122c38584613fce565b6122cd9190613f8f565b6122d78587613fce565b6122e18886613fce565b6122eb9190613f8f565b6122fd90670de0b6b3a7640000613fce565b6123079190614053565b9050600081126123175780612320565b61232081614081565b96505050505050508881670de0b6b3a764000061233d9190613e6d565b6123479190613ea2565b96508761235c82670de0b6b3a7640000613e6d565b6123669190613ea2565b95508a1561239257670de0b6b3a76400006123818388613e6d565b61238b9190613ea2565b95506123b2565b670de0b6b3a76400006123a58389613e6d565b6123af9190613ea2565b96505b505050505094509492505050565b6000806000600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061243c9190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa15801561248c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124b09190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015612500573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125249190613c9e565b9050670de0b6b3a764000086116126dc576002546040516305eff7ef60e21b81523060048201526001600160a01b03909116906317bfdfbc90602401602060405180830381865afa15801561257d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125a19190613c9e565b935060006125af8386613e6d565b905060008060009054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612605573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126299190613b12565b60048054600554604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b94612660948216939091169101613cb7565b602060405180830381865afa15801561267d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a19190613c9e565b905060006127106126b28382613f77565b6126bc9085613e6d565b6126c69190613ea2565b90506126d28482613ea2565b97505050506126ef565b6126e96000878385611f4b565b90955093505b8315612774576002546040805160208082018990528251808303909101815281830192839052633c3b4b8960e01b9092526001600160a01b0390921691633c3b4b8991612741918891906044016140f6565b600060405180830381600087803b15801561275b57600080fd5b505af115801561276f573d6000803e3d6000fd5b505050505b6005546040516370a0823160e01b81523060048201526000916001600160a01b0316906370a0823190602401602060405180830381865afa1580156127bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127e19190613c9e565b9050801561295f576002546040516305eff7ef60e21b81523060048201526000916001600160a01b0316906317bfdfbc90602401602060405180830381865afa158015612832573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128569190613c9e565b9050801561295d57600082821161286d578161286f565b825b60055460025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af11580156128c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128ea9190613cd1565b5060025460405163073a938160e11b8152600481018390526001600160a01b0390911690630e752702906024016020604051808303816000875af1158015612936573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295a9190613c9e565b50505b505b50505050505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa1580156129b1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129d59190613c9e565b6000805460405163ed287f3f60e01b8152929350909182916001600160a01b03169063ed287f3f90612a0d9089908990600401613cb7565b600060405180830381865afa158015612a2a573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612a5291908101906141f3565b91509150815160001415612a7957604051634fd1fa8360e11b815260040160405180910390fd5b60005b8251811015612aee576000838281518110612a9957612a99613d09565b602002602001015190506000838381518110612ab757612ab7613d09565b60200260200101519050612acd898784846136e9565b9099508998509650869550829150612ae6905081613f45565b915050612a7c565b5050505092915050565b6040516001600160a01b038316602482015260448101829052611f4690849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261376a565b600080600360009054906101000a90046001600160a01b03166001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612bb1573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bd59190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa158015612c25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c499190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa158015612c99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cbd9190613c9e565b90506000670de0b6b3a7640000612cd48488613e6d565b612cde9190613ea2565b90506000670de0b6b3a7640000612cf5858b613e6d565b612cff9190613ea2565b90506000670de0b6b3a7640000612d16858b613e6d565b612d209190613ea2565b905060008060009054906101000a90046001600160a01b03166001600160a01b03166316bb997f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612d76573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d9a9190613b12565b60055460048054604051632f53ef2b60e01b81526001600160a01b0394851694632f53ef2b94612dd294908216939091169101613cb7565b602060405180830381865afa158015612def573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e139190613c9e565b9050612e20600a82613f77565b90506000612e3082612710613f77565b612e3c85612710613e6d565b612e469190613ea2565b90508285828682612e5783866142b8565b612e619190613f8f565b612e6b9190613f8f565b612e7582856142b8565b612e8790670de0b6b3a7640000613fce565b612e919190614053565b9f9e505050505050505050505050505050565b6040516001600160a01b0380851660248301528316604482015260648101829052610bfd9085906323b872dd60e01b90608401612b24565b6004546000906001600160a01b03838116911614612f0d57600454612f0b9083906001600160a01b0316612968565b505b600480546040516370a0823160e01b815230928101929092526001600160a01b0316906370a0823190602401602060405180830381865afa158015612f56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f7a9190613c9e565b6004805460015460405163095ea7b360e01b81526001600160a01b039182169381019390935260248301849052929350919091169063095ea7b3906044016020604051808303816000875af1158015612fd7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ffb9190613cd1565b5060015460405163140e25ad60e31b8152600481018390526000916001600160a01b03169063a0712d68906024016020604051808303816000875af1158015613048573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061306c9190613c9e565b9050801561090257604051631a25a97b60e31b8152600481018290526024016101ed565b600354604080516307dc0d1d60e41b815290516000926001600160a01b031691637dc0d1d09160048083019260209291908290030181865afa1580156130da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906130fe9190613b12565b60025460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919083169063fc57d4df90602401602060405180830381865afa15801561314e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131729190613c9e565b60015460405163fc57d4df60e01b81526001600160a01b0391821660048201529192506000919084169063fc57d4df90602401602060405180830381865afa1580156131c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131e69190613c9e565b90506000806131f86001878587611f4b565b6001546040805160208082018590528251808303909101815281830192839052633c3b4b8960e01b9092529395509193506001600160a01b031691633c3b4b8991613248918691906044016140f6565b600060405180830381600087803b15801561326257600080fd5b505af1158015613276573d6000803e3d6000fd5b5050600480546040516370a0823160e01b81523092810192909252600093506001600160a01b031691506370a0823190602401602060405180830381865afa1580156132c6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906132ea9190613c9e565b9050801561295f576004805460015460405163095ea7b360e01b81526001600160a01b039182169381019390935260248301849052169063095ea7b3906044016020604051808303816000875af1158015613349573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061336d9190613cd1565b5060015460405163140e25ad60e31b8152600481018390526001600160a01b039091169063a0712d68906024016020604051808303816000875af11580156133b9573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061295d9190613c9e565b6004546133f2906001600160a01b0316612edc565b5060025460405163317afabb60e21b8152600481018390526000916001600160a01b03169063c5ebeaec906024016020604051808303816000875af115801561343f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906134639190613c9e565b9050801561348757604051636f86fa6b60e11b8152600481018290526024016101ed565b600554600454611f46916001600160a01b039081169116612968565b6002546040516305eff7ef60e21b81523060048201526000916001600160a01b0316906317bfdfbc90602401602060405180830381865afa1580156134ec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906135109190613c9e565b905060008184106135215781613523565b835b60055460025460405163095ea7b360e01b81526001600160a01b03918216600482015260248101849052929350169063095ea7b3906044016020604051808303816000875af115801561357a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061359e9190613cd1565b5060025460405163073a938160e11b8152600481018390526000916001600160a01b031690630e752702906024016020604051808303816000875af11580156135eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061360f9190613c9e565b905080156136325760405162f0f70d60e41b8152600481018290526024016101ed565b60015460405163852a12e360e01b8152600481018690526001600160a01b039091169063852a12e3906024016020604051808303816000875af115801561367d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136a19190613c9e565b905080156136c55760405163213e72eb60e11b8152600481018290526024016101ed565b6004546005546136e1916001600160a01b039081169116612968565b505050505050565b6000806000613746856310badf4e60e01b89898860405160240161370f939291906142f9565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b03199093169290921790915261383c565b90508080602001905181019061375c9190614320565b925092505094509492505050565b60006137bf826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166139309092919063ffffffff16565b805190915015611f4657808060200190518101906137dd9190613cd1565b611f465760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b60648201526084016101ed565b60606001600160a01b0383163b6138a45760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016101ed565b600080846001600160a01b0316846040516138bf919061434e565b600060405180830381855af49150503d80600081146138fa576040519150601f19603f3d011682016040523d82523d6000602084013e6138ff565b606091505b5091509150613927828260405180606001604052806027815260200161437e60279139613949565b95945050505050565b606061393f8484600085613982565b90505b9392505050565b60608315613958575081613942565b8251156139685782518084602001fd5b8160405162461bcd60e51b81526004016101ed919061436a565b6060824710156139e35760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b60648201526084016101ed565b600080866001600160a01b031685876040516139ff919061434e565b60006040518083038185875af1925050503d8060008114613a3c576040519150601f19603f3d011682016040523d82523d6000602084013e613a41565b606091505b5091509150613a5287838387613a5f565b925050505b949350505050565b60608315613acb578251613ac4576001600160a01b0385163b613ac45760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e747261637400000060448201526064016101ed565b5081613a57565b613a578383815115613ae05781518083602001fd5b8060405162461bcd60e51b81526004016101ed919061436a565b6001600160a01b0381168114613b0f57600080fd5b50565b600060208284031215613b2457600080fd5b815161394281613afa565b600060208284031215613b4157600080fd5b5035919050565b600060208284031215613b5a57600080fd5b813561394281613afa565b60008060408385031215613b7857600080fd5b8235613b8381613afa565b946020939093013593505050565b604080825283519082018190526000906020906060840190828701845b82811015613bd35781516001600160a01b031684529284019290840190600101613bae565b5050508381038285015284518082528583019183019060005b81811015613c0857835183529284019291840191600101613bec565b5090979650505050505050565b60008060008060608587031215613c2b57600080fd5b8435613c3681613afa565b935060208501359250604085013567ffffffffffffffff80821115613c5a57600080fd5b818701915087601f830112613c6e57600080fd5b813581811115613c7d57600080fd5b886020828501011115613c8f57600080fd5b95989497505060200194505050565b600060208284031215613cb057600080fd5b5051919050565b6001600160a01b0392831681529116602082015260400190565b600060208284031215613ce357600080fd5b8151801515811461394257600080fd5b634e487b7160e01b600052604160045260246000fd5b634e487b7160e01b600052603260045260246000fd5b6020808252825182820181905260009190848201906040850190845b81811015613d605783516001600160a01b031683529284019291840191600101613d3b565b50909695505050505050565b604051601f8201601f1916810167ffffffffffffffff81118282101715613d9557613d95613cf3565b604052919050565b600067ffffffffffffffff821115613db757613db7613cf3565b5060051b60200190565b60006020808385031215613dd457600080fd5b825167ffffffffffffffff811115613deb57600080fd5b8301601f81018513613dfc57600080fd5b8051613e0f613e0a82613d9d565b613d6c565b81815260059190911b82018301908381019087831115613e2e57600080fd5b928401925b82841015613e4c57835182529284019290840190613e33565b979650505050505050565b634e487b7160e01b600052601160045260246000fd5b6000816000190483118215151615613e8757613e87613e57565b500290565b634e487b7160e01b600052601260045260246000fd5b600082613eb157613eb1613e8c565b500490565b60006020808385031215613ec957600080fd5b825167ffffffffffffffff811115613ee057600080fd5b8301601f81018513613ef157600080fd5b8051613eff613e0a82613d9d565b81815260059190911b82018301908381019087831115613f1e57600080fd5b928401925b82841015613e4c578351613f3681613afa565b82529284019290840190613f23565b6000600019821415613f5957613f59613e57565b5060010190565b600082821015613f7257613f72613e57565b500390565b60008219821115613f8a57613f8a613e57565b500190565b60008083128015600160ff1b850184121615613fad57613fad613e57565b6001600160ff1b0384018313811615613fc857613fc8613e57565b50500390565b60006001600160ff1b0381841382841380821686840486111615613ff457613ff4613e57565b600160ff1b600087128281168783058912161561401357614013613e57565b6000871292508782058712848416161561402f5761402f613e57565b8785058712818416161561404557614045613e57565b505050929093029392505050565b60008261406257614062613e8c565b600160ff1b82146000198414161561407c5761407c613e57565b500590565b6000600160ff1b82141561409757614097613e57565b5060000390565b60005b838110156140b95781810151838201526020016140a1565b83811115610bfd5750506000910152565b600081518084526140e281602086016020860161409e565b601f01601f19169290920160200192915050565b82815260406020820152600061393f60408301846140ca565b6000601f838184011261412157600080fd5b82516020614131613e0a83613d9d565b82815260059290921b8501810191818101908784111561415057600080fd5b8287015b848110156141e757805167ffffffffffffffff808211156141755760008081fd5b818a0191508a603f83011261418a5760008081fd5b858201516040828211156141a0576141a0613cf3565b6141b1828b01601f19168901613d6c565b92508183528c818386010111156141c85760008081fd5b6141d78289850183870161409e565b5050845250918301918301614154565b50979650505050505050565b6000806040838503121561420657600080fd5b825167ffffffffffffffff8082111561421e57600080fd5b818501915085601f83011261423257600080fd5b81516020614242613e0a83613d9d565b82815260059290921b8401810191818101908984111561426157600080fd5b948201945b8386101561428857855161427981613afa565b82529482019490820190614266565b918801519196509093505050808211156142a157600080fd5b506142ae8582860161410f565b9150509250929050565b600080821280156001600160ff1b03849003851316156142da576142da613e57565b600160ff1b83900384128116156142f3576142f3613e57565b50500190565b60018060a01b038416815282602082015260606040820152600061392760608301846140ca565b6000806040838503121561433357600080fd5b825161433e81613afa565b6020939093015192949293505050565b6000825161436081846020870161409e565b9190910192915050565b60208152600061394260208301846140ca56fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "1042:2786:151:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1127:37:152;;;;;-1:-1:-1;;;;;1127:37:152;;;;;;-1:-1:-1;;;;;211:32:504;;;193:51;;181:2;166:18;1127:37:152;;;;;;;;1168:47;;;;;-1:-1:-1;;;;;1168:47:152;;;3362:464:151;;;;;;:::i;:::-;;:::i;1998:859::-;;;;;;:::i;:::-;;:::i;174:106:139:-;;;:::i;:::-;;1729:206:471;;;:::i;2861:497:151:-;;;;;;:::i;:::-;;:::i;1326:485::-;;;:::i;:::-;;;;;;;:::i;1201:85:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;1201:85;;1219:28:152;;;;;;;;;3785:25:504;;;3773:2;3758:18;1219:28:152;3639:177:504;842:99:471;921:13;;-1:-1:-1;;;;;921:13:471;842:99;;1134:178;;;;;;:::i;:::-;;:::i;3362:464:151:-;3573:15;3596:24;3623:86;3645:17;3664:13;3679;3694:14;3623:21;:86::i;:::-;3596:113;;3736:4;3719:14;:21;3715:86;;;3750:44;;-1:-1:-1;;;3750:44:151;;;;;3785:25:504;;;-1:-1:-1;;;;;3750:28:151;;;;;3758:18:504;;3750:44:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;3715:86;3813:8;3362:464;-1:-1:-1;;;;;;3362:464:151:o;1998:859::-;-1:-1:-1;;;;;2116:48:151;;2088:15;2116:48;;;:29;:48;;;;;:81;;2182:13;2116:57;:81::i;:::-;2111:115;;2206:20;;-1:-1:-1;;;2206:20:151;;;;;;;;;;;2111:115;2233:24;2280:10;2292:17;2311:13;2260:65;;;;;:::i;:::-;-1:-1:-1;;;;;4563:15:504;;;4545:34;;4615:15;;;4610:2;4595:18;;4588:43;4667:15;;;4662:2;4647:18;;4640:43;4495:2;4480:18;2260:65:151;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2233:92:151;-1:-1:-1;2332:41:151;:25;2362:10;2332:29;:41::i;:::-;-1:-1:-1;2398:10:151;2379:30;;;;:18;:30;;;;;:53;;2422:8;2379:34;:53::i;:::-;-1:-1:-1;2481:14:151;;:36;;;-1:-1:-1;;;2481:36:151;;;;2439:39;;-1:-1:-1;;;;;2481:14:151;;:34;;:36;;;;;;;;;;;;;;:14;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2439:78;;2523:19;2553:17;-1:-1:-1;;;;;2553:29:151;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2621:49;;-1:-1:-1;;;2621:49:151;;-1:-1:-1;;;;;211:32:504;;;2621:49:151;;;193:51:504;2523:62:151;;-1:-1:-1;2591:27:151;;2621:36;;;;;166:18:504;;2621:49:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2591:79;-1:-1:-1;;;;;;2680:31:151;;;2676:155;;2721:19;-1:-1:-1;;;;;2721:31:151;;2753:11;2774:8;2785;-1:-1:-1;;;;;2785:30:151;;:32;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2721:103;;-1:-1:-1;;;;;;2721:103:151;;;;;;;-1:-1:-1;;;;;6127:15:504;;;2721:103:151;;;6109:34:504;6179:15;;;;6159:18;;;6152:43;6243:4;6231:17;6211:18;;;6204:45;2819:4:151;6265:18:504;;;6258:50;6043:19;;2721:103:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2676:155;-1:-1:-1;2844:8:151;;-1:-1:-1;;;1998:859:151;;;;;:::o;174:106:139:-;1094:13:470;:11;:13::i;:::-;235:40:139::1;::::0;-1:-1:-1;;;235:40:139;;6521:2:504;235:40:139::1;::::0;::::1;6503:21:504::0;6560:2;6540:18;;;6533:30;6599:32;6579:18;;;6572:60;6649:18;;235:40:139::1;;;;;;;;1729:206:471::0;921:13;;719:10:484;;-1:-1:-1;;;;;921:13:471;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:471;;6880:2:504;1814:78:471;;;6862:21:504;6919:2;6899:18;;;6892:30;6958:34;6938:18;;;6931:62;-1:-1:-1;;;7009:18:504;;;7002:39;7058:19;;1814:78:471;6678:405:504;1814:78:471;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;2861:497:151:-;3035:15;3058:24;3085:48;3100:17;3119:13;3085:14;:48::i;:::-;3058:75;-1:-1:-1;3139:73:151;-1:-1:-1;;;;;3139:30:151;;3170:10;3190:4;3197:14;3139:30;:73::i;:::-;3218:56;;-1:-1:-1;;;3218:56:151;;-1:-1:-1;;;;;7280:32:504;;;3218:56:151;;;7262:51:504;7329:18;;;7322:34;;;3218:21:151;;;;;7235:18:504;;3218:56:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3280:52:151;;-1:-1:-1;;;3280:52:151;;-1:-1:-1;;;;;7280:32:504;;;3280:52:151;;;7262:51:504;7329:18;;;7322:34;;;3280:21:151;;;;;7235:18:504;;3280:52:151;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3345:8:151;;-1:-1:-1;;;;2861:497:151;;;;;;;:::o;1326:485::-;1475:22;;;1432:1;1475:22;;;;;;;;;1392:15;;1432:1;1415:14;;1432:1;1475:22;;;1392:15;;1475:22;;;;;-1:-1:-1;;1439:58:151;-1:-1:-1;;;;1439:58:151;1521:10;;;:::i;:::-;;;;1503:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1503:60:151;;;:29;;;;;;;;;;;:60;-1:-1:-1;;;1569:17:151;1587:10;;;:::i;:::-;;;;1569:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1569:67:151;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;1642:17:151;1660:10;;;:::i;:::-;;;;1642:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1642:74:151;;;:29;;;;;;;;;;;:74;1730:13;;;;1722:54;;;;-1:-1:-1;;;1722:54:151;;8702:2:504;1722:54:151;;;8684:21:504;8741:2;8721:18;;;8714:30;8780;8760:18;;;8753:58;8828:18;;1722:54:151;8500:352:504;1134:178:471;1094:13:470;:11;:13::i;:::-;1223::471::1;:24:::0;;-1:-1:-1;;;;;1223:24:471;::::1;-1:-1:-1::0;;;;;;1223:24:471;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::470::0;1273:6;-1:-1:-1;;;;;1273:6:470;;1201:85;1287:7:471::1;-1:-1:-1::0;;;;;1262:43:471::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;8852:165:487:-;-1:-1:-1;;;;;8985:23:487;;8932:4;4343:19;;;:12;;;:19;;;;;;:24;;8955:55;8948:62;8852:165;-1:-1:-1;;;8852:165:487:o;8297:150::-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:487;;8390:4;:50::i;1359:130:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;719:10:484;1422:23:470;1414:68;;;;-1:-1:-1;;;1414:68:470;;9059:2:504;1414:68:470;;;9041:21:504;;;9078:18;;;9071:30;9137:34;9117:18;;;9110:62;9189:18;;1414:68:470;8857:356:504;1414:68:470;1359:130::o;1496:153:471:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;:34::i;1040:252:465:-;1216:68;;;-1:-1:-1;;;;;9476:15:504;;;1216:68:465;;;9458:34:504;9528:15;;9508:18;;;9501:43;9560:18;;;;9553:34;;;1216:68:465;;;;;;;;;;9393:18:504;;;;1216:68:465;;;;;;;;-1:-1:-1;;;;;1216:68:465;-1:-1:-1;;;1216:68:465;;;1189:96;;1209:5;;1189:19;:96::i;:::-;1040:252;;;;:::o;2206:404:487:-;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:487;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:487;2581:12;;3868:717:465;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:465;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:465;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:465;;9800:2:504;4483:85:465;;;9782:21:504;9839:2;9819:18;;;9812:30;9878:34;9858:18;;;9851:62;-1:-1:-1;;;9929:18:504;;;9922:40;9979:19;;4483:85:465;9598:406:504;4483:85:465;3949:636;3868:717;;:::o;3883:223:466:-;4016:12;4047:52;4069:6;4077:4;4083:1;4086:12;4016;5251;5265:23;5292:6;-1:-1:-1;;;;;5292:11:466;5311:5;5318:4;5292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:73;;;;5340:69;5367:6;5375:7;5384:10;5396:12;5340:26;:69::i;:::-;5333:76;4970:446;-1:-1:-1;;;;;;;4970:446:466:o;6588:628::-;6768:12;6796:7;6792:418;;;6823:17;;6819:286;;-1:-1:-1;;;;;1476:19:466;;;7030:60;;;;-1:-1:-1;;;7030:60:466;;11160:2:504;7030:60:466;;;11142:21:504;11199:2;11179:18;;;11172:30;11238:31;11218:18;;;11211:59;11287:18;;7030:60:466;10958:353:504;7030:60:466;-1:-1:-1;7125:10:466;7118:17;;6792:418;7166:33;7174:10;7186:12;7897:17;;:21;7893:379;;8125:10;8119:17;8181:15;8168:10;8164:2;8160:19;8153:44;7893:379;8248:12;8241:20;;-1:-1:-1;;;8241:20:466;;;;;;;;:::i;-1:-1:-1:-;;;;;;;;:::o;493:140:504:-;-1:-1:-1;;;;;577:31:504;;567:42;;557:70;;623:1;620;613:12;638:756;795:6;803;811;819;827;880:3;868:9;859:7;855:23;851:33;848:53;;;897:1;894;887:12;848:53;936:9;923:23;955:40;989:5;955:40;:::i;:::-;1014:5;-1:-1:-1;1071:2:504;1056:18;;1043:32;1084:42;1043:32;1084:42;:::i;:::-;1145:7;-1:-1:-1;1204:2:504;1189:18;;1176:32;1217:42;1176:32;1217:42;:::i;:::-;638:756;;;;-1:-1:-1;1278:7:504;;1332:2;1317:18;;1304:32;;-1:-1:-1;1383:3:504;1368:19;1355:33;;638:756;-1:-1:-1;;638:756:504:o;1632:440::-;1734:6;1742;1795:2;1783:9;1774:7;1770:23;1766:32;1763:52;;;1811:1;1808;1801:12;1763:52;1850:9;1837:23;1869:40;1903:5;1869:40;:::i;:::-;1928:5;-1:-1:-1;1985:2:504;1970:18;;1957:32;1998:42;1957:32;1998:42;:::i;:::-;2059:7;2049:17;;;1632:440;;;;;:::o;2077:687::-;2225:6;2233;2241;2249;2302:3;2290:9;2281:7;2277:23;2273:33;2270:53;;;2319:1;2316;2309:12;2270:53;2358:9;2345:23;2377:40;2411:5;2377:40;:::i;:::-;2436:5;-1:-1:-1;2493:2:504;2478:18;;2465:32;2506:42;2465:32;2506:42;:::i;:::-;2567:7;-1:-1:-1;2626:2:504;2611:18;;2598:32;2639:42;2598:32;2639:42;:::i;:::-;2077:687;;;;-1:-1:-1;2700:7:504;;2754:2;2739:18;2726:32;;-1:-1:-1;;2077:687:504:o;2769:657::-;2938:2;2990:21;;;3060:13;;2963:18;;;3082:22;;;2909:4;;2938:2;3161:15;;;;3135:2;3120:18;;;2909:4;3204:196;3218:6;3215:1;3212:13;3204:196;;;3283:13;;-1:-1:-1;;;;;;3279:40:504;3267:53;;3375:15;;;;3340:12;;;;3240:1;3233:9;3204:196;;;-1:-1:-1;3417:3:504;;2769:657;-1:-1:-1;;;;;;2769:657:504:o;3821:256::-;3880:6;3933:2;3921:9;3912:7;3908:23;3904:32;3901:52;;;3949:1;3946;3939:12;3901:52;3988:9;3975:23;4007:40;4041:5;4007:40;:::i;4082:184::-;4152:6;4205:2;4193:9;4184:7;4180:23;4176:32;4173:52;;;4221:1;4218;4211:12;4173:52;-1:-1:-1;4244:16:504;;4082:184;-1:-1:-1;4082:184:504:o;4694:289::-;4793:6;4846:2;4834:9;4825:7;4821:23;4817:32;4814:52;;;4862:1;4859;4852:12;4814:52;4894:9;4888:16;4913:40;4947:5;4913:40;:::i;5572:273::-;5640:6;5693:2;5681:9;5672:7;5668:23;5664:32;5661:52;;;5709:1;5706;5699:12;5661:52;5741:9;5735:16;5791:4;5784:5;5780:16;5773:5;5770:27;5760:55;;5811:1;5808;5801:12;7367:277;7434:6;7487:2;7475:9;7466:7;7462:23;7458:32;7455:52;;;7503:1;7500;7493:12;7455:52;7535:9;7529:16;7588:5;7581:13;7574:21;7567:5;7564:32;7554:60;;7610:1;7607;7600:12;8088:275;8125:3;8169:4;8162:5;8158:16;8193:7;8183:138;;8243:10;8238:3;8234:20;8231:1;8224:31;8278:4;8275:1;8268:15;8306:4;8303:1;8296:15;8183:138;-1:-1:-1;;8337:20:504;;8088:275;-1:-1:-1;;8088:275:504:o;8368:127::-;8429:10;8424:3;8420:20;8417:1;8410:31;8460:4;8457:1;8450:15;8484:4;8481:1;8474:15;10416:258;10488:1;10498:113;10512:6;10509:1;10506:13;10498:113;;;10588:11;;;10582:18;10569:11;;;10562:39;10534:2;10527:10;10498:113;;;10629:6;10626:1;10623:13;10620:48;;;-1:-1:-1;;10664:1:504;10646:16;;10639:27;10416:258::o;10679:274::-;10808:3;10846:6;10840:13;10862:53;10908:6;10903:3;10896:4;10888:6;10884:17;10862:53;:::i;:::-;10931:16;;;;;10679:274;-1:-1:-1;;10679:274:504:o;11316:383::-;11465:2;11454:9;11447:21;11428:4;11497:6;11491:13;11540:6;11535:2;11524:9;11520:18;11513:34;11556:66;11615:6;11610:2;11599:9;11595:18;11590:2;11582:6;11578:15;11556:66;:::i;:::-;11683:2;11662:15;-1:-1:-1;;11658:29:504;11643:45;;;;11690:2;11639:54;;11316:383;-1:-1:-1;;11316:383:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_getExtensionFunctions()": "89f8132e", + "acceptOwnership()": "79ba5097", + "blocksPerYear()": "a385fb96", + "createAndFundPosition(address,address,address,uint256)": "7bf8f349", + "createAndFundPositionAtRatio(address,address,address,uint256,uint256)": "534da460", + "createPosition(address,address)": "6969e58b", + "feeDistributor()": "0d43e8ad", + "liquidatorsRegistry()": "16bb997f", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LeveredPositionsLens.json b/packages/sdk/deployments/bob/LeveredPositionsLens.json new file mode 100644 index 000000000..b9a765ab0 --- /dev/null +++ b/packages/sdk/deployments/bob/LeveredPositionsLens.json @@ -0,0 +1,730 @@ +{ + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "factory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ILeveredPositionFactory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBorrowRateAtRatio", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_stableMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_equityAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_targetLeverageRatio", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBorrowableMarketsAndRates", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "markets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingsPrices", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "names", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "symbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "rates", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "decimals", + "type": "uint8[]", + "internalType": "uint8[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCollateralMarkets", + "inputs": [], + "outputs": [ + { + "name": "markets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "poolOfMarket", + "type": "address[]", + "internalType": "contract IonicComptroller[]" + }, + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingPrices", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "names", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "symbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "decimals", + "type": "uint8[]", + "internalType": "uint8[]" + }, + { + "name": "totalUnderlyingSupplied", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "ratesPerBlock", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getLeverageRatioAfterFunding", + "inputs": [ + { + "name": "pos", + "type": "address", + "internalType": "contract LeveredPosition" + }, + { + "name": "newFunding", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNetAPY", + "inputs": [ + { + "name": "_supplyAPY", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_supplyAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_stableMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_targetLeverageRatio", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "netAPY", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNetApyForPosition", + "inputs": [ + { + "name": "pos", + "type": "address", + "internalType": "contract LeveredPosition" + }, + { + "name": "supplyAPY", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNetApyForPositionAfterFunding", + "inputs": [ + { + "name": "pos", + "type": "address", + "internalType": "contract LeveredPosition" + }, + { + "name": "supplyAPY", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "newFunding", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPositionInfo", + "inputs": [ + { + "name": "pos", + "type": "address", + "internalType": "contract LeveredPosition" + }, + { + "name": "supplyApy", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "info", + "type": "tuple", + "internalType": "struct LeveredPositionsLens.PositionInfo", + "components": [ + { + "name": "collateralAssetPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowedAssetPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "positionSupplyAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "positionValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "debtAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "debtValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "equityAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "equityValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currentApy", + "type": "int256", + "internalType": "int256" + }, + { + "name": "debtRatio", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "liquidationThreshold", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "safetyBuffer", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPositionsInfo", + "inputs": [ + { + "name": "positions", + "type": "address[]", + "internalType": "contract LeveredPosition[]" + }, + { + "name": "supplyApys", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [ + { + "name": "infos", + "type": "tuple[]", + "internalType": "struct LeveredPositionsLens.PositionInfo[]", + "components": [ + { + "name": "collateralAssetPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowedAssetPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "positionSupplyAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "positionValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "debtAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "debtValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "equityAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "equityValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currentApy", + "type": "int256", + "internalType": "int256" + }, + { + "name": "debtRatio", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "liquidationThreshold", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "safetyBuffer", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_factory", + "type": "address", + "internalType": "contract ILeveredPositionFactory" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reinitialize", + "inputs": [ + { + "name": "_factory", + "type": "address", + "internalType": "contract ILeveredPositionFactory" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "transactionIndex": 1, + "gasUsed": "746921", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000800000000100000000000000000000000000000000000000000000000000000000000080020000000000800000000000400000000000000000000400008000001000000000000000000000000000000020000000000000000000040000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x58294990ae1f35958cdd317a43871d788362b9ca6607454e111e8d940e6e273d", + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3778034, + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000b6c55df813c38635665151ee504837e1316f3654" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x58294990ae1f35958cdd317a43871d788362b9ca6607454e111e8d940e6e273d" + }, + { + "transactionIndex": 1, + "blockNumber": 3778034, + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 1, + "blockHash": "0x58294990ae1f35958cdd317a43871d788362b9ca6607454e111e8d940e6e273d" + }, + { + "transactionIndex": 1, + "blockNumber": 3778034, + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 2, + "blockHash": "0x58294990ae1f35958cdd317a43871d788362b9ca6607454e111e8d940e6e273d" + } + ], + "blockNumber": 3778034, + "cumulativeGasUsed": "790760", + "status": 1, + "byzantium": true + }, + "args": [ + "0xb6c55DF813C38635665151eE504837E1316f3654", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xc4d66de80000000000000000000000001dd45c9fb4c8ccb678781982774f006f24b8eac1" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0x1DD45c9fB4C8CcB678781982774F006F24b8EaC1" + ] + }, + "implementation": "0xb6c55DF813C38635665151eE504837E1316f3654", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LeveredPositionsLens_Implementation.json b/packages/sdk/deployments/bob/LeveredPositionsLens_Implementation.json new file mode 100644 index 000000000..482601e62 --- /dev/null +++ b/packages/sdk/deployments/bob/LeveredPositionsLens_Implementation.json @@ -0,0 +1,1442 @@ +{ + "address": "0xb6c55DF813C38635665151eE504837E1316f3654", + "abi": [ + { + "type": "function", + "name": "factory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract ILeveredPositionFactory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBorrowRateAtRatio", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_stableMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_equityAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_targetLeverageRatio", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBorrowableMarketsAndRates", + "inputs": [ + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "markets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingsPrices", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "names", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "symbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "rates", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "decimals", + "type": "uint8[]", + "internalType": "uint8[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getCollateralMarkets", + "inputs": [], + "outputs": [ + { + "name": "markets", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "poolOfMarket", + "type": "address[]", + "internalType": "contract IonicComptroller[]" + }, + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingPrices", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "names", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "symbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "decimals", + "type": "uint8[]", + "internalType": "uint8[]" + }, + { + "name": "totalUnderlyingSupplied", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "ratesPerBlock", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getLeverageRatioAfterFunding", + "inputs": [ + { + "name": "pos", + "type": "address", + "internalType": "contract LeveredPosition" + }, + { + "name": "newFunding", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNetAPY", + "inputs": [ + { + "name": "_supplyAPY", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_supplyAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "_collateralMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_stableMarket", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "_targetLeverageRatio", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "netAPY", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNetApyForPosition", + "inputs": [ + { + "name": "pos", + "type": "address", + "internalType": "contract LeveredPosition" + }, + { + "name": "supplyAPY", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getNetApyForPositionAfterFunding", + "inputs": [ + { + "name": "pos", + "type": "address", + "internalType": "contract LeveredPosition" + }, + { + "name": "supplyAPY", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "newFunding", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "int256", + "internalType": "int256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPositionInfo", + "inputs": [ + { + "name": "pos", + "type": "address", + "internalType": "contract LeveredPosition" + }, + { + "name": "supplyApy", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "info", + "type": "tuple", + "internalType": "struct LeveredPositionsLens.PositionInfo", + "components": [ + { + "name": "collateralAssetPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowedAssetPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "positionSupplyAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "positionValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "debtAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "debtValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "equityAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "equityValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currentApy", + "type": "int256", + "internalType": "int256" + }, + { + "name": "debtRatio", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "liquidationThreshold", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "safetyBuffer", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPositionsInfo", + "inputs": [ + { + "name": "positions", + "type": "address[]", + "internalType": "contract LeveredPosition[]" + }, + { + "name": "supplyApys", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [ + { + "name": "infos", + "type": "tuple[]", + "internalType": "struct LeveredPositionsLens.PositionInfo[]", + "components": [ + { + "name": "collateralAssetPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowedAssetPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "positionSupplyAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "positionValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "debtAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "debtValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "equityAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "equityValue", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "currentApy", + "type": "int256", + "internalType": "int256" + }, + { + "name": "debtRatio", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "liquidationThreshold", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "safetyBuffer", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_factory", + "type": "address", + "internalType": "contract ILeveredPositionFactory" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "reinitialize", + "inputs": [ + { + "name": "_factory", + "type": "address", + "internalType": "contract ILeveredPositionFactory" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xed699974fc3b94a2780cc8441fcda3f9ed1a70863739597f40ffe6d70b37fc9a", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xb6c55DF813C38635665151eE504837E1316f3654", + "transactionIndex": 1, + "gasUsed": "2432557", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa48380a34ab22af6239a57a71aae691cf0fa96f76b9d5484ef722ce56fca5ca2", + "transactionHash": "0xed699974fc3b94a2780cc8441fcda3f9ed1a70863739597f40ffe6d70b37fc9a", + "logs": [], + "blockNumber": 3778029, + "cumulativeGasUsed": "2476384", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "factory", + "outputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_targetLeverageRatio", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowRateAtRatio", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowableMarketsAndRates", + "outputs": [ + { + "internalType": "address[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "underlyingsPrices", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "names", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "symbols", + "type": "string[]" + }, + { + "internalType": "uint256[]", + "name": "rates", + "type": "uint256[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getCollateralMarkets", + "outputs": [ + { + "internalType": "address[]", + "name": "markets", + "type": "address[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "poolOfMarket", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "underlyingPrices", + "type": "uint256[]" + }, + { + "internalType": "string[]", + "name": "names", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "symbols", + "type": "string[]" + }, + { + "internalType": "uint8[]", + "name": "decimals", + "type": "uint8[]" + }, + { + "internalType": "uint256[]", + "name": "totalUnderlyingSupplied", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "ratesPerBlock", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "newFunding", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getLeverageRatioAfterFunding", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "_supplyAPY", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "_supplyAmount", + "type": "uint256" + }, + { + "internalType": "contract ICErc20", + "name": "_collateralMarket", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "_stableMarket", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_targetLeverageRatio", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNetAPY", + "outputs": [ + { + "internalType": "int256", + "name": "netAPY", + "type": "int256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyAPY", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNetApyForPosition", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyAPY", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "newFunding", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getNetApyForPositionAfterFunding", + "outputs": [ + { + "internalType": "int256", + "name": "", + "type": "int256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition", + "name": "pos", + "type": "address" + }, + { + "internalType": "uint256", + "name": "supplyApy", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPositionInfo", + "outputs": [ + { + "internalType": "struct LeveredPositionsLens.PositionInfo", + "name": "info", + "type": "tuple", + "components": [ + { + "internalType": "uint256", + "name": "collateralAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowedAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionSupplyAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityValue", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "currentApy", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "debtRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "safetyBuffer", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract LeveredPosition[]", + "name": "positions", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "supplyApys", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPositionsInfo", + "outputs": [ + { + "internalType": "struct LeveredPositionsLens.PositionInfo[]", + "name": "infos", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "collateralAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowedAssetPrice", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionSupplyAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "positionValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "debtValue", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "equityValue", + "type": "uint256" + }, + { + "internalType": "int256", + "name": "currentApy", + "type": "int256" + }, + { + "internalType": "uint256", + "name": "debtRatio", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationThreshold", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "safetyBuffer", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "_factory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "contract ILeveredPositionFactory", + "name": "_factory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reinitialize" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getBorrowRateAtRatio(address,address,uint256,uint256)": { + "details": "returns the Rate for the chosen borrowable at the specified leverage ratio and supply amount" + }, + "getBorrowableMarketsAndRates(address)": { + "details": "returns lists of the market addresses, names, symbols and the current Rate for each Borrowable asset" + }, + "getCollateralMarkets()": { + "details": "returns lists of the market addresses, names and symbols of the underlying assets of those collateral markets that are whitelisted" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getBorrowRateAtRatio(address,address,uint256,uint256)": { + "notice": "this is a lens fn, it is not intended to be used on-chain" + }, + "getBorrowableMarketsAndRates(address)": { + "notice": "this is a lens fn, it is not intended to be used on-chain" + }, + "getCollateralMarkets()": { + "notice": "this is a lens fn, it is not intended to be used on-chain" + }, + "getNetAPY(uint256,uint256,address,address,uint256)": { + "notice": "this is a lens fn, it is not intended to be used on-chain" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/levered/LeveredPositionsLens.sol": "LeveredPositionsLens" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/IFlashLoanReceiver.sol": { + "keccak256": "0x3db1dbf3e47975f60cccc859740aa84665d9fd683079c7329285008502c454da", + "urls": [ + "bzz-raw://89727af88e6d376eced9a6ea97c3da80d6c801198f133d9d6b887894f7b8ab00", + "dweb:/ipfs/QmVS7Thpbkt3RGi4UsKev94BJdLstHiGHrGk1mPXadSqS2" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/ILeveredPositionFactory.sol": { + "keccak256": "0x422831aefc6bc1edc9864205bf710620d25b9e4d8138bcf5c13020fe3738f103", + "urls": [ + "bzz-raw://d05924628c79254bdeb073a2791e1b82c5cae603015dbeb138f87267fd886c3b", + "dweb:/ipfs/QmbP4oeh1TksPdLMPEM1SzSZaeCF7bCX99ycNuo4ezPPGZ" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/levered/LeveredPosition.sol": { + "keccak256": "0x7313f8b1f26bc2ee299926399992dde9eccb7fd4a37504699481874163d093ea", + "urls": [ + "bzz-raw://077f337985aa2c8d5aa6cb306c1214e82992bdeb519cfaa396c92dc892f7f25d", + "dweb:/ipfs/QmQcLA9ULKaKSHD8LDJYVpaQLroybuBtKywWKSjskSfjF7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionStorage.sol": { + "keccak256": "0xe3342347e2315c9a7a8503ef7ba83390f1cd296318a50952a88d984af940e430", + "urls": [ + "bzz-raw://e6245ac45d4f691c1565e1f7228e475dcfa012ac5394a5b3142e1437efc33ba5", + "dweb:/ipfs/Qme2VMo4kP4DpANSZVrsAYYF8bEq9aySjMveDo1y7iMMC7" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/levered/LeveredPositionsLens.sol": { + "keccak256": "0x00f592d293fa179b1737b66421e4b74b7d2f59558154265c5dfb1344b0a00c98", + "urls": [ + "bzz-raw://946fd2546f9c1e5e53f101acc24cbf1d43cd3b913275926784bbaedf9a1dd5a3", + "dweb:/ipfs/QmTDqVXYvA6f7JvyprtJEJ2zG6GC2orWrwziSH98Qw5fcN" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheel.sol": { + "keccak256": "0x8d4dc0e54619cbf9d7a503c9664163c55dbfbd43dc4ec6c5156711a5fd6bee34", + "urls": [ + "bzz-raw://90e2282f7bc72e65c084f40eee44e77f5a59a0702b66222595c417d078094cd5", + "dweb:/ipfs/QmY6jo9jnqeQsD8S6vSSWWT7NJdsXpVQZQh6Vaq6ZZo5QA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50612b0a806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638f4b1166116100715780638f4b11661461015e578063c03497c01461017e578063c45a01551461019b578063c4d66de8146101cc578063cc3e7804146101e1578063f7e7d1fd146101f457600080fd5b8063012db95c146100b95780631327d7fb146100df5780631a610317146100ff57806360ff773e146101125780636bbdc780146101385780638de1624d1461014b575b600080fd5b6100cc6100c7366004612189565b610207565b6040519081526020015b60405180910390f35b6100f26100ed366004612189565b610396565b6040516100d69190612233565b6100cc61010d366004612189565b6108ca565b610125610120366004612242565b6108df565b6040516100d697969594939291906123a0565b6100cc610146366004612429565b610f5d565b6100cc61015936600461246f565b61124a565b61017161016c36600461250c565b611565565b6040516100d69190612577565b610186611647565b6040516100d6999897969594939291906125c6565b6000546101b4906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100d6565b6101df6101da366004612242565b611e32565b005b6100cc6101ef3660046126bc565b611f21565b6101df610202366004612242565b61206a565b600080836001600160a01b031663a833cb7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c91906126f1565b90508015801561027a575082155b15610289576000915050610390565b6000846001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ed919061270a565b604051633af9e66960e01b81526001600160a01b0387811660048301529190911690633af9e66990602401602060405180830381865afa158015610335573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035991906126f1565b9050610365848361273d565b61036f858361273d565b61038190670de0b6b3a7640000612755565b61038b919061278a565b925050505b92915050565b61039e612110565b6000836001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610402919061270a565b90506000846001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610444573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610468919061270a565b9050806001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc919061270a565b60405163fc57d4df60e01b81526001600160a01b038481166004830152919091169063fc57d4df90602401602060405180830381865afa158015610514573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053891906126f1565b8352604051633af9e66960e01b81526001600160a01b038681166004830152831690633af9e66990602401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a491906126f1565b604084018190528351670de0b6b3a7640000916105c091612755565b6105ca919061278a565b60608401526105d985856108ca565b836101000181815250506000856001600160a01b031663a7e269a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061270a565b9050816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab919061270a565b60405163fc57d4df60e01b81526001600160a01b038381166004830152919091169063fc57d4df90602401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071791906126f1565b60208501526040516305eff7ef60e21b81526001600160a01b0387811660048301528216906317bfdfbc90602401602060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078691906126f1565b608085018190526020850151670de0b6b3a7640000916107a591612755565b6107af919061278a565b60a0850181905260608501516107c5919061279e565b60e08501526060840151156107ff57606084015160a08501516107f090670de0b6b3a7640000612755565b6107fa919061278a565b610802565b60005b610120850152835160e085015161082190670de0b6b3a7640000612755565b61082b919061278a565b60c085015250604051638e8f294b60e01b81526001600160a01b03838116600483015260009190831690638e8f294b906024016040805180830381865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906127b5565b61014086018190526101208601519092506108ba91508261279e565b6101608501525091949350505050565b60006108d883836000611f21565b9392505050565b600054604051637a73083360e11b81526001600160a01b038381166004830152606092839283928392839283928392620100009004169063f4e6106690602401600060405180830381865afa15801561093c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610964919081019061282e565b965086516001600160401b0381111561097f5761097f6127e8565b6040519080825280602002602001820160405280156109a8578160200160208202803683370190505b50955086516001600160401b038111156109c4576109c46127e8565b6040519080825280602002602001820160405280156109f757816020015b60608152602001906001900390816109e25790505b50935086516001600160401b03811115610a1357610a136127e8565b604051908082528060200260200182016040528015610a4657816020015b6060815260200190600190039081610a315790505b50925086516001600160401b03811115610a6257610a626127e8565b604051908082528060200260200182016040528015610a8b578160200160208202803683370190505b50915086516001600160401b03811115610aa757610aa76127e8565b604051908082528060200260200182016040528015610ad0578160200160208202803683370190505b50905086516001600160401b03811115610aec57610aec6127e8565b604051908082528060200260200182016040528015610b15578160200160208202803683370190505b50945060005b8751811015610f51576000888281518110610b3857610b386128df565b602002602001015190506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba6919061270a565b905080898481518110610bbb57610bbb6128df565b60200260200101906001600160a01b031690816001600160a01b0316815250506000819050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4691908101906128f5565b888581518110610c5857610c586128df565b6020026020010181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc991908101906128f5565b878581518110610cdb57610cdb6128df565b6020026020010181905250826001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4891906126f1565b868581518110610d5a57610d5a6128df565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc8919061297f565b858581518110610dda57610dda6128df565b602002602001019060ff16908160ff1681525050826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e50919061270a565b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb1919061270a565b60405163fc57d4df60e01b81526001600160a01b038581166004830152919091169063fc57d4df90602401602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d91906126f1565b898581518110610f2f57610f2f6128df565b6020026020010181815250505050508080610f49906129a2565b915050610b1b565b50919395979092949650565b600080846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061270a565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611028919061270a565b60405163fc57d4df60e01b81526001600160a01b03888116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109891906126f1565b60405163fc57d4df60e01b81526001600160a01b038a8116600483015291925060009184169063fc57d4df90602401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110891906126f1565b9050600061111e83670de0b6b3a7640000612755565b8289611132670de0b6b3a76400008b61279e565b61113c9190612755565b6111469190612755565b611150919061278a565b9050600060029054906101000a90046001600160a01b03166001600160a01b031663a385fb966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c991906126f1565b60405163cfcd4c0760e01b8152600481018390526001600160a01b038b169063cfcd4c0790602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123291906126f1565b61123c9190612755565b9a9950505050505050505050565b60008415806112615750670de0b6b3a76400008211155b1561126e5750600061155c565b6000846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d2919061270a565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611338919061270a565b60405163fc57d4df60e01b81526001600160a01b03888116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a891906126f1565b90506000670de0b6b3a76400006113bf878b612755565b6113c9919061278a565b905060006113d7828c612755565b90506000670de0b6b3a76400006113ee8584612755565b6113f8919061278a565b90506000846114078d8661279e565b6114119190612755565b905060008060029054906101000a90046001600160a01b03166001600160a01b031663a385fb966040518163ffffffff1660e01b8152600401602060405180830381865afa158015611467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148b91906126f1565b8b6001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed91906126f1565b6114f79190612755565b90506000670de0b6b3a764000061150e8484612755565b611518919061278a565b9050600061152682866129bd565b90508e61153389836129fc565b61154590670de0b6b3a7640000612a2a565b61154f91906129fc565b9a50505050505050505050505b95945050505050565b6060836001600160401b0381111561157f5761157f6127e8565b6040519080825280602002602001820160405280156115b857816020015b6115a5612110565b81526020019060019003908161159d5790505b50905060005b8481101561163e5761160e8686838181106115db576115db6128df565b90506020020160208101906115f09190612242565b858584818110611602576116026128df565b90506020020135610396565b828281518110611620576116206128df565b60200260200101819052508080611636906129a2565b9150506115be565b50949350505050565b6060806060806060806060806060600060029054906101000a90046001600160a01b03166001600160a01b031663a339d7516040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116d0919081019061282e565b985088516001600160401b038111156116eb576116eb6127e8565b604051908082528060200260200182016040528015611714578160200160208202803683370190505b50975088516001600160401b03811115611730576117306127e8565b604051908082528060200260200182016040528015611759578160200160208202803683370190505b50965088516001600160401b03811115611775576117756127e8565b60405190808252806020026020018201604052801561179e578160200160208202803683370190505b50955088516001600160401b038111156117ba576117ba6127e8565b6040519080825280602002602001820160405280156117ed57816020015b60608152602001906001900390816117d85790505b50945088516001600160401b03811115611809576118096127e8565b60405190808252806020026020018201604052801561183c57816020015b60608152602001906001900390816118275790505b50935088516001600160401b03811115611858576118586127e8565b604051908082528060200260200182016040528015611881578160200160208202803683370190505b50915088516001600160401b0381111561189d5761189d6127e8565b6040519080825280602002602001820160405280156118c6578160200160208202803683370190505b50925088516001600160401b038111156118e2576118e26127e8565b60405190808252806020026020018201604052801561190b578160200160208202803683370190505b50905060005b8951811015611e265760008a828151811061192e5761192e6128df565b60200260200101519050806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a919061270a565b8a83815181106119ac576119ac6128df565b60200260200101906001600160a01b031690816001600160a01b0316815250508982815181106119de576119de6128df565b60200260200101516001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a47919061270a565b60405163fc57d4df60e01b81526001600160a01b038381166004830152919091169063fc57d4df90602401602060405180830381865afa158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab391906126f1565b888381518110611ac557611ac56128df565b602002602001018181525050806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b33919061270a565b898381518110611b4557611b456128df565b60200260200101906001600160a01b031690816001600160a01b0316815250506000898381518110611b7957611b796128df565b60200260200101519050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611be991908101906128f5565b888481518110611bfb57611bfb6128df565b6020026020010181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6c91908101906128f5565b878481518110611c7e57611c7e6128df565b6020026020010181905250806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb919061297f565b868481518110611cfd57611cfd6128df565b602002602001019060ff16908160ff1681525050816001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7391906126f1565b858481518110611d8557611d856128df565b602002602001018181525050816001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df391906126f1565b848481518110611e0557611e056128df565b60200260200101818152505050508080611e1e906129a2565b915050611911565b50909192939495969798565b600054610100900460ff1615808015611e525750600054600160ff909116105b80611e6c5750303b158015611e6c575060005460ff166001145b611e915760405162461bcd60e51b8152600401611e8890612aaf565b60405180910390fd5b6000805460ff191660011790558015611eb4576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611f1d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b60006120628383866001600160a01b031663a833cb7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a91906126f1565b611f94919061273d565b866001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff6919061270a565b876001600160a01b031663a7e269a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612034573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612058919061270a565b6101598988610207565b949350505050565b600054600290610100900460ff1615801561208c575060005460ff8083169116105b6120a85760405162461bcd60e51b8152600401611e8890612aaf565b6000805461010060ff841661ffff19909216821717610100600160b01b03191661ff0019620100006001600160a01b0387160216179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611f14565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461218657600080fd5b50565b6000806040838503121561219c57600080fd5b82356121a781612171565b946020939093013593505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152506101408082015181840152506101608082015181840152505050565b610180810161039082846121b5565b60006020828403121561225457600080fd5b81356108d881612171565b600081518084526020808501945080840160005b838110156122985781516001600160a01b031687529582019590820190600101612273565b509495945050505050565b600081518084526020808501945080840160005b83811015612298578151875295820195908201906001016122b7565b60005b838110156122ee5781810151838201526020016122d6565b838111156122fd576000848401525b50505050565b6000815180845260208085019450848260051b860182860160005b8581101561236057838303895281518051808552612341818887018985016122d3565b99860199601f01601f191693909301850192509084019060010161231e565b5090979650505050505050565b600081518084526020808501945080840160005b8381101561229857815160ff1687529582019590820190600101612381565b60e0815260006123b360e083018a61225f565b82810360208401526123c5818a61225f565b905082810360408401526123d981896122a3565b905082810360608401526123ed8188612303565b905082810360808401526124018187612303565b905082810360a084015261241581866122a3565b905082810360c084015261123c818561236d565b6000806000806080858703121561243f57600080fd5b843561244a81612171565b9350602085013561245a81612171565b93969395505050506040820135916060013590565b600080600080600060a0868803121561248757600080fd5b853594506020860135935060408601356124a081612171565b925060608601356124b081612171565b949793965091946080013592915050565b60008083601f8401126124d357600080fd5b5081356001600160401b038111156124ea57600080fd5b6020830191508360208260051b850101111561250557600080fd5b9250929050565b6000806000806040858703121561252257600080fd5b84356001600160401b038082111561253957600080fd5b612545888389016124c1565b9096509450602087013591508082111561255e57600080fd5b5061256b878288016124c1565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156125ba576125a68385516121b5565b928401926101809290920191600101612593565b50909695505050505050565b60006101208083526125da8184018d61225f565b9050602083820381850152818c518084528284019150828e01935060005b8181101561261d5784516001600160a01b0316835293830193918301916001016125f8565b50508481036040860152612631818d61225f565b925050508281036060840152612647818a6122a3565b9050828103608084015261265b8189612303565b905082810360a084015261266f8188612303565b905082810360c0840152612683818761236d565b905082810360e084015261269781866122a3565b90508281036101008401526126ac81856122a3565b9c9b505050505050505050505050565b6000806000606084860312156126d157600080fd5b83356126dc81612171565b95602085013595506040909401359392505050565b60006020828403121561270357600080fd5b5051919050565b60006020828403121561271c57600080fd5b81516108d881612171565b634e487b7160e01b600052601160045260246000fd5b6000821982111561275057612750612727565b500190565b600081600019048311821515161561276f5761276f612727565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261279957612799612774565b500490565b6000828210156127b0576127b0612727565b500390565b600080604083850312156127c857600080fd5b825180151581146127d857600080fd5b6020939093015192949293505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612826576128266127e8565b604052919050565b6000602080838503121561284157600080fd5b82516001600160401b038082111561285857600080fd5b818501915085601f83011261286c57600080fd5b81518181111561287e5761287e6127e8565b8060051b915061288f8483016127fe565b81815291830184019184810190888411156128a957600080fd5b938501935b838510156128d357845192506128c383612171565b82825293850193908501906128ae565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561290757600080fd5b81516001600160401b038082111561291e57600080fd5b818401915084601f83011261293257600080fd5b815181811115612944576129446127e8565b612957601f8201601f19166020016127fe565b915080825285602082850101111561296e57600080fd5b61163e8160208401602086016122d3565b60006020828403121561299157600080fd5b815160ff811681146108d857600080fd5b60006000198214156129b6576129b6612727565b5060010190565b60008083128015600160ff1b8501841216156129db576129db612727565b6001600160ff1b03840183138116156129f6576129f6612727565b50500390565b600082612a0b57612a0b612774565b600160ff1b821460001984141615612a2557612a25612727565b500590565b60006001600160ff1b0381841382841380821686840486111615612a5057612a50612727565b600160ff1b6000871282811687830589121615612a6f57612a6f612727565b60008712925087820587128484161615612a8b57612a8b612727565b87850587128184161615612aa157612aa1612727565b505050929093029392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "490:8631:154:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638f4b1166116100715780638f4b11661461015e578063c03497c01461017e578063c45a01551461019b578063c4d66de8146101cc578063cc3e7804146101e1578063f7e7d1fd146101f457600080fd5b8063012db95c146100b95780631327d7fb146100df5780631a610317146100ff57806360ff773e146101125780636bbdc780146101385780638de1624d1461014b575b600080fd5b6100cc6100c7366004612189565b610207565b6040519081526020015b60405180910390f35b6100f26100ed366004612189565b610396565b6040516100d69190612233565b6100cc61010d366004612189565b6108ca565b610125610120366004612242565b6108df565b6040516100d697969594939291906123a0565b6100cc610146366004612429565b610f5d565b6100cc61015936600461246f565b61124a565b61017161016c36600461250c565b611565565b6040516100d69190612577565b610186611647565b6040516100d6999897969594939291906125c6565b6000546101b4906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100d6565b6101df6101da366004612242565b611e32565b005b6100cc6101ef3660046126bc565b611f21565b6101df610202366004612242565b61206a565b600080836001600160a01b031663a833cb7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026c91906126f1565b90508015801561027a575082155b15610289576000915050610390565b6000846001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156102c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ed919061270a565b604051633af9e66960e01b81526001600160a01b0387811660048301529190911690633af9e66990602401602060405180830381865afa158015610335573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061035991906126f1565b9050610365848361273d565b61036f858361273d565b61038190670de0b6b3a7640000612755565b61038b919061278a565b925050505b92915050565b61039e612110565b6000836001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103de573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610402919061270a565b90506000846001600160a01b03166316f0115b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610444573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610468919061270a565b9050806001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156104a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104cc919061270a565b60405163fc57d4df60e01b81526001600160a01b038481166004830152919091169063fc57d4df90602401602060405180830381865afa158015610514573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061053891906126f1565b8352604051633af9e66960e01b81526001600160a01b038681166004830152831690633af9e66990602401602060405180830381865afa158015610580573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105a491906126f1565b604084018190528351670de0b6b3a7640000916105c091612755565b6105ca919061278a565b60608401526105d985856108ca565b836101000181815250506000856001600160a01b031663a7e269a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015610623573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610647919061270a565b9050816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610687573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ab919061270a565b60405163fc57d4df60e01b81526001600160a01b038381166004830152919091169063fc57d4df90602401602060405180830381865afa1580156106f3573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061071791906126f1565b60208501526040516305eff7ef60e21b81526001600160a01b0387811660048301528216906317bfdfbc90602401602060405180830381865afa158015610762573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061078691906126f1565b608085018190526020850151670de0b6b3a7640000916107a591612755565b6107af919061278a565b60a0850181905260608501516107c5919061279e565b60e08501526060840151156107ff57606084015160a08501516107f090670de0b6b3a7640000612755565b6107fa919061278a565b610802565b60005b610120850152835160e085015161082190670de0b6b3a7640000612755565b61082b919061278a565b60c085015250604051638e8f294b60e01b81526001600160a01b03838116600483015260009190831690638e8f294b906024016040805180830381865afa15801561087a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089e91906127b5565b61014086018190526101208601519092506108ba91508261279e565b6101608501525091949350505050565b60006108d883836000611f21565b9392505050565b600054604051637a73083360e11b81526001600160a01b038381166004830152606092839283928392839283928392620100009004169063f4e6106690602401600060405180830381865afa15801561093c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610964919081019061282e565b965086516001600160401b0381111561097f5761097f6127e8565b6040519080825280602002602001820160405280156109a8578160200160208202803683370190505b50955086516001600160401b038111156109c4576109c46127e8565b6040519080825280602002602001820160405280156109f757816020015b60608152602001906001900390816109e25790505b50935086516001600160401b03811115610a1357610a136127e8565b604051908082528060200260200182016040528015610a4657816020015b6060815260200190600190039081610a315790505b50925086516001600160401b03811115610a6257610a626127e8565b604051908082528060200260200182016040528015610a8b578160200160208202803683370190505b50915086516001600160401b03811115610aa757610aa76127e8565b604051908082528060200260200182016040528015610ad0578160200160208202803683370190505b50905086516001600160401b03811115610aec57610aec6127e8565b604051908082528060200260200182016040528015610b15578160200160208202803683370190505b50945060005b8751811015610f51576000888281518110610b3857610b386128df565b602002602001015190506000816001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610b82573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba6919061270a565b905080898481518110610bbb57610bbb6128df565b60200260200101906001600160a01b031690816001600160a01b0316815250506000819050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c1e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c4691908101906128f5565b888581518110610c5857610c586128df565b6020026020010181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610ca1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610cc991908101906128f5565b878581518110610cdb57610cdb6128df565b6020026020010181905250826001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d24573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d4891906126f1565b868581518110610d5a57610d5a6128df565b602002602001018181525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc8919061297f565b858581518110610dda57610dda6128df565b602002602001019060ff16908160ff1681525050826001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e2c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e50919061270a565b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610e8d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eb1919061270a565b60405163fc57d4df60e01b81526001600160a01b038581166004830152919091169063fc57d4df90602401602060405180830381865afa158015610ef9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f1d91906126f1565b898581518110610f2f57610f2f6128df565b6020026020010181815250505050508080610f49906129a2565b915050610b1b565b50919395979092949650565b600080846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fc2919061270a565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611004573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611028919061270a565b60405163fc57d4df60e01b81526001600160a01b03888116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015611074573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109891906126f1565b60405163fc57d4df60e01b81526001600160a01b038a8116600483015291925060009184169063fc57d4df90602401602060405180830381865afa1580156110e4573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061110891906126f1565b9050600061111e83670de0b6b3a7640000612755565b8289611132670de0b6b3a76400008b61279e565b61113c9190612755565b6111469190612755565b611150919061278a565b9050600060029054906101000a90046001600160a01b03166001600160a01b031663a385fb966040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c991906126f1565b60405163cfcd4c0760e01b8152600481018390526001600160a01b038b169063cfcd4c0790602401602060405180830381865afa15801561120e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061123291906126f1565b61123c9190612755565b9a9950505050505050505050565b60008415806112615750670de0b6b3a76400008211155b1561126e5750600061155c565b6000846001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d2919061270a565b90506000816001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611314573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611338919061270a565b60405163fc57d4df60e01b81526001600160a01b03888116600483015291925060009183169063fc57d4df90602401602060405180830381865afa158015611384573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113a891906126f1565b90506000670de0b6b3a76400006113bf878b612755565b6113c9919061278a565b905060006113d7828c612755565b90506000670de0b6b3a76400006113ee8584612755565b6113f8919061278a565b90506000846114078d8661279e565b6114119190612755565b905060008060029054906101000a90046001600160a01b03166001600160a01b031663a385fb966040518163ffffffff1660e01b8152600401602060405180830381865afa158015611467573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061148b91906126f1565b8b6001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156114c9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114ed91906126f1565b6114f79190612755565b90506000670de0b6b3a764000061150e8484612755565b611518919061278a565b9050600061152682866129bd565b90508e61153389836129fc565b61154590670de0b6b3a7640000612a2a565b61154f91906129fc565b9a50505050505050505050505b95945050505050565b6060836001600160401b0381111561157f5761157f6127e8565b6040519080825280602002602001820160405280156115b857816020015b6115a5612110565b81526020019060019003908161159d5790505b50905060005b8481101561163e5761160e8686838181106115db576115db6128df565b90506020020160208101906115f09190612242565b858584818110611602576116026128df565b90506020020135610396565b828281518110611620576116206128df565b60200260200101819052508080611636906129a2565b9150506115be565b50949350505050565b6060806060806060806060806060600060029054906101000a90046001600160a01b03166001600160a01b031663a339d7516040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116a8573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116d0919081019061282e565b985088516001600160401b038111156116eb576116eb6127e8565b604051908082528060200260200182016040528015611714578160200160208202803683370190505b50975088516001600160401b03811115611730576117306127e8565b604051908082528060200260200182016040528015611759578160200160208202803683370190505b50965088516001600160401b03811115611775576117756127e8565b60405190808252806020026020018201604052801561179e578160200160208202803683370190505b50955088516001600160401b038111156117ba576117ba6127e8565b6040519080825280602002602001820160405280156117ed57816020015b60608152602001906001900390816117d85790505b50945088516001600160401b03811115611809576118096127e8565b60405190808252806020026020018201604052801561183c57816020015b60608152602001906001900390816118275790505b50935088516001600160401b03811115611858576118586127e8565b604051908082528060200260200182016040528015611881578160200160208202803683370190505b50915088516001600160401b0381111561189d5761189d6127e8565b6040519080825280602002602001820160405280156118c6578160200160208202803683370190505b50925088516001600160401b038111156118e2576118e26127e8565b60405190808252806020026020018201604052801561190b578160200160208202803683370190505b50905060005b8951811015611e265760008a828151811061192e5761192e6128df565b60200260200101519050806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611976573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061199a919061270a565b8a83815181106119ac576119ac6128df565b60200260200101906001600160a01b031690816001600160a01b0316815250508982815181106119de576119de6128df565b60200260200101516001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611a23573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a47919061270a565b60405163fc57d4df60e01b81526001600160a01b038381166004830152919091169063fc57d4df90602401602060405180830381865afa158015611a8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ab391906126f1565b888381518110611ac557611ac56128df565b602002602001018181525050806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b0f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b33919061270a565b898381518110611b4557611b456128df565b60200260200101906001600160a01b031690816001600160a01b0316815250506000898381518110611b7957611b796128df565b60200260200101519050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015611bc1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611be991908101906128f5565b888481518110611bfb57611bfb6128df565b6020026020010181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015611c44573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611c6c91908101906128f5565b878481518110611c7e57611c7e6128df565b6020026020010181905250806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611cc7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ceb919061297f565b868481518110611cfd57611cfd6128df565b602002602001019060ff16908160ff1681525050816001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611d4f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d7391906126f1565b858481518110611d8557611d856128df565b602002602001018181525050816001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015611dcf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611df391906126f1565b848481518110611e0557611e056128df565b60200260200101818152505050508080611e1e906129a2565b915050611911565b50909192939495969798565b600054610100900460ff1615808015611e525750600054600160ff909116105b80611e6c5750303b158015611e6c575060005460ff166001145b611e915760405162461bcd60e51b8152600401611e8890612aaf565b60405180910390fd5b6000805460ff191660011790558015611eb4576000805461ff0019166101001790555b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611f1d576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498906020015b60405180910390a15b5050565b60006120628383866001600160a01b031663a833cb7f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f66573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f8a91906126f1565b611f94919061273d565b866001600160a01b031663a415deda6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611fd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ff6919061270a565b876001600160a01b031663a7e269a66040518163ffffffff1660e01b8152600401602060405180830381865afa158015612034573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612058919061270a565b6101598988610207565b949350505050565b600054600290610100900460ff1615801561208c575060005460ff8083169116105b6120a85760405162461bcd60e51b8152600401611e8890612aaf565b6000805461010060ff841661ffff19909216821717610100600160b01b03191661ff0019620100006001600160a01b0387160216179091556040519081527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001611f14565b6040518061018001604052806000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081525090565b6001600160a01b038116811461218657600080fd5b50565b6000806040838503121561219c57600080fd5b82356121a781612171565b946020939093013593505050565b805182526020810151602083015260408101516040830152606081015160608301526080810151608083015260a081015160a083015260c081015160c083015260e081015160e08301526101008082015181840152506101208082015181840152506101408082015181840152506101608082015181840152505050565b610180810161039082846121b5565b60006020828403121561225457600080fd5b81356108d881612171565b600081518084526020808501945080840160005b838110156122985781516001600160a01b031687529582019590820190600101612273565b509495945050505050565b600081518084526020808501945080840160005b83811015612298578151875295820195908201906001016122b7565b60005b838110156122ee5781810151838201526020016122d6565b838111156122fd576000848401525b50505050565b6000815180845260208085019450848260051b860182860160005b8581101561236057838303895281518051808552612341818887018985016122d3565b99860199601f01601f191693909301850192509084019060010161231e565b5090979650505050505050565b600081518084526020808501945080840160005b8381101561229857815160ff1687529582019590820190600101612381565b60e0815260006123b360e083018a61225f565b82810360208401526123c5818a61225f565b905082810360408401526123d981896122a3565b905082810360608401526123ed8188612303565b905082810360808401526124018187612303565b905082810360a084015261241581866122a3565b905082810360c084015261123c818561236d565b6000806000806080858703121561243f57600080fd5b843561244a81612171565b9350602085013561245a81612171565b93969395505050506040820135916060013590565b600080600080600060a0868803121561248757600080fd5b853594506020860135935060408601356124a081612171565b925060608601356124b081612171565b949793965091946080013592915050565b60008083601f8401126124d357600080fd5b5081356001600160401b038111156124ea57600080fd5b6020830191508360208260051b850101111561250557600080fd5b9250929050565b6000806000806040858703121561252257600080fd5b84356001600160401b038082111561253957600080fd5b612545888389016124c1565b9096509450602087013591508082111561255e57600080fd5b5061256b878288016124c1565b95989497509550505050565b6020808252825182820181905260009190848201906040850190845b818110156125ba576125a68385516121b5565b928401926101809290920191600101612593565b50909695505050505050565b60006101208083526125da8184018d61225f565b9050602083820381850152818c518084528284019150828e01935060005b8181101561261d5784516001600160a01b0316835293830193918301916001016125f8565b50508481036040860152612631818d61225f565b925050508281036060840152612647818a6122a3565b9050828103608084015261265b8189612303565b905082810360a084015261266f8188612303565b905082810360c0840152612683818761236d565b905082810360e084015261269781866122a3565b90508281036101008401526126ac81856122a3565b9c9b505050505050505050505050565b6000806000606084860312156126d157600080fd5b83356126dc81612171565b95602085013595506040909401359392505050565b60006020828403121561270357600080fd5b5051919050565b60006020828403121561271c57600080fd5b81516108d881612171565b634e487b7160e01b600052601160045260246000fd5b6000821982111561275057612750612727565b500190565b600081600019048311821515161561276f5761276f612727565b500290565b634e487b7160e01b600052601260045260246000fd5b60008261279957612799612774565b500490565b6000828210156127b0576127b0612727565b500390565b600080604083850312156127c857600080fd5b825180151581146127d857600080fd5b6020939093015192949293505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715612826576128266127e8565b604052919050565b6000602080838503121561284157600080fd5b82516001600160401b038082111561285857600080fd5b818501915085601f83011261286c57600080fd5b81518181111561287e5761287e6127e8565b8060051b915061288f8483016127fe565b81815291830184019184810190888411156128a957600080fd5b938501935b838510156128d357845192506128c383612171565b82825293850193908501906128ae565b98975050505050505050565b634e487b7160e01b600052603260045260246000fd5b60006020828403121561290757600080fd5b81516001600160401b038082111561291e57600080fd5b818401915084601f83011261293257600080fd5b815181811115612944576129446127e8565b612957601f8201601f19166020016127fe565b915080825285602082850101111561296e57600080fd5b61163e8160208401602086016122d3565b60006020828403121561299157600080fd5b815160ff811681146108d857600080fd5b60006000198214156129b6576129b6612727565b5060010190565b60008083128015600160ff1b8501841216156129db576129db612727565b6001600160ff1b03840183138116156129f6576129f6612727565b50500390565b600082612a0b57612a0b612774565b600160ff1b821460001984141615612a2557612a25612727565b500590565b60006001600160ff1b0381841382841380821686840486111615612a5057612a50612727565b600160ff1b6000871282811687830589121615612a6f57612a6f612727565b60008712925087820587128484161615612a8b57612a8b612727565b87850587128184161615612aa157612aa1612727565b505050929093029392505050565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201526d191e481a5b9a5d1a585b1a5e995960921b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "490:8631:154:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6519:411;;;;;;:::i;:::-;;:::i;:::-;;;675:25:504;;;663:2;648:18;6519:411:154;;;;;;;;7836:1283;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;7304:168::-;;;;;;:::i;:::-;;:::i;3559:1219::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;;;:::i;2678:693::-;;;;;;:::i;:::-;;:::i;4854:1319::-;;;;;;:::i;:::-;;:::i;6177:338::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;1021:1477::-;;;:::i;:::-;;;;;;;;;;;;;;;:::i;541:38::-;;;;;;;;-1:-1:-1;;;;;541:38:154;;;;;;-1:-1:-1;;;;;11890:32:504;;;11872:51;;11860:2;11845:18;541:38:154;11693:236:504;584:104:154;;;;;;:::i;:::-;;:::i;:::-;;6934:366;;;;;;:::i;:::-;;:::i;692:111::-;;;;;;:::i;:::-;;:::i;6519:411::-;6619:7;6634:20;6657:3;-1:-1:-1;;;;;6657:19:154;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6634:44;-1:-1:-1;6688:17:154;;:36;;;;-1:-1:-1;6709:15:154;;6688:36;6684:50;;;6733:1;6726:8;;;;;6684:50;6741:33;6777:3;-1:-1:-1;;;;;6777:20:154;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;-1:-1:-1;;;6777:56:154;;-1:-1:-1;;;;;11890:32:504;;;6777:56:154;;;11872:51:504;6777:42:154;;;;;;;11845:18:504;;6777:56:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6741:92;-1:-1:-1;6899:25:154;6914:10;6899:12;:25;:::i;:::-;6848:38;6876:10;6848:25;:38;:::i;:::-;6847:47;;6890:4;6847:47;:::i;:::-;6846:79;;;;:::i;:::-;6839:86;;;;6519:411;;;;;:::o;7836:1283::-;7922:24;;:::i;:::-;7954;7981:3;-1:-1:-1;;;;;7981:20:154;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7954:49;;8009:21;8033:3;-1:-1:-1;;;;;8033:8:154;;:10;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8009:34;;8077:4;-1:-1:-1;;;;;8077:11:154;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;-1:-1:-1;;;8077:50:154;;-1:-1:-1;;;;;11890:32:504;;;8077:50:154;;;11872:51:504;8077:32:154;;;;;;;11845:18:504;;8077:50:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8049:78;;8169:50;;-1:-1:-1;;;8169:50:154;;-1:-1:-1;;;;;11890:32:504;;;8169:50:154;;;11872:51:504;8169:36:154;;;;;11845:18:504;;8169:50:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8141:25;;;:78;;;8249:25;;8306:4;;8249:53;;;:::i;:::-;8248:62;;;;:::i;:::-;8227:18;;;:83;8336:36;8357:3;8362:9;8336:20;:36::i;:::-;8318:4;:15;;:54;;;;;8393:20;8416:3;-1:-1:-1;;;;;8416:16:154;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8393:41;;8468:4;-1:-1:-1;;;;;8468:11:154;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:46;;-1:-1:-1;;;8468:46:154;;-1:-1:-1;;;;;11890:32:504;;;8468:46:154;;;11872:51:504;8468:32:154;;;;;;;11845:18:504;;8468:46:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8442:23;;;:72;8540:47;;-1:-1:-1;;;8540:47:154;;-1:-1:-1;;;;;11890:32:504;;;8540:47:154;;;11872:51:504;8540:33:154;;;;;11845:18:504;;8540:47:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;8522:15;;;:65;;;8613:23;;;;8658:4;;8613:41;;;:::i;:::-;8612:50;;;;:::i;:::-;8595:14;;;:67;;;8689:18;;;;:35;;8595:67;8689:35;:::i;:::-;8670:16;;;:54;8749:18;;;;:23;:74;;8805:18;;;;8780:14;;;;:21;;8797:4;8780:21;:::i;:::-;8779:44;;;;:::i;:::-;8749:74;;;8775:1;8749:74;8732:14;;;:91;8879:25;;8852:16;;;;:23;;8871:4;8852:23;:::i;:::-;8851:53;;;;:::i;:::-;8831:17;;;:73;-1:-1:-1;8956:39:154;;-1:-1:-1;;;8956:39:154;;-1:-1:-1;;;;;11890:32:504;;;8956:39:154;;;11872:51:504;8928:24:154;;8956:12;;;;;;11845:18:504;;8956:39:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9003:25;;;:44;;;9094:14;;;;8925:70;;-1:-1:-1;9075:33:154;;-1:-1:-1;8925:70:154;9075:33;:::i;:::-;9055:17;;;:53;-1:-1:-1;9055:4:154;;7836:1283;-1:-1:-1;;;;7836:1283:154:o;7304:168::-;7395:6;7416:51;7449:3;7454:9;7465:1;7416:32;:51::i;:::-;7409:58;7304:168;-1:-1:-1;;;7304:168:154:o;3559:1219::-;3914:7;;:59;;-1:-1:-1;;;3914:59:154;;-1:-1:-1;;;;;11890:32:504;;;3914:59:154;;;11872:51:504;3666:24:154;;;;;;;;;;;;;;3914:7;;;;;:40;;11845:18:504;;3914:59:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3914:59:154;;;;;;;;;;;;:::i;:::-;3904:69;;4007:7;:14;-1:-1:-1;;;;;3993:29:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3993:29:154;;3979:43;;4049:7;:14;-1:-1:-1;;;;;4036:28:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4028:36;;4093:7;:14;-1:-1:-1;;;;;4080:28:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4070:38;;4136:7;:14;-1:-1:-1;;;;;4122:29:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4122:29:154;;4114:37;;4180:7;:14;-1:-1:-1;;;;;4168:27:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4168:27:154;;4157:38;;4235:7;:14;-1:-1:-1;;;;;4221:29:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4221:29:154;;4201:49;;4261:9;4256:518;4280:7;:14;4276:1;:18;4256:518;;;4309:14;4334:7;4342:1;4334:10;;;;;;;;:::i;:::-;;;;;;;4309:36;;4353:25;4381:6;-1:-1:-1;;;;;4381:17:154;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4353:47;;4425:17;4408:11;4420:1;4408:14;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;4408:34:154;;;-1:-1:-1;;;;;4408:34:154;;;;;4450:27;4497:17;4450:65;;4534:10;-1:-1:-1;;;;;4534:15:154;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4534:17:154;;;;;;;;;;;;:::i;:::-;4523:5;4529:1;4523:8;;;;;;;;:::i;:::-;;;;;;:28;;;;4572:10;-1:-1:-1;;;;;4572:17:154;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4572:19:154;;;;;;;;;;;;:::i;:::-;4559:7;4567:1;4559:10;;;;;;;;:::i;:::-;;;;;;:32;;;;4610:6;-1:-1:-1;;;;;4610:25:154;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4599:5;4605:1;4599:8;;;;;;;;:::i;:::-;;;;;;:38;;;;;4659:10;-1:-1:-1;;;;;4659:19:154;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4645:8;4654:1;4645:11;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;4711:6;-1:-1:-1;;;;;4711:18:154;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;4711:27:154;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:56;;-1:-1:-1;;;4711:56:154;;-1:-1:-1;;;;;11890:32:504;;;4711:56:154;;;11872:51:504;4711:48:154;;;;;;;11845:18:504;;4711:56:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4688:17;4706:1;4688:20;;;;;;;;:::i;:::-;;;;;;:79;;;;;4301:473;;;4296:3;;;;;:::i;:::-;;;;4256:518;;;;3559:1219;;;;;;;;;:::o;2678:693::-;2854:7;2869:21;2910:13;-1:-1:-1;;;;;2910:25:154;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2869:69;;2944:22;2969:4;-1:-1:-1;;;;;2969:11:154;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3015:40;;-1:-1:-1;;;3015:40:154;;-1:-1:-1;;;;;11890:32:504;;;3015:40:154;;;11872:51:504;2944:38:154;;-1:-1:-1;2988:24:154;;3015:25;;;;;11845:18:504;;3015:40:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3092:44;;-1:-1:-1;;;3092:44:154;;-1:-1:-1;;;;;11890:32:504;;;3092:44:154;;;11872:51:504;2988:67:154;;-1:-1:-1;3061:28:154;;3092:25;;;;;11845:18:504;;3092:44:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3061:75;-1:-1:-1;3143:20:154;3246:23;:16;3265:4;3246:23;:::i;:::-;3215:20;3199:13;3168:27;3191:4;3168:20;:27;:::i;:::-;3167:45;;;;:::i;:::-;:68;;;;:::i;:::-;3166:104;;;;:::i;:::-;3143:127;;3343:7;;;;;;;;;-1:-1:-1;;;;;3343:7:154;-1:-1:-1;;;;;3343:21:154;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3283:57;;-1:-1:-1;;;3283:57:154;;;;;675:25:504;;;-1:-1:-1;;;;;3283:43:154;;;;;648:18:504;;3283:57:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:83;;;;:::i;:::-;3276:90;2678:693;-1:-1:-1;;;;;;;;;;2678:693:154:o;4854:1319::-;5041:13;5066:18;;;:50;;;5112:4;5088:20;:28;;5066:50;5062:64;;;-1:-1:-1;5125:1:154;5118:8;;5062:64;5133:21;5174:17;-1:-1:-1;;;;;5174:29:154;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5133:73;;5212:22;5237:4;-1:-1:-1;;;;;5237:11:154;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5363:44;;-1:-1:-1;;;5363:44:154;;-1:-1:-1;;;;;11890:32:504;;;5363:44:154;;;11872:51:504;5212:38:154;;-1:-1:-1;5332:28:154;;5363:25;;;;;11845:18:504;;5363:44:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5332:75;-1:-1:-1;5477:23:154;5544:4;5504:36;5520:20;5504:13;:36;:::i;:::-;5503:45;;;;:::i;:::-;5477:71;-1:-1:-1;5554:34:154;5591:28;5477:71;5591:10;:28;:::i;:::-;5554:65;-1:-1:-1;5625:23:154;5712:4;5659:49;5688:20;5554:65;5659:49;:::i;:::-;5658:58;;;;:::i;:::-;5625:92;-1:-1:-1;5724:27:154;5790:20;5755:31;5773:13;5755:15;:31;:::i;:::-;5754:56;;;;:::i;:::-;5724:86;;5816:19;5875:7;;;;;;;;;-1:-1:-1;;;;;5875:7:154;-1:-1:-1;;;;;5875:21:154;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5838:13;-1:-1:-1;;;;;5838:32:154;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:60;;;;:::i;:::-;5816:82;-1:-1:-1;5904:32:154;5984:4;5947:33;5961:19;5816:82;5947:33;:::i;:::-;5946:42;;;;:::i;:::-;5904:85;-1:-1:-1;5996:25:154;6024:44;5904:85;6024:16;:44;:::i;:::-;5996:72;-1:-1:-1;6154:13:154;6086:49;6114:20;5996:72;6086:49;:::i;:::-;6085:58;;6139:4;6085:58;:::i;:::-;6084:84;;;;:::i;:::-;6075:93;;5056:1117;;;;;;;;;;4854:1319;;;;;;;;:::o;6177:338::-;6307:27;6371:9;-1:-1:-1;;;;;6352:36:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;6344:44;;6399:9;6394:117;6414:20;;;6394:117;;;6460:44;6476:9;;6486:1;6476:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;6490:10;;6501:1;6490:13;;;;;;;:::i;:::-;;;;;;;6460:15;:44::i;:::-;6449:5;6455:1;6449:8;;;;;;;;:::i;:::-;;;;;;:55;;;;6436:3;;;;;:::i;:::-;;;;6394:117;;;;6177:338;;;;;;:::o;1021:1477::-;1095:24;1127:38;1173:28;1209:33;1250:21;1279:23;1310;1341:40;1389:30;1444:7;;;;;;;;;-1:-1:-1;;;;;1444:7:154;-1:-1:-1;;;;;1444:39:154;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1444:41:154;;;;;;;;;;;;:::i;:::-;1434:51;;1529:7;:14;-1:-1:-1;;;;;1506:38:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1506:38:154;;1491:53;;1578:7;:14;-1:-1:-1;;;;;1564:29:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1564:29:154;;1550:43;;1632:7;:14;-1:-1:-1;;;;;1618:29:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1618:29:154;;1599:48;;1674:7;:14;-1:-1:-1;;;;;1661:28:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1653:36;;1718:7;:14;-1:-1:-1;;;;;1705:28:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1695:38;;1779:7;:14;-1:-1:-1;;;;;1765:29:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1765:29:154;;1739:55;;1823:7;:14;-1:-1:-1;;;;;1811:27:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1811:27:154;;1800:38;;1874:7;:14;-1:-1:-1;;;;;1860:29:154;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;1860:29:154;;1844:45;;1900:9;1895:599;1919:7;:14;1915:1;:18;1895:599;;;1948:14;1973:7;1981:1;1973:10;;;;;;;;:::i;:::-;;;;;;;1948:36;;2010:6;-1:-1:-1;;;;;2010:18:154;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1992:12;2005:1;1992:15;;;;;;;;:::i;:::-;;;;;;:38;-1:-1:-1;;;;;1992:38:154;;;-1:-1:-1;;;;;1992:38:154;;;;;2076:12;2089:1;2076:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;2076:22:154;;:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2060:68;;-1:-1:-1;;;2060:68:154;;-1:-1:-1;;;;;11890:32:504;;;2060:68:154;;;11872:51:504;2060:60:154;;;;;;;11845:18:504;;2060:68:154;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2038:16;2055:1;2038:19;;;;;;;;:::i;:::-;;;;;;:90;;;;;2153:6;-1:-1:-1;;;;;2153:17:154;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2136:11;2148:1;2136:14;;;;;;;;:::i;:::-;;;;;;:36;-1:-1:-1;;;;;2136:36:154;;;-1:-1:-1;;;;;2136:36:154;;;;;2180:27;2227:11;2239:1;2227:14;;;;;;;;:::i;:::-;;;;;;;2180:62;;2261:10;-1:-1:-1;;;;;2261:15:154;;:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2261:17:154;;;;;;;;;;;;:::i;:::-;2250:5;2256:1;2250:8;;;;;;;;:::i;:::-;;;;;;:28;;;;2299:10;-1:-1:-1;;;;;2299:17:154;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2299:19:154;;;;;;;;;;;;:::i;:::-;2286:7;2294:1;2286:10;;;;;;;;:::i;:::-;;;;;;:32;;;;2340:10;-1:-1:-1;;;;;2340:19:154;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2326:8;2335:1;2326:11;;;;;;;;:::i;:::-;;;;;;:35;;;;;;;;;;;2398:6;-1:-1:-1;;;;;2398:33:154;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2369:23;2393:1;2369:26;;;;;;;;:::i;:::-;;;;;;:64;;;;;2460:6;-1:-1:-1;;;;;2460:25:154;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2441:13;2455:1;2441:16;;;;;;;;:::i;:::-;;;;;;:46;;;;;1940:554;;1935:3;;;;;:::i;:::-;;;;1895:599;;;;1021:1477;;;;;;;;;:::o;584:104::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;;;;;;:::i;:::-;;;;;;;;;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;665:7:154::1;:18:::0;;-1:-1:-1;;;;;;665:18:154::1;::::0;-1:-1:-1;;;;;665:18:154;::::1;;;::::0;;3636:99:457;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;20211:36:504;;3710:14:457;;20199:2:504;20184:18;3710:14:457;;;;;;;;3636:99;3258:483;584:104:154;:::o;6934:366::-;7073:6;7100:195;7119:9;7162:10;7138:3;-1:-1:-1;;;;;7138:19:154;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:34;;;;:::i;:::-;7182:3;-1:-1:-1;;;;;7182:20:154;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7214:3;-1:-1:-1;;;;;7214:16:154;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7242:45;7271:3;7276:10;7242:28;:45::i;7100:195::-;7087:208;6934:366;-1:-1:-1;;;;6934:366:154:o;692:111::-;4871:13:457;;771:1:154;;4871:13:457;;;;;4870:14;:40;;;;-1:-1:-1;4888:12:457;;:22;;;;:12;;:22;4870:40;4862:99;;;;-1:-1:-1;;;4862:99:457;;;;;;;:::i;:::-;4971:12;:22;;;;;;-1:-1:-1;;5003:20:457;;;;;;-1:-1:-1;;;;;;5044:21:457;-1:-1:-1;;780:18:154;-1:-1:-1;;;;;780:18:154;::::1;;5044:21:457::0;;;;;5080:20;;20211:36:504;;;5080:20:457;;20199:2:504;20184:18;5080:20:457;20059:194:504;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:148:504:-;-1:-1:-1;;;;;106:31:504;;96:42;;86:70;;152:1;149;142:12;86:70;14:148;:::o;167:357::-;260:6;268;321:2;309:9;300:7;296:23;292:32;289:52;;;337:1;334;327:12;289:52;376:9;363:23;395:48;437:5;395:48;:::i;:::-;462:5;514:2;499:18;;;;486:32;;-1:-1:-1;;;167:357:504:o;711:797::-;795:5;789:12;784:3;777:25;851:4;844:5;840:16;834:23;827:4;822:3;818:14;811:47;907:4;900:5;896:16;890:23;883:4;878:3;874:14;867:47;963:4;956:5;952:16;946:23;939:4;934:3;930:14;923:47;1019:4;1012:5;1008:16;1002:23;995:4;990:3;986:14;979:47;1075:4;1068:5;1064:16;1058:23;1051:4;1046:3;1042:14;1035:47;1131:4;1124:5;1120:16;1114:23;1107:4;1102:3;1098:14;1091:47;1187:4;1180:5;1176:16;1170:23;1163:4;1158:3;1154:14;1147:47;1213:6;1266:2;1259:5;1255:14;1249:21;1244:2;1239:3;1235:12;1228:43;;1290:6;1343:2;1336:5;1332:14;1326:21;1321:2;1316:3;1312:12;1305:43;;1367:6;1420:2;1413:5;1409:14;1403:21;1398:2;1393:3;1389:12;1382:43;;1444:6;1497:2;1490:5;1486:14;1480:21;1475:2;1470:3;1466:12;1459:43;;711:797;;:::o;1513:264::-;1709:3;1694:19;;1722:49;1698:9;1753:6;1722:49;:::i;1962:281::-;2038:6;2091:2;2079:9;2070:7;2066:23;2062:32;2059:52;;;2107:1;2104;2097:12;2059:52;2146:9;2133:23;2165:48;2207:5;2165:48;:::i;2248:461::-;2301:3;2339:5;2333:12;2366:6;2361:3;2354:19;2392:4;2421:2;2416:3;2412:12;2405:19;;2458:2;2451:5;2447:14;2479:1;2489:195;2503:6;2500:1;2497:13;2489:195;;;2568:13;;-1:-1:-1;;;;;2564:39:504;2552:52;;2624:12;;;;2659:15;;;;2600:1;2518:9;2489:195;;;-1:-1:-1;2700:3:504;;2248:461;-1:-1:-1;;;;;2248:461:504:o;2714:435::-;2767:3;2805:5;2799:12;2832:6;2827:3;2820:19;2858:4;2887:2;2882:3;2878:12;2871:19;;2924:2;2917:5;2913:14;2945:1;2955:169;2969:6;2966:1;2963:13;2955:169;;;3030:13;;3018:26;;3064:12;;;;3099:15;;;;2991:1;2984:9;2955:169;;3154:258;3226:1;3236:113;3250:6;3247:1;3244:13;3236:113;;;3326:11;;;3320:18;3307:11;;;3300:39;3272:2;3265:10;3236:113;;;3367:6;3364:1;3361:13;3358:48;;;3402:1;3393:6;3388:3;3384:16;3377:27;3358:48;;3154:258;;;:::o;3417:761::-;3469:3;3507:5;3501:12;3534:6;3529:3;3522:19;3560:4;3589:2;3584:3;3580:12;3573:19;;3614:3;3654:6;3651:1;3647:14;3642:3;3638:24;3696:2;3689:5;3685:14;3717:1;3727:425;3741:6;3738:1;3735:13;3727:425;;;3812:5;3806:4;3802:16;3797:3;3790:29;3848:6;3842:13;3890:2;3884:9;3919:8;3913:4;3906:22;3941:59;3991:8;3986:2;3980:4;3976:13;3971:2;3967;3963:11;3941:59;:::i;:::-;4130:12;;;;4062:2;4039:17;-1:-1:-1;;4035:31:504;4025:42;;;;4021:51;;;-1:-1:-1;4095:15:504;;;;3763:1;3756:9;3727:425;;;-1:-1:-1;4168:4:504;;3417:761;-1:-1:-1;;;;;;;3417:761:504:o;4183:444::-;4234:3;4272:5;4266:12;4299:6;4294:3;4287:19;4325:4;4354:2;4349:3;4345:12;4338:19;;4391:2;4384:5;4380:14;4412:1;4422:180;4436:6;4433:1;4430:13;4422:180;;;4501:13;;4516:4;4497:24;4485:37;;4542:12;;;;4577:15;;;;4458:1;4451:9;4422:180;;4632:1522;5315:3;5304:9;5297:22;5278:4;5342:57;5394:3;5383:9;5379:19;5371:6;5342:57;:::i;:::-;5447:9;5439:6;5435:22;5430:2;5419:9;5415:18;5408:50;5481:44;5518:6;5510;5481:44;:::i;:::-;5467:58;;5573:9;5565:6;5561:22;5556:2;5545:9;5541:18;5534:50;5607:44;5644:6;5636;5607:44;:::i;:::-;5593:58;;5699:9;5691:6;5687:22;5682:2;5671:9;5667:18;5660:50;5733:43;5769:6;5761;5733:43;:::i;:::-;5719:57;;5825:9;5817:6;5813:22;5807:3;5796:9;5792:19;5785:51;5859:43;5895:6;5887;5859:43;:::i;:::-;5845:57;;5951:9;5943:6;5939:22;5933:3;5922:9;5918:19;5911:51;5985:44;6022:6;6014;5985:44;:::i;:::-;5971:58;;6078:9;6070:6;6066:22;6060:3;6049:9;6045:19;6038:51;6106:42;6141:6;6133;6106:42;:::i;6159:593::-;6279:6;6287;6295;6303;6356:3;6344:9;6335:7;6331:23;6327:33;6324:53;;;6373:1;6370;6363:12;6324:53;6412:9;6399:23;6431:48;6473:5;6431:48;:::i;:::-;6498:5;-1:-1:-1;6555:2:504;6540:18;;6527:32;6568:50;6527:32;6568:50;:::i;:::-;6159:593;;6637:7;;-1:-1:-1;;;;6691:2:504;6676:18;;6663:32;;6742:2;6727:18;6714:32;;6159:593::o;6757:662::-;6886:6;6894;6902;6910;6918;6971:3;6959:9;6950:7;6946:23;6942:33;6939:53;;;6988:1;6985;6978:12;6939:53;7024:9;7011:23;7001:33;;7081:2;7070:9;7066:18;7053:32;7043:42;;7135:2;7124:9;7120:18;7107:32;7148:48;7190:5;7148:48;:::i;:::-;7215:5;-1:-1:-1;7272:2:504;7257:18;;7244:32;7285:50;7244:32;7285:50;:::i;:::-;6757:662;;;;-1:-1:-1;6757:662:504;;7408:3;7393:19;7380:33;;6757:662;-1:-1:-1;;6757:662:504:o;7424:384::-;7504:8;7514:6;7568:3;7561:4;7553:6;7549:17;7545:27;7535:55;;7586:1;7583;7576:12;7535:55;-1:-1:-1;7609:20:504;;-1:-1:-1;;;;;7641:30:504;;7638:50;;;7684:1;7681;7674:12;7638:50;7721:4;7713:6;7709:17;7697:29;;7781:3;7774:4;7764:6;7761:1;7757:14;7749:6;7745:27;7741:38;7738:47;7735:67;;;7798:1;7795;7788:12;7735:67;7424:384;;;;;:::o;7813:832::-;7960:6;7968;7976;7984;8037:2;8025:9;8016:7;8012:23;8008:32;8005:52;;;8053:1;8050;8043:12;8005:52;8093:9;8080:23;-1:-1:-1;;;;;8163:2:504;8155:6;8152:14;8149:34;;;8179:1;8176;8169:12;8149:34;8218:87;8297:7;8288:6;8277:9;8273:22;8218:87;:::i;:::-;8324:8;;-1:-1:-1;8192:113:504;-1:-1:-1;8412:2:504;8397:18;;8384:32;;-1:-1:-1;8428:16:504;;;8425:36;;;8457:1;8454;8447:12;8425:36;;8496:89;8577:7;8566:8;8555:9;8551:24;8496:89;:::i;:::-;7813:832;;;;-1:-1:-1;8604:8:504;-1:-1:-1;;;;7813:832:504:o;8650:722::-;8883:2;8935:21;;;9005:13;;8908:18;;;9027:22;;;8854:4;;8883:2;9106:15;;;;9080:2;9065:18;;;8854:4;9149:197;9163:6;9160:1;9157:13;9149:197;;;9212:50;9258:3;9249:6;9243:13;9212:50;:::i;:::-;9321:15;;;;9291:6;9282:16;;;;;9185:1;9178:9;9149:197;;;-1:-1:-1;9363:3:504;;8650:722;-1:-1:-1;;;;;;8650:722:504:o;9377:2311::-;10205:4;10234:3;10264:2;10253:9;10246:21;10290:56;10342:2;10331:9;10327:18;10319:6;10290:56;:::i;:::-;10276:70;;10365:2;10415:9;10407:6;10403:22;10398:2;10387:9;10383:18;10376:50;10446:6;10481;10475:13;10512:6;10504;10497:22;10547:2;10539:6;10535:15;10528:22;;10585:2;10577:6;10573:15;10559:29;;10606:1;10616:195;10630:6;10627:1;10624:13;10616:195;;;10695:13;;-1:-1:-1;;;;;10691:39:504;10679:52;;10786:15;;;;10751:12;;;;10727:1;10645:9;10616:195;;;10620:3;;10856:9;10851:3;10847:19;10842:2;10831:9;10827:18;10820:47;10890:41;10927:3;10919:6;10890:41;:::i;:::-;10876:55;;;;10979:9;10971:6;10967:22;10962:2;10951:9;10947:18;10940:50;11013:44;11050:6;11042;11013:44;:::i;:::-;10999:58;;11106:9;11098:6;11094:22;11088:3;11077:9;11073:19;11066:51;11140:43;11176:6;11168;11140:43;:::i;:::-;11126:57;;11232:9;11224:6;11220:22;11214:3;11203:9;11199:19;11192:51;11266:43;11302:6;11294;11266:43;:::i;:::-;11252:57;;11358:9;11350:6;11346:22;11340:3;11329:9;11325:19;11318:51;11392:42;11427:6;11419;11392:42;:::i;:::-;11378:56;;11483:9;11475:6;11471:22;11465:3;11454:9;11450:19;11443:51;11517:44;11554:6;11546;11517:44;:::i;:::-;11503:58;;11610:9;11602:6;11598:22;11592:3;11581:9;11577:19;11570:51;11638:44;11675:6;11667;11638:44;:::i;:::-;11630:52;9377:2311;-1:-1:-1;;;;;;;;;;;;9377:2311:504:o;12236:425::-;12338:6;12346;12354;12407:2;12395:9;12386:7;12382:23;12378:32;12375:52;;;12423:1;12420;12413:12;12375:52;12462:9;12449:23;12481:48;12523:5;12481:48;:::i;:::-;12548:5;12600:2;12585:18;;12572:32;;-1:-1:-1;12651:2:504;12636:18;;;12623:32;;12236:425;-1:-1:-1;;;12236:425:504:o;12666:184::-;12736:6;12789:2;12777:9;12768:7;12764:23;12760:32;12757:52;;;12805:1;12802;12795:12;12757:52;-1:-1:-1;12828:16:504;;12666:184;-1:-1:-1;12666:184:504:o;12855:285::-;12942:6;12995:2;12983:9;12974:7;12970:23;12966:32;12963:52;;;13011:1;13008;13001:12;12963:52;13043:9;13037:16;13062:48;13104:5;13062:48;:::i;13353:127::-;13414:10;13409:3;13405:20;13402:1;13395:31;13445:4;13442:1;13435:15;13469:4;13466:1;13459:15;13485:128;13525:3;13556:1;13552:6;13549:1;13546:13;13543:39;;;13562:18;;:::i;:::-;-1:-1:-1;13598:9:504;;13485:128::o;13618:168::-;13658:7;13724:1;13720;13716:6;13712:14;13709:1;13706:21;13701:1;13694:9;13687:17;13683:45;13680:71;;;13731:18;;:::i;:::-;-1:-1:-1;13771:9:504;;13618:168::o;13791:127::-;13852:10;13847:3;13843:20;13840:1;13833:31;13883:4;13880:1;13873:15;13907:4;13904:1;13897:15;13923:120;13963:1;13989;13979:35;;13994:18;;:::i;:::-;-1:-1:-1;14028:9:504;;13923:120::o;14870:125::-;14910:4;14938:1;14935;14932:8;14929:34;;;14943:18;;:::i;:::-;-1:-1:-1;14980:9:504;;14870:125::o;15000:338::-;15076:6;15084;15137:2;15125:9;15116:7;15112:23;15108:32;15105:52;;;15153:1;15150;15143:12;15105:52;15185:9;15179:16;15238:5;15231:13;15224:21;15217:5;15214:32;15204:60;;15260:1;15257;15250:12;15204:60;15328:2;15313:18;;;;15307:25;15283:5;;15307:25;;-1:-1:-1;;;15000:338:504:o;15343:127::-;15404:10;15399:3;15395:20;15392:1;15385:31;15435:4;15432:1;15425:15;15459:4;15456:1;15449:15;15475:275;15546:2;15540:9;15611:2;15592:13;;-1:-1:-1;;15588:27:504;15576:40;;-1:-1:-1;;;;;15631:34:504;;15667:22;;;15628:62;15625:88;;;15693:18;;:::i;:::-;15729:2;15722:22;15475:275;;-1:-1:-1;15475:275:504:o;15755:1028::-;15850:6;15881:2;15924;15912:9;15903:7;15899:23;15895:32;15892:52;;;15940:1;15937;15930:12;15892:52;15973:9;15967:16;-1:-1:-1;;;;;16043:2:504;16035:6;16032:14;16029:34;;;16059:1;16056;16049:12;16029:34;16097:6;16086:9;16082:22;16072:32;;16142:7;16135:4;16131:2;16127:13;16123:27;16113:55;;16164:1;16161;16154:12;16113:55;16193:2;16187:9;16215:2;16211;16208:10;16205:36;;;16221:18;;:::i;:::-;16267:2;16264:1;16260:10;16250:20;;16290:28;16314:2;16310;16306:11;16290:28;:::i;:::-;16352:15;;;16422:11;;;16418:20;;;16383:12;;;;16450:19;;;16447:39;;;16482:1;16479;16472:12;16447:39;16506:11;;;;16526:227;16542:6;16537:3;16534:15;16526:227;;;16615:3;16609:10;16596:23;;16632:48;16674:5;16632:48;:::i;:::-;16693:18;;;16559:12;;;;16731;;;;16526:227;;;16772:5;15755:1028;-1:-1:-1;;;;;;;;15755:1028:504:o;16788:127::-;16849:10;16844:3;16840:20;16837:1;16830:31;16880:4;16877:1;16870:15;16904:4;16901:1;16894:15;17193:706;17273:6;17326:2;17314:9;17305:7;17301:23;17297:32;17294:52;;;17342:1;17339;17332:12;17294:52;17375:9;17369:16;-1:-1:-1;;;;;17445:2:504;17437:6;17434:14;17431:34;;;17461:1;17458;17451:12;17431:34;17499:6;17488:9;17484:22;17474:32;;17544:7;17537:4;17533:2;17529:13;17525:27;17515:55;;17566:1;17563;17556:12;17515:55;17595:2;17589:9;17617:2;17613;17610:10;17607:36;;;17623:18;;:::i;:::-;17665:53;17708:2;17689:13;;-1:-1:-1;;17685:27:504;17714:2;17681:36;17665:53;:::i;:::-;17652:66;;17741:2;17734:5;17727:17;17781:7;17776:2;17771;17767;17763:11;17759:20;17756:33;17753:53;;;17802:1;17799;17792:12;17753:53;17815:54;17866:2;17861;17854:5;17850:14;17845:2;17841;17837:11;17815:54;:::i;17904:273::-;17972:6;18025:2;18013:9;18004:7;18000:23;17996:32;17993:52;;;18041:1;18038;18031:12;17993:52;18073:9;18067:16;18123:4;18116:5;18112:16;18105:5;18102:27;18092:55;;18143:1;18140;18133:12;18182:135;18221:3;-1:-1:-1;;18242:17:504;;18239:43;;;18262:18;;:::i;:::-;-1:-1:-1;18309:1:504;18298:13;;18182:135::o;18322:267::-;18361:4;18390:9;;;18415:10;;-1:-1:-1;;;18434:19:504;;18427:27;;18411:44;18408:70;;;18458:18;;:::i;:::-;-1:-1:-1;;;;;18505:27:504;;18498:35;;18490:44;;18487:70;;;18537:18;;:::i;:::-;-1:-1:-1;;18574:9:504;;18322:267::o;18594:193::-;18633:1;18659;18649:35;;18664:18;;:::i;:::-;-1:-1:-1;;;18700:18:504;;-1:-1:-1;;18720:13:504;;18696:38;18693:64;;;18737:18;;:::i;:::-;-1:-1:-1;18771:10:504;;18594:193::o;18792:553::-;18831:7;-1:-1:-1;;;;;18901:9:504;;;18929;;;18954:11;;;18973:10;;;18967:17;;18950:35;18947:61;;;18988:18;;:::i;:::-;-1:-1:-1;;;19064:1:504;19057:9;;19082:11;;;19102;;;19095:19;;19078:37;19075:63;;;19118:18;;:::i;:::-;19164:1;19161;19157:9;19147:19;;19211:1;19207:2;19202:11;19199:1;19195:19;19190:2;19186;19182:11;19178:37;19175:63;;;19218:18;;:::i;:::-;19283:1;19279:2;19274:11;19271:1;19267:19;19262:2;19258;19254:11;19250:37;19247:63;;;19290:18;;:::i;:::-;-1:-1:-1;;;19330:9:504;;;;;18792:553;-1:-1:-1;;;18792:553:504:o;19644:410::-;19846:2;19828:21;;;19885:2;19865:18;;;19858:30;19924:34;19919:2;19904:18;;19897:62;-1:-1:-1;;;19990:2:504;19975:18;;19968:44;20044:3;20029:19;;19644:410::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "factory()": "c45a0155", + "getBorrowRateAtRatio(address,address,uint256,uint256)": "6bbdc780", + "getBorrowableMarketsAndRates(address)": "60ff773e", + "getCollateralMarkets()": "c03497c0", + "getLeverageRatioAfterFunding(address,uint256)": "012db95c", + "getNetAPY(uint256,uint256,address,address,uint256)": "8de1624d", + "getNetApyForPosition(address,uint256)": "1a610317", + "getNetApyForPositionAfterFunding(address,uint256,uint256)": "cc3e7804", + "getPositionInfo(address,uint256)": "1327d7fb", + "getPositionsInfo(address[],uint256[])": "8f4b1166", + "initialize(address)": "c4d66de8", + "reinitialize(address)": "f7e7d1fd" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LeveredPositionsLens_Proxy.json b/packages/sdk/deployments/bob/LeveredPositionsLens_Proxy.json new file mode 100644 index 000000000..11833c9ec --- /dev/null +++ b/packages/sdk/deployments/bob/LeveredPositionsLens_Proxy.json @@ -0,0 +1,247 @@ +{ + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "transactionIndex": 1, + "gasUsed": "746921", + "logsBloom": "0x00000000000000000000000000000000400000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000800000000100000000000000000000000000000000000000000000000000000000000080020000000000800000000000400000000000000000000400008000001000000000000000000000000000000020000000000000000000040000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x58294990ae1f35958cdd317a43871d788362b9ca6607454e111e8d940e6e273d", + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3778034, + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000b6c55df813c38635665151ee504837e1316f3654" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x58294990ae1f35958cdd317a43871d788362b9ca6607454e111e8d940e6e273d" + }, + { + "transactionIndex": 1, + "blockNumber": 3778034, + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 1, + "blockHash": "0x58294990ae1f35958cdd317a43871d788362b9ca6607454e111e8d940e6e273d" + }, + { + "transactionIndex": 1, + "blockNumber": 3778034, + "transactionHash": "0x29f2752838eefe5f9a917c55af621e95cf447f73679bc5bf67f01909362c79fe", + "address": "0x948BB10123B349F0c9f358Fe36735C260DF0B4cC", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 2, + "blockHash": "0x58294990ae1f35958cdd317a43871d788362b9ca6607454e111e8d940e6e273d" + } + ], + "blockNumber": 3778034, + "cumulativeGasUsed": "790760", + "status": 1, + "byzantium": true + }, + "args": [ + "0xb6c55DF813C38635665151eE504837E1316f3654", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xc4d66de80000000000000000000000001dd45c9fb4c8ccb678781982774f006f24b8eac1" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LiquidatorsRegistry.json b/packages/sdk/deployments/bob/LiquidatorsRegistry.json new file mode 100644 index 000000000..f80f23cf3 --- /dev/null +++ b/packages/sdk/deployments/bob/LiquidatorsRegistry.json @@ -0,0 +1,1172 @@ +{ + "address": "0xeC7D0330E86485474C13A2152Fa867ddd41Bb12B", + "abi": [ + { + "type": "constructor", + "inputs": [ + { + "name": "_ap", + "type": "address", + "internalType": "contract AddressesProvider" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "fallback", + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_listExtensions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_registerExtension", + "inputs": [ + { + "name": "extensionToAdd", + "type": "address", + "internalType": "contract DiamondExtension" + }, + { + "name": "extensionToReplace", + "type": "address", + "internalType": "contract DiamondExtension" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "ap", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract AddressesProvider" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "asExtension", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract LiquidatorsRegistryExtension" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "customUniV3Router", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultOutputToken", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redemptionStrategiesByName", + "inputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IRedemptionStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redemptionStrategiesByTokens", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IRedemptionStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "uniswapV3Fees", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "uint24", + "internalType": "uint24" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "FunctionAlreadyAdded", + "inputs": [ + { + "name": "_functionSelector", + "type": "bytes4", + "internalType": "bytes4" + }, + { + "name": "_currentImpl", + "type": "address", + "internalType": "address" + } + ] + }, + { + "type": "error", + "name": "FunctionNotFound", + "inputs": [ + { + "name": "_functionSelector", + "type": "bytes4", + "internalType": "bytes4" + } + ] + } + ], + "transactionHash": "0x05ee5b5ee391f56db7ee546036c8721983f052bad56797d5d2965658f5342d30", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xeC7D0330E86485474C13A2152Fa867ddd41Bb12B", + "transactionIndex": 2, + "gasUsed": "983770", + "logsBloom": "0x00001000000000000000000000000000000000000000000000800000000200000010000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000000800000000000000000000000000000008400000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7e36984a203f75cc4907547bb6410bd56351427ec2b18002986e68b6ec0a4b2c", + "transactionHash": "0x05ee5b5ee391f56db7ee546036c8721983f052bad56797d5d2965658f5342d30", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 3777942, + "transactionHash": "0x05ee5b5ee391f56db7ee546036c8721983f052bad56797d5d2965658f5342d30", + "address": "0xeC7D0330E86485474C13A2152Fa867ddd41Bb12B", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 7, + "blockHash": "0x7e36984a203f75cc4907547bb6410bd56351427ec2b18002986e68b6ec0a4b2c" + } + ], + "blockNumber": 3777942, + "cumulativeGasUsed": "1159687", + "status": 1, + "byzantium": true + }, + "args": [ + "0xa6BA5F1164dc66F9C5bDCE33A6d2fC70bE8Da108" + ], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract AddressesProvider", + "name": "_ap", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + }, + { + "internalType": "address", + "name": "_currentImpl", + "type": "address" + } + ], + "type": "error", + "name": "FunctionAlreadyAdded" + }, + { + "inputs": [ + { + "internalType": "bytes4", + "name": "_functionSelector", + "type": "bytes4" + } + ], + "type": "error", + "name": "FunctionNotFound" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "_listExtensions", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract DiamondExtension", + "name": "extensionToAdd", + "type": "address" + }, + { + "internalType": "contract DiamondExtension", + "name": "extensionToReplace", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_registerExtension" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "asExtension", + "outputs": [ + { + "internalType": "contract LiquidatorsRegistryExtension", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_registerExtension(address,address)": { + "details": "register a logic extension", + "params": { + "extensionToAdd": "the extension whose functions are to be added", + "extensionToReplace": "the extension whose functions are to be removed/replaced" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/liquidators/registry/LiquidatorsRegistry.sol": "LiquidatorsRegistry" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/bomb/IXBomb.sol": { + "keccak256": "0x7bab8191e350a68203996c0d99a5c075307ad421c98142072f9b5312534bff9b", + "urls": [ + "bzz-raw://70ada9803810fff6a8d907a50da72dc95eb75267060b5a71c899cd244d970638", + "dweb:/ipfs/QmcMaYsCbFhoKJLGza4F9hy86cvEhjq492Y65pVzZB8jUj" + ], + "license": null + }, + "contracts/external/curve/ICurvePool.sol": { + "keccak256": "0x41770e1ed75224a030ca961ee216ecfae2d16968234f7fab4b7427aa575b9acc", + "urls": [ + "bzz-raw://238efef35bb6b8d38b6fd6cb0985d936daf20bdac4ec9ab041fc2c5939635fcc", + "dweb:/ipfs/QmRhzTppsXSYGc36rMPT31eVVehkfpECbdBoKq2Xvq1ofi" + ], + "license": "UNLICENSED" + }, + "contracts/external/curve/ICurveV2Pool.sol": { + "keccak256": "0x8450c23787d2b4823367dbff5580f2e55a36ad7fd57a4561d3361612f37a1d98", + "urls": [ + "bzz-raw://5d06b0a68ee8b32c86077bf4cb1944dc6b1d841df030199223c2434456d7fe78", + "dweb:/ipfs/QmZRKiwjT2QsXM9w5qLEY92sWMFF7HNP9LXCFAYqtzyvxS" + ], + "license": "UNLICENSED" + }, + "contracts/external/saddle/ISwap.sol": { + "keccak256": "0x18a574d7aff6a6ebd2c086820f98c476b3a4324fe5f735732e71c7d306bf9f70", + "urls": [ + "bzz-raw://fda761e2e52dac4d8d9a403d84abff870918e47b2d744f20802c60e086ccc42b", + "dweb:/ipfs/QmeMbmEXfeej6XRunwdadqJC4ESSFjgxcLRdh8H9ZN2jQU" + ], + "license": "MIT" + }, + "contracts/external/solidly/IPair.sol": { + "keccak256": "0xd13d4e85d4d16d46d2df3f1a8f5f1bcc6762f9d8ae0aa807847ea644ce0d0f72", + "urls": [ + "bzz-raw://e3d9cafc90f8849b3051628a3d6f74c688854889805bf1fa119e578875c48fb3", + "dweb:/ipfs/QmWRurHXNAVpCcWJqZkx9tN5qgfDaqGEPqQGLmTzXmJApT" + ], + "license": "MIT" + }, + "contracts/external/solidly/IRouter.sol": { + "keccak256": "0x1b0243564ad8f92731f75038da17d97be2c2d8bebd5c6fa3a565d5d367909260", + "urls": [ + "bzz-raw://a47f4e14934e1452b5370e4267e43b4e6f98fd7a0d78bb79df04bf3ecd5d1204", + "dweb:/ipfs/QmWPVmf51r3ZjNGphbz2ws6qJNkXubZVXG2ybqtfkyf4b4" + ], + "license": null + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AddressesProvider.sol": { + "keccak256": "0xf48e9e8b2150408c1c6b68dd957226c342ba47396da792fdaa0922f539a7e163", + "urls": [ + "bzz-raw://43c0a6c40861da4c19b67da9faee7df21572020e2d863611080a9181acc3ba3a", + "dweb:/ipfs/QmQpPDVAYTba8R9N1fGggzkG7JhUFVbAhxdfNw9xofVi4m" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/XBombLiquidatorFunder.sol": { + "keccak256": "0x5d7004618ff58b831b7cdab4c1bb5d1997c94e9255915e4bbc58d11e257f2934", + "urls": [ + "bzz-raw://4414cbcb281990689913d23d01e09ff3b0f8b320d831e149be0796cee76b2d20", + "dweb:/ipfs/QmSYguBZYx3XkEBCXiiZ1QASpH598jVYoF6P5GcHMdDDBz" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/LiquidatorsRegistry.sol": { + "keccak256": "0x64c7d8af207804ab1a36867c88c3a5298ea69ce28ccba1dc6b92b254dd29bfe7", + "urls": [ + "bzz-raw://ddfb3a9c23ec000aa65429ec6ddee4b9df5772d92794c6e9a8b14baffe73a254", + "dweb:/ipfs/QmZJ5Eaby1eQ3YeUDVDWzuYPz38t8WDMizfFdDbWpK16Cp" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/registry/LiquidatorsRegistryExtension.sol": { + "keccak256": "0xaffd0b4d09ed8a10b1253a75b4fab56c7f7ea991aac58d81716e7c02c834cad3", + "urls": [ + "bzz-raw://2504e052df3d5229783c03ad5e4e53cdb048015d5fa0422deda8da5fe9b56757", + "dweb:/ipfs/QmZHUMtgwebw2xhXEFDzNK9B7qSFNCd4SQ29KWUVS5LVaa" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/registry/LiquidatorsRegistryStorage.sol": { + "keccak256": "0x95840e79c504ab6ee1d0cf9ff5fcec2424a64dc6ed57f0bf4831f65c89fc9109", + "urls": [ + "bzz-raw://29825087d3eeaca7516168043f1b046b280816195ed31f13cbdb7444ecb3b012", + "dweb:/ipfs/QmVa9kZx9gRvvUr8RbLRZKWseEMntoQ2CZmQ3TraSF9pa1" + ], + "license": "GPL-3.0" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x8748b7e74b8f789617f0b387cd2e2259a0fa3639d54234d7e6c99cb3eae6fc9a", + "urls": [ + "bzz-raw://a4e46033c3a440f48bfe45adb3b06db2b5870e3179f5170cd708c3030d240f39", + "dweb:/ipfs/QmPQZwCprBqi8BASL8nJpP63BpFGUS48ioyhS29GSAWp2r" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/CurveLpTokenPriceOracleNoRegistry.sol": { + "keccak256": "0x49016dd76e69d5c874f0888e743560fe0a6e71eac40ba0e009d2bd31e4255baa", + "urls": [ + "bzz-raw://ae88e6c1e7ec2bd8615d2277c4f9ad5a036d28631be8abe8bf7e450b678a37c2", + "dweb:/ipfs/QmRPBcV1koBcUqBJRP7wCgC6iVZyu8sS7ahqYj547mEpy2" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/CurveV2LpTokenPriceOracleNoRegistry.sol": { + "keccak256": "0x70596141564721af07d04f869b602d8f3a96282009e64002dbd0f2bb73609e87", + "urls": [ + "bzz-raw://1b6dac6960db01feac138ac194355a6c030dc1ef5dba8cd3ff0b8efa14f6e6e3", + "dweb:/ipfs/QmddVZpSKHL5StzrE1RQ1YDQzK7bNAQNGEGmvxu3RnuXcH" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/SaddleLpPriceOracle.sol": { + "keccak256": "0x074f866fc724084ddf4ccf41f0f2f02abc98aa3453251fd898208adf108dd5ed", + "urls": [ + "bzz-raw://b867f7e510ee9edfa756b373f12a9479b988b648891e0929a5cc8f220b507406", + "dweb:/ipfs/QmbnvVtbAQ6CFoY7n4eQRhMFYzkARGaZDme46LBuq74WeV" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506040516110f53803806110f583398101604081905261002f916100d4565b6100383361005d565b600280546001600160a01b0319166001600160a01b0392909216919091179055610104565b600180546001600160a01b031916905561008181610084602090811b61048f17901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6000602082840312156100e657600080fd5b81516001600160a01b03811681146100fd57600080fd5b9392505050565b610fe2806101136000396000f3fe608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638db87c271161008c578063dc54bc8111610066578063dc54bc81146102b1578063dee7fe48146102b7578063e30c3978146102eb578063f2fde38b146102fc576100ea565b80638db87c2714610220578063a700f9e414610249578063c8ff6fee1461027d576100ea565b8063715018a6116100c8578063715018a6146101ea57806379ba5097146101f457806389cd9855146101fc5780638da5cb5b1461020f576100ea565b8063398cd955146101615780633c4f743c146101aa5780636333d001146101d5575b60006101016000356001600160e01b03191661030f565b90506001600160a01b03811661013d57604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e80801561015c573d6000f35b3d6000fd5b61019161016f366004610ca3565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b6002546101bd906001600160a01b031681565b6040516001600160a01b0390911681526020016101a1565b6101dd61032f565b6040516101a19190610cdc565b6101f261033e565b005b6101f261038e565b6101f261020a366004610ca3565b610408565b6000546001600160a01b03166101bd565b6101bd61022e366004610d29565b6007602052600090815260409020546001600160a01b031681565b6101bd610257366004610ca3565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6101bd61028b366004610ca3565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b306101bd565b6101bd6102c5366004610d94565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6001546001600160a01b03166101bd565b6101f261030a366004610d29565b61041e565b600061032982600080516020610fb68339815191526104df565b92915050565b6060610339610585565b905090565b6103466105f7565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f77656400006044820152606401610134565b60015433906001600160a01b031681146103fc5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610134565b61040581610653565b50565b6104106105f7565b61041a828261066c565b5050565b6104266105f7565b600180546001600160a01b0383166001600160a01b031990911681179091556104576000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8054600090815b8181101561057a57846001600160e01b03191684600001828154811061050e5761050e610e29565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156105685783600001818154811061054957610549610e29565b6000918252602090912001546001600160a01b03169250610329915050565b8061057281610e55565b9150506104e6565b506000949350505050565b6060600080516020610fb68339815191526001018054806020026020016040519081016040528092919081815260200182805480156105ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105cf575b5050505050905090565b6000546001600160a01b031633146106515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610134565b565b600180546001600160a01b03191690556104058161048f565b6001600160a01b03811615610684576106848161068d565b61041a826107c2565b600080516020610fb68339815191526106a5826108ba565b60005b600182015460ff821610156107bd57826001600160a01b0316826001018260ff16815481106106d9576106d9610e29565b6000918252602090912001546001600160a01b031614156107ab5760018083018054909161070691610e70565b8154811061071657610716610e29565b6000918252602090912001546001830180546001600160a01b039092169160ff841690811061074757610747610e29565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061078857610788610e87565b600082815260209020810160001990810180546001600160a01b03191690550190555b806107b581610e9d565b9150506106a8565b505050565b600080516020610fb683398151915260005b600182015460ff8216101561087a57826001600160a01b0316826001018260ff168154811061080557610805610e29565b6000918252602090912001546001600160a01b031614156108685760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c72656164792061646465640000000000000000006044820152606401610134565b8061087281610e9d565b9150506107d4565b5061088482610a7f565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109229190810190610ebd565b9050600080516020610fb683398151915260005b82518161ffff161015610a79576000838261ffff168151811061095b5761095b610e29565b6020026020010151905061096f81846104df565b6001600160a01b0316856001600160a01b03161461098f5761098f610f7d565b600061099b8285610c06565b845490915084906109ae90600190610e70565b815481106109be576109be610e29565b90600052602060002001846000018261ffff16815481106109e1576109e1610e29565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080610a4257610a42610e87565b600082815260209020810160001990810180546001600160c01b031916905501905550819050610a7181610f93565b915050610936565b50505050565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae79190810190610ebd565b600080516020610fb683398151915280549192509060005b8351811015610bff576000848281518110610b1c57610b1c610e29565b602002602001015190506000610b3282866104df565b90506001600160a01b03811615610b7757604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b0382166024820152604401610134565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b0319909216939092169290921791909117905583610be781610f93565b94505050508080610bf790610e55565b915050610aff565b5050505050565b8054600090815b8161ffff168161ffff161015610c8257846001600160e01b031916846000018261ffff1681548110610c4157610c41610e29565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610c705791506103299050565b80610c7a81610f93565b915050610c0d565b5061ffff949350505050565b6001600160a01b038116811461040557600080fd5b60008060408385031215610cb657600080fd5b8235610cc181610c8e565b91506020830135610cd181610c8e565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610d1d5783516001600160a01b031683529284019291840191600101610cf8565b50909695505050505050565b600060208284031215610d3b57600080fd5b8135610d4681610c8e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8c57610d8c610d4d565b604052919050565b60006020808385031215610da757600080fd5b823567ffffffffffffffff80821115610dbf57600080fd5b818501915085601f830112610dd357600080fd5b813581811115610de557610de5610d4d565b610df7601f8201601f19168501610d63565b91508082528684828501011115610e0d57600080fd5b8084840185840137600090820190930192909252509392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610e6957610e69610e3f565b5060010190565b600082821015610e8257610e82610e3f565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff811415610eb457610eb4610e3f565b60010192915050565b60006020808385031215610ed057600080fd5b825167ffffffffffffffff80821115610ee857600080fd5b818501915085601f830112610efc57600080fd5b815181811115610f0e57610f0e610d4d565b8060051b9150610f1f848301610d63565b8181529183018401918481019088841115610f3957600080fd5b938501935b83851015610f7157845192506001600160e01b031983168314610f615760008081fd5b8282529385019390850190610f3e565b98975050505050505050565b634e487b7160e01b600052600160045260246000fd5b600061ffff80831681811415610fab57610fab610e3f565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000a", + "sourceMap": "194:765:237:-:0;;;323:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;936:32:470;719:10:484;936:18:470;:32::i;:::-;378:2:237::1;:8:::0;;-1:-1:-1;;;;;;378:8:237::1;-1:-1:-1::0;;;;;378:8:237;;;::::1;::::0;;;::::1;::::0;;194:765;;1496:153:471;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;14:317:504:-;111:6;164:2;152:9;143:7;139:23;135:32;132:52;;;180:1;177;170:12;132:52;206:16;;-1:-1:-1;;;;;251:31:504;;241:42;;231:70;;297:1;294;287:12;231:70;320:5;14:317;-1:-1:-1;;;14:317:504:o;:::-;194:765:237;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100ea5760003560e01c80638db87c271161008c578063dc54bc8111610066578063dc54bc81146102b1578063dee7fe48146102b7578063e30c3978146102eb578063f2fde38b146102fc576100ea565b80638db87c2714610220578063a700f9e414610249578063c8ff6fee1461027d576100ea565b8063715018a6116100c8578063715018a6146101ea57806379ba5097146101f457806389cd9855146101fc5780638da5cb5b1461020f576100ea565b8063398cd955146101615780633c4f743c146101aa5780636333d001146101d5575b60006101016000356001600160e01b03191661030f565b90506001600160a01b03811661013d57604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e80801561015c573d6000f35b3d6000fd5b61019161016f366004610ca3565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff90911681526020015b60405180910390f35b6002546101bd906001600160a01b031681565b6040516001600160a01b0390911681526020016101a1565b6101dd61032f565b6040516101a19190610cdc565b6101f261033e565b005b6101f261038e565b6101f261020a366004610ca3565b610408565b6000546001600160a01b03166101bd565b6101bd61022e366004610d29565b6007602052600090815260409020546001600160a01b031681565b6101bd610257366004610ca3565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6101bd61028b366004610ca3565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b306101bd565b6101bd6102c5366004610d94565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6001546001600160a01b03166101bd565b6101f261030a366004610d29565b61041e565b600061032982600080516020610fb68339815191526104df565b92915050565b6060610339610585565b905090565b6103466105f7565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f77656400006044820152606401610134565b60015433906001600160a01b031681146103fc5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610134565b61040581610653565b50565b6104106105f7565b61041a828261066c565b5050565b6104266105f7565b600180546001600160a01b0383166001600160a01b031990911681179091556104576000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b8054600090815b8181101561057a57846001600160e01b03191684600001828154811061050e5761050e610e29565b600091825260209091200154600160a01b900460e01b6001600160e01b03191614156105685783600001818154811061054957610549610e29565b6000918252602090912001546001600160a01b03169250610329915050565b8061057281610e55565b9150506104e6565b506000949350505050565b6060600080516020610fb68339815191526001018054806020026020016040519081016040528092919081815260200182805480156105ed57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116105cf575b5050505050905090565b6000546001600160a01b031633146106515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610134565b565b600180546001600160a01b03191690556104058161048f565b6001600160a01b03811615610684576106848161068d565b61041a826107c2565b600080516020610fb68339815191526106a5826108ba565b60005b600182015460ff821610156107bd57826001600160a01b0316826001018260ff16815481106106d9576106d9610e29565b6000918252602090912001546001600160a01b031614156107ab5760018083018054909161070691610e70565b8154811061071657610716610e29565b6000918252602090912001546001830180546001600160a01b039092169160ff841690811061074757610747610e29565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b031602179055508160010180548061078857610788610e87565b600082815260209020810160001990810180546001600160a01b03191690550190555b806107b581610e9d565b9150506106a8565b505050565b600080516020610fb683398151915260005b600182015460ff8216101561087a57826001600160a01b0316826001018260ff168154811061080557610805610e29565b6000918252602090912001546001600160a01b031614156108685760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c72656164792061646465640000000000000000006044820152606401610134565b8061087281610e9d565b9150506107d4565b5061088482610a7f565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156108fa573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526109229190810190610ebd565b9050600080516020610fb683398151915260005b82518161ffff161015610a79576000838261ffff168151811061095b5761095b610e29565b6020026020010151905061096f81846104df565b6001600160a01b0316856001600160a01b03161461098f5761098f610f7d565b600061099b8285610c06565b845490915084906109ae90600190610e70565b815481106109be576109be610e29565b90600052602060002001846000018261ffff16815481106109e1576109e1610e29565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080610a4257610a42610e87565b600082815260209020810160001990810180546001600160c01b031916905501905550819050610a7181610f93565b915050610936565b50505050565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610abf573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610ae79190810190610ebd565b600080516020610fb683398151915280549192509060005b8351811015610bff576000848281518110610b1c57610b1c610e29565b602002602001015190506000610b3282866104df565b90506001600160a01b03811615610b7757604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b0382166024820152604401610134565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b0319909216939092169290921791909117905583610be781610f93565b94505050508080610bf790610e55565b915050610aff565b5050505050565b8054600090815b8161ffff168161ffff161015610c8257846001600160e01b031916846000018261ffff1681548110610c4157610c41610e29565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610c705791506103299050565b80610c7a81610f93565b915050610c0d565b5061ffff949350505050565b6001600160a01b038116811461040557600080fd5b60008060408385031215610cb657600080fd5b8235610cc181610c8e565b91506020830135610cd181610c8e565b809150509250929050565b6020808252825182820181905260009190848201906040850190845b81811015610d1d5783516001600160a01b031683529284019291840191600101610cf8565b50909695505050505050565b600060208284031215610d3b57600080fd5b8135610d4681610c8e565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8c57610d8c610d4d565b604052919050565b60006020808385031215610da757600080fd5b823567ffffffffffffffff80821115610dbf57600080fd5b818501915085601f830112610dd357600080fd5b813581811115610de557610de5610d4d565b610df7601f8201601f19168501610d63565b91508082528684828501011115610e0d57600080fd5b8084840185840137600090820190930192909252509392505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610e6957610e69610e3f565b5060010190565b600082821015610e8257610e82610e3f565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff811415610eb457610eb4610e3f565b60010192915050565b60006020808385031215610ed057600080fd5b825167ffffffffffffffff80821115610ee857600080fd5b818501915085601f830112610efc57600080fd5b815181811115610f0e57610f0e610d4d565b8060051b9150610f1f848301610d63565b8181529183018401918481019088841115610f3957600080fd5b938501935b83851015610f7157845192506001600160e01b031983168314610f615760008081fd5b8282529385019390850190610f3e565b98975050505050505050565b634e487b7160e01b600052600160045260246000fd5b600061ffff80831681811415610fab57610fab610e3f565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b2615a164736f6c634300080a000a", + "sourceMap": "194:765:237:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1275:17:135;1295:43;1330:7;;-1:-1:-1;;;;;;1330:7:135;1295:34;:43::i;:::-;1275:63;-1:-1:-1;;;;;;1348:23:135;;1344:61;;1380:25;;-1:-1:-1;;;1380:25:135;;-1:-1:-1;;;;;;1397:7:135;;;1380:25;;;158:52:504;131:18;;1380:25:135;;;;;;;;1344:61;1586:14;1583:1;1580;1567:34;1726:1;1723;1707:14;1704:1;1693:9;1686:5;1673:55;1786:16;1783:1;1780;1765:38;1878:6;1891:52;;;;1978:16;1975:1;1968:27;1891:52;1918:16;1915:1;1908:27;1164:87:240;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1037:8:504;1025:21;;;1007:40;;995:2;980:18;1164:87:240;;;;;;;;450:27;;;;;-1:-1:-1;;;;;450:27:240;;;;;;-1:-1:-1;;;;;1249:32:504;;;1231:51;;1219:2;1204:18;450:27:240;1058:230:504;1134:111:135;;;:::i;:::-;;;;;;;:::i;174:106:139:-;;;:::i;:::-;;1729:206:471;;;:::i;605:213:237:-;;;;;;:::i;:::-;;:::i;1201:85:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;1201:85;;735:73:240;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;735:73:240;;;616:115;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;616:115:240;;;1255:92;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1255:92:240;;;822:135:237;946:4;822:135;;540:72:240;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:72:240;;;842:99:471;921:13;;-1:-1:-1;;;;;921:13:471;842:99;;1134:178;;;;;;:::i;:::-;;:::i;2384:147:135:-;2455:7;2477:49;2501:6;-1:-1:-1;;;;;;;;;;;2477:23:135;:49::i;:::-;2470:56;2384:147;-1:-1:-1;;2384:147:135:o;1134:111::-;1182:16;1213:27;:25;:27::i;:::-;1206:34;;1134:111;:::o;174:106:139:-;1094:13:470;:11;:13::i;:::-;235:40:139::1;::::0;-1:-1:-1;;;235:40:139;;5319:2:504;235:40:139::1;::::0;::::1;5301:21:504::0;5358:2;5338:18;;;5331:30;5397:32;5377:18;;;5370:60;5447:18;;235:40:139::1;5117:354:504::0;1729:206:471;921:13;;719:10:484;;-1:-1:-1;;;;;921:13:471;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:471;;5678:2:504;1814:78:471;;;5660:21:504;5717:2;5697:18;;;5690:30;5756:34;5736:18;;;5729:62;-1:-1:-1;;;5807:18:504;;;5800:39;5856:19;;1814:78:471;5476:405:504;1814:78:471;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;605:213:237:-;1094:13:470;:11;:13::i;:::-;749:64:237::1;778:14;794:18;749:28;:64::i;:::-;605:213:::0;;:::o;1134:178:471:-;1094:13:470;:11;:13::i;:::-;1223::471::1;:24:::0;;-1:-1:-1;;;;;1223:24:471;::::1;-1:-1:-1::0;;;;;;1223:24:471;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::470::0;1273:6;-1:-1:-1;;;;;1273:6:470;;1201:85;1287:7:471::1;-1:-1:-1::0;;;;;1262:43:471::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;5191:309:135:-;5321:19;;5289:7;;;5346:126;5370:6;5366:1;:10;5346:126;;;5423:8;-1:-1:-1;;;;;5395:36:135;;:2;:12;;5408:1;5395:15;;;;;;;;:::i;:::-;;;;;;;;;;:24;-1:-1:-1;;;5395:24:135;;;;-1:-1:-1;;;;;;5395:36:135;;5391:74;;;5440:2;:12;;5453:1;5440:15;;;;;;;;:::i;:::-;;;;;;;;;;:25;-1:-1:-1;;;;;5440:25:135;;-1:-1:-1;5433:32:135;;-1:-1:-1;;5433:32:135;5391:74;5378:3;;;;:::i;:::-;;;;5346:126;;;-1:-1:-1;5493:1:135;;5191:309;-1:-1:-1;;;;5191:309:135:o;2714:112::-;2763:16;-1:-1:-1;;;;;;;;;;;2794:27:135;;2787:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2787:34:135;;;;;;;;;;;;;;;;;;;;;;;2714:112;:::o;1359:130:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;719:10:484;1422:23:470;1414:68;;;;-1:-1:-1;;;1414:68:470;;6492:2:504;1414:68:470;;;6474:21:504;;;6511:18;;;6504:30;6570:34;6550:18;;;6543:62;6622:18;;1414:68:470;6290:356:504;1414:68:470;1359:130::o;1496:153:471:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;:34::i;2830:247:135:-;-1:-1:-1;;;;;2946:41:135;;;2942:97;;2997:35;3013:18;2997:15;:35::i;:::-;3044:28;3057:14;3044:12;:28::i;3081:430::-;-1:-1:-1;;;;;;;;;;;3253:35:135;3278:9;3253:24;:35::i;:::-;3299:7;3294:213;3316:13;;;:20;3312:24;;;;3294:213;;;3383:9;-1:-1:-1;;;;;3355:38:135;:2;:13;;3369:1;3355:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3355:16:135;:38;3351:150;;;3424:13;;;;3438:20;;3424:13;;3438:24;;;:::i;:::-;3424:39;;;;;;;;:::i;:::-;;;;;;;;;;;;3405:13;;:16;;-1:-1:-1;;;;;3424:39:135;;;;3405:16;;;;;;;;;;:::i;:::-;;;;;;;;;:58;;;;;-1:-1:-1;;;;;3405:58:135;;;;;-1:-1:-1;;;;;3405:58:135;;;;;;3473:2;:13;;:19;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;3473:19:135;;;;;-1:-1:-1;;;;;;3473:19:135;;;;;;3351:150;3338:3;;;;:::i;:::-;;;;3294:213;;;;3143:368;3081:430;:::o;3515:337::-;-1:-1:-1;;;;;;;;;;;3580:23:135;3628:138;3650:13;;;:20;3646:24;;;;3628:138;;;3721:9;-1:-1:-1;;;;;3693:38:135;:2;:13;;3707:1;3693:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3693:16:135;:38;;3685:74;;;;-1:-1:-1;;;3685:74:135;;7295:2:504;3685:74:135;;;7277:21:504;7334:2;7314:18;;;7307:30;7373:25;7353:18;;;7346:53;7416:18;;3685:74:135;7093:347:504;3685:74:135;3672:3;;;;:::i;:::-;;;;3628:138;;;;3771:32;3793:9;3771:21;:32::i;:::-;3809:13;;;;:38;;;;;;;-1:-1:-1;3809:38:135;;;;;;;;;-1:-1:-1;;;;;;3809:38:135;-1:-1:-1;;;;;3809:38:135;;;;;;;;;;3515:337::o;3856:672::-;3933:27;3963:9;-1:-1:-1;;;;;3963:32:135;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3963:34:135;;;;;;;;;;;;:::i;:::-;3933:64;-1:-1:-1;;;;;;;;;;;;4003:23:135;4051:473;4074:11;:18;4070:1;:22;;;4051:473;;;4107:23;4133:11;4145:1;4133:14;;;;;;;;;;:::i;:::-;;;;;;;4107:40;;4209:45;4233:16;4251:2;4209:23;:45::i;:::-;-1:-1:-1;;;;;4187:67:135;4195:9;-1:-1:-1;;;;;4187:67:135;;4180:75;;;;:::i;:::-;4356:18;4377:41;4397:16;4415:2;4377:19;:41::i;:::-;4467:19;;4356:62;;-1:-1:-1;4454:2:135;;4467:23;;4489:1;;4467:23;:::i;:::-;4454:37;;;;;;;;:::i;:::-;;;;;;;;4426:2;:12;;4439:11;4426:25;;;;;;;;;;:::i;:::-;;;;;;;;;:65;;:25;;:65;;-1:-1:-1;;;;;4426:65:135;;;-1:-1:-1;;;;;;4426:65:135;;;;;;;;-1:-1:-1;;;;;;4426:65:135;;;;;;-1:-1:-1;;;4426:65:135;;;;;;;;;;;;4499:18;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;4499:18:135;;;;;-1:-1:-1;;;;;;4499:18:135;;;;;;-1:-1:-1;4094:3:135;;-1:-1:-1;4094:3:135;;;:::i;:::-;;;;4051:473;;;;3927:601;;3856:672;:::o;4532:655::-;4606:24;4633:9;-1:-1:-1;;;;;4633:32:135;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4633:34:135;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;;;;;;4752:19:135;;4606:61;;-1:-1:-1;2182:47:135;4673:23;4778:405;4828:8;:15;4811:14;:32;4778:405;;;4871:15;4889:8;4898:14;4889:24;;;;;;;;:::i;:::-;;;;;;;4871:42;;4921:25;4949:37;4973:8;4983:2;4949:23;:37::i;:::-;4921:65;-1:-1:-1;;;;;;4998:31:135;;;4994:93;;5038:49;;-1:-1:-1;;;5038:49:135;;-1:-1:-1;;;;;;9094:33:504;;5038:49:135;;;9076:52:504;-1:-1:-1;;;;;9164:32:504;;9144:18;;;9137:60;9049:18;;5038:49:135;8904:299:504;4994:93:135;5113:38;;;;;;;;;-1:-1:-1;;;;;5113:38:135;;;;;-1:-1:-1;;;;;;5113:38:135;;;;;;;;;5095:57;;;;;;;:12;:57;;;;;;;;;;;;;;;;;-1:-1:-1;;;5095:57:135;-1:-1:-1;;;;;;5095:57:135;;;;;;;;;;;;;;;;;5160:16;;;;:::i;:::-;;;;4863:320;;4845:16;;;;;:::i;:::-;;;;4778:405;;;;4600:587;;;4532:655;:::o;5504:292::-;5635:19;;5598:6;;;5661:101;5684:6;5680:10;;:1;:10;;;5661:101;;;5737:8;-1:-1:-1;;;;;5709:36:135;;:2;:12;;5722:1;5709:15;;;;;;;;;;:::i;:::-;;;;;;;;;;:24;-1:-1:-1;;;5709:24:135;;;;-1:-1:-1;;;;;;5709:36:135;;5705:50;;;5754:1;-1:-1:-1;5747:8:135;;-1:-1:-1;5747:8:135;5705:50;5692:3;;;;:::i;:::-;;;;5661:101;;;-1:-1:-1;5775:16:135;;5504:292;-1:-1:-1;;;;5504:292:135:o;221:150:504:-;-1:-1:-1;;;;;315:31:504;;305:42;;295:70;;361:1;358;351:12;376:482;500:6;508;561:2;549:9;540:7;536:23;532:32;529:52;;;577:1;574;567:12;529:52;616:9;603:23;635:50;679:5;635:50;:::i;:::-;704:5;-1:-1:-1;761:2:504;746:18;;733:32;774:52;733:32;774:52;:::i;:::-;845:7;835:17;;;376:482;;;;;:::o;1293:658::-;1464:2;1516:21;;;1586:13;;1489:18;;;1608:22;;;1435:4;;1464:2;1687:15;;;;1661:2;1646:18;;;1435:4;1730:195;1744:6;1741:1;1738:13;1730:195;;;1809:13;;-1:-1:-1;;;;;1805:39:504;1793:52;;1900:15;;;;1865:12;;;;1841:1;1759:9;1730:195;;;-1:-1:-1;1942:3:504;;1293:658;-1:-1:-1;;;;;;1293:658:504:o;2647:294::-;2734:6;2787:2;2775:9;2766:7;2762:23;2758:32;2755:52;;;2803:1;2800;2793:12;2755:52;2842:9;2829:23;2861:50;2905:5;2861:50;:::i;:::-;2930:5;2647:294;-1:-1:-1;;;2647:294:504:o;3665:127::-;3726:10;3721:3;3717:20;3714:1;3707:31;3757:4;3754:1;3747:15;3781:4;3778:1;3771:15;3797:275;3868:2;3862:9;3933:2;3914:13;;-1:-1:-1;;3910:27:504;3898:40;;3968:18;3953:34;;3989:22;;;3950:62;3947:88;;;4015:18;;:::i;:::-;4051:2;4044:22;3797:275;;-1:-1:-1;3797:275:504:o;4077:764::-;4146:6;4177:2;4220;4208:9;4199:7;4195:23;4191:32;4188:52;;;4236:1;4233;4226:12;4188:52;4276:9;4263:23;4305:18;4346:2;4338:6;4335:14;4332:34;;;4362:1;4359;4352:12;4332:34;4400:6;4389:9;4385:22;4375:32;;4445:7;4438:4;4434:2;4430:13;4426:27;4416:55;;4467:1;4464;4457:12;4416:55;4503:2;4490:16;4525:2;4521;4518:10;4515:36;;;4531:18;;:::i;:::-;4573:53;4616:2;4597:13;;-1:-1:-1;;4593:27:504;4589:36;;4573:53;:::i;:::-;4560:66;;4649:2;4642:5;4635:17;4689:7;4684:2;4679;4675;4671:11;4667:20;4664:33;4661:53;;;4710:1;4707;4700:12;4661:53;4765:2;4760;4756;4752:11;4747:2;4740:5;4736:14;4723:45;4809:1;4788:14;;;4784:23;;;4777:34;;;;-1:-1:-1;4792:5:504;4077:764;-1:-1:-1;;;4077:764:504:o;5886:127::-;5947:10;5942:3;5938:20;5935:1;5928:31;5978:4;5975:1;5968:15;6002:4;5999:1;5992:15;6018:127;6079:10;6074:3;6070:20;6067:1;6060:31;6110:4;6107:1;6100:15;6134:4;6131:1;6124:15;6150:135;6189:3;-1:-1:-1;;6210:17:504;;6207:43;;;6230:18;;:::i;:::-;-1:-1:-1;6277:1:504;6266:13;;6150:135::o;6651:125::-;6691:4;6719:1;6716;6713:8;6710:34;;;6724:18;;:::i;:::-;-1:-1:-1;6761:9:504;;6651:125::o;6781:127::-;6842:10;6837:3;6833:20;6830:1;6823:31;6873:4;6870:1;6863:15;6897:4;6894:1;6887:15;6913:175;6950:3;6994:4;6987:5;6983:16;7023:4;7014:7;7011:17;7008:43;;;7031:18;;:::i;:::-;7080:1;7067:15;;6913:175;-1:-1:-1;;6913:175:504:o;7445:1120::-;7539:6;7570:2;7613;7601:9;7592:7;7588:23;7584:32;7581:52;;;7629:1;7626;7619:12;7581:52;7662:9;7656:16;7691:18;7732:2;7724:6;7721:14;7718:34;;;7748:1;7745;7738:12;7718:34;7786:6;7775:9;7771:22;7761:32;;7831:7;7824:4;7820:2;7816:13;7812:27;7802:55;;7853:1;7850;7843:12;7802:55;7882:2;7876:9;7904:2;7900;7897:10;7894:36;;;7910:18;;:::i;:::-;7956:2;7953:1;7949:10;7939:20;;7979:28;8003:2;7999;7995:11;7979:28;:::i;:::-;8041:15;;;8111:11;;;8107:20;;;8072:12;;;;8139:19;;;8136:39;;;8171:1;8168;8161:12;8136:39;8195:11;;;;8215:320;8231:6;8226:3;8223:15;8215:320;;;8298:10;;;-1:-1:-1;;;;;;;8341:32:504;;8331:43;;8321:141;;8416:1;8445:2;8441;8434:14;8321:141;8475:18;;;8248:12;;;;8513;;;;8215:320;;;8554:5;7445:1120;-1:-1:-1;;;;;;;;7445:1120:504:o;8570:127::-;8631:10;8626:3;8622:20;8619:1;8612:31;8662:4;8659:1;8652:15;8686:4;8683:1;8676:15;8702:197;8740:3;8768:6;8809:2;8802:5;8798:14;8836:2;8827:7;8824:15;8821:41;;;8842:18;;:::i;:::-;8891:1;8878:15;;8702:197;-1:-1:-1;;;8702:197:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_listExtensions()": "6333d001", + "_registerExtension(address,address)": "89cd9855", + "acceptOwnership()": "79ba5097", + "ap()": "3c4f743c", + "asExtension()": "dc54bc81", + "customUniV3Router(address,address)": "c8ff6fee", + "defaultOutputToken(address)": "8db87c27", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "redemptionStrategiesByName(string)": "dee7fe48", + "redemptionStrategiesByTokens(address,address)": "a700f9e4", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b", + "uniswapV3Fees(address,address)": "398cd955" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LiquidatorsRegistryExtension.json b/packages/sdk/deployments/bob/LiquidatorsRegistryExtension.json new file mode 100644 index 000000000..8496919bf --- /dev/null +++ b/packages/sdk/deployments/bob/LiquidatorsRegistryExtension.json @@ -0,0 +1,1482 @@ +{ + "address": "0x6f307eA8Bcc55A00e46822058a12B8317488E534", + "abi": [ + { + "type": "function", + "name": "MAX_SLIPPAGE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "amountOutAndSlippageOfSwap", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "inputAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "outputAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "slippage", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "ap", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract AddressesProvider" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "customUniV3Router", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultOutputToken", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAllRedemptionStrategies", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getInputTokensByOutputToken", + "inputs": [ + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRedemptionStrategies", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IRedemptionStrategy[]" + }, + { + "name": "strategiesData", + "type": "bytes[]", + "internalType": "bytes[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRedemptionStrategy", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract IRedemptionStrategy" + }, + { + "name": "strategyData", + "type": "bytes", + "internalType": "bytes" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSlippage", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "slippage", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redemptionStrategiesByName", + "inputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IRedemptionStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redemptionStrategiesByTokens", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IRedemptionStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "swap", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "inputAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "outputAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "uniswapV3Fees", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "uint24", + "internalType": "uint24" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "SlippageUpdated", + "inputs": [ + { + "name": "from", + "type": "address", + "indexed": true, + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "to", + "type": "address", + "indexed": true, + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "prevValue", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newValue", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "NoRedemptionPath", + "inputs": [] + }, + { + "type": "error", + "name": "OutputTokenMismatch", + "inputs": [] + } + ], + "transactionHash": "0xb5838fceb52ff870e41ae680d9ef270759fae3b11f2d462e82ec71ef0cabbb0a", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x6f307eA8Bcc55A00e46822058a12B8317488E534", + "transactionIndex": 1, + "gasUsed": "4468464", + "logsBloom": "0x00000000000000080000000000000000000000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000002000000000000000000000020000000000000000000800000000000000000000000000000000408000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x8135a420d62e90b71edcc1f9b4926529633bd2e84819594563018225e90511f7", + "transactionHash": "0xb5838fceb52ff870e41ae680d9ef270759fae3b11f2d462e82ec71ef0cabbb0a", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777946, + "transactionHash": "0xb5838fceb52ff870e41ae680d9ef270759fae3b11f2d462e82ec71ef0cabbb0a", + "address": "0x6f307eA8Bcc55A00e46822058a12B8317488E534", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x8135a420d62e90b71edcc1f9b4926529633bd2e84819594563018225e90511f7" + } + ], + "blockNumber": 3777946, + "cumulativeGasUsed": "4512303", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "type": "error", + "name": "NoRedemptionPath" + }, + { + "inputs": [], + "type": "error", + "name": "OutputTokenMismatch" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "from", + "type": "address", + "indexed": true + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "to", + "type": "address", + "indexed": true + }, + { + "internalType": "uint256", + "name": "prevValue", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newValue", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "SlippageUpdated", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "MAX_SLIPPAGE", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "amountOutAndSlippageOfSwap", + "outputs": [ + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllRedemptionStrategies", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getInputTokensByOutputToken", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRedemptionStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "bytes[]", + "name": "strategiesData", + "type": "bytes[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRedemptionStrategy", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSlippage", + "outputs": [ + { + "internalType": "uint256", + "name": "slippage", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "swap", + "outputs": [ + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/liquidators/registry/LiquidatorsRegistryExtension.sol": "LiquidatorsRegistryExtension" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/EIP20Interface.sol": { + "keccak256": "0xcea1d290397e1c8eac89c96738e7ec55259a575f878152eeccf33c0cf6d008e5", + "urls": [ + "bzz-raw://6adec9a5f68070b8edd0a7a08193c217164ac584676db102b68eab7c9e3b2fbf", + "dweb:/ipfs/QmVQhJ2QBzKTc3BP7LLPzD5ujd4MX1rGUwWCQudQqSxkSw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/bomb/IXBomb.sol": { + "keccak256": "0x7bab8191e350a68203996c0d99a5c075307ad421c98142072f9b5312534bff9b", + "urls": [ + "bzz-raw://70ada9803810fff6a8d907a50da72dc95eb75267060b5a71c899cd244d970638", + "dweb:/ipfs/QmcMaYsCbFhoKJLGza4F9hy86cvEhjq492Y65pVzZB8jUj" + ], + "license": null + }, + "contracts/external/curve/ICurvePool.sol": { + "keccak256": "0x41770e1ed75224a030ca961ee216ecfae2d16968234f7fab4b7427aa575b9acc", + "urls": [ + "bzz-raw://238efef35bb6b8d38b6fd6cb0985d936daf20bdac4ec9ab041fc2c5939635fcc", + "dweb:/ipfs/QmRhzTppsXSYGc36rMPT31eVVehkfpECbdBoKq2Xvq1ofi" + ], + "license": "UNLICENSED" + }, + "contracts/external/curve/ICurveV2Pool.sol": { + "keccak256": "0x8450c23787d2b4823367dbff5580f2e55a36ad7fd57a4561d3361612f37a1d98", + "urls": [ + "bzz-raw://5d06b0a68ee8b32c86077bf4cb1944dc6b1d841df030199223c2434456d7fe78", + "dweb:/ipfs/QmZRKiwjT2QsXM9w5qLEY92sWMFF7HNP9LXCFAYqtzyvxS" + ], + "license": "UNLICENSED" + }, + "contracts/external/saddle/ISwap.sol": { + "keccak256": "0x18a574d7aff6a6ebd2c086820f98c476b3a4324fe5f735732e71c7d306bf9f70", + "urls": [ + "bzz-raw://fda761e2e52dac4d8d9a403d84abff870918e47b2d744f20802c60e086ccc42b", + "dweb:/ipfs/QmeMbmEXfeej6XRunwdadqJC4ESSFjgxcLRdh8H9ZN2jQU" + ], + "license": "MIT" + }, + "contracts/external/solidly/IPair.sol": { + "keccak256": "0xd13d4e85d4d16d46d2df3f1a8f5f1bcc6762f9d8ae0aa807847ea644ce0d0f72", + "urls": [ + "bzz-raw://e3d9cafc90f8849b3051628a3d6f74c688854889805bf1fa119e578875c48fb3", + "dweb:/ipfs/QmWRurHXNAVpCcWJqZkx9tN5qgfDaqGEPqQGLmTzXmJApT" + ], + "license": "MIT" + }, + "contracts/external/solidly/IRouter.sol": { + "keccak256": "0x1b0243564ad8f92731f75038da17d97be2c2d8bebd5c6fa3a565d5d367909260", + "urls": [ + "bzz-raw://a47f4e14934e1452b5370e4267e43b4e6f98fd7a0d78bb79df04bf3ecd5d1204", + "dweb:/ipfs/QmWPVmf51r3ZjNGphbz2ws6qJNkXubZVXG2ybqtfkyf4b4" + ], + "license": null + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AddressesProvider.sol": { + "keccak256": "0xf48e9e8b2150408c1c6b68dd957226c342ba47396da792fdaa0922f539a7e163", + "urls": [ + "bzz-raw://43c0a6c40861da4c19b67da9faee7df21572020e2d863611080a9181acc3ba3a", + "dweb:/ipfs/QmQpPDVAYTba8R9N1fGggzkG7JhUFVbAhxdfNw9xofVi4m" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/XBombLiquidatorFunder.sol": { + "keccak256": "0x5d7004618ff58b831b7cdab4c1bb5d1997c94e9255915e4bbc58d11e257f2934", + "urls": [ + "bzz-raw://4414cbcb281990689913d23d01e09ff3b0f8b320d831e149be0796cee76b2d20", + "dweb:/ipfs/QmSYguBZYx3XkEBCXiiZ1QASpH598jVYoF6P5GcHMdDDBz" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/LiquidatorsRegistryExtension.sol": { + "keccak256": "0xaffd0b4d09ed8a10b1253a75b4fab56c7f7ea991aac58d81716e7c02c834cad3", + "urls": [ + "bzz-raw://2504e052df3d5229783c03ad5e4e53cdb048015d5fa0422deda8da5fe9b56757", + "dweb:/ipfs/QmZHUMtgwebw2xhXEFDzNK9B7qSFNCd4SQ29KWUVS5LVaa" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/registry/LiquidatorsRegistryStorage.sol": { + "keccak256": "0x95840e79c504ab6ee1d0cf9ff5fcec2424a64dc6ed57f0bf4831f65c89fc9109", + "urls": [ + "bzz-raw://29825087d3eeaca7516168043f1b046b280816195ed31f13cbdb7444ecb3b012", + "dweb:/ipfs/QmVa9kZx9gRvvUr8RbLRZKWseEMntoQ2CZmQ3TraSF9pa1" + ], + "license": "GPL-3.0" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x8748b7e74b8f789617f0b387cd2e2259a0fa3639d54234d7e6c99cb3eae6fc9a", + "urls": [ + "bzz-raw://a4e46033c3a440f48bfe45adb3b06db2b5870e3179f5170cd708c3030d240f39", + "dweb:/ipfs/QmPQZwCprBqi8BASL8nJpP63BpFGUS48ioyhS29GSAWp2r" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/CurveLpTokenPriceOracleNoRegistry.sol": { + "keccak256": "0x49016dd76e69d5c874f0888e743560fe0a6e71eac40ba0e009d2bd31e4255baa", + "urls": [ + "bzz-raw://ae88e6c1e7ec2bd8615d2277c4f9ad5a036d28631be8abe8bf7e450b678a37c2", + "dweb:/ipfs/QmRPBcV1koBcUqBJRP7wCgC6iVZyu8sS7ahqYj547mEpy2" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/CurveV2LpTokenPriceOracleNoRegistry.sol": { + "keccak256": "0x70596141564721af07d04f869b602d8f3a96282009e64002dbd0f2bb73609e87", + "urls": [ + "bzz-raw://1b6dac6960db01feac138ac194355a6c030dc1ef5dba8cd3ff0b8efa14f6e6e3", + "dweb:/ipfs/QmddVZpSKHL5StzrE1RQ1YDQzK7bNAQNGEGmvxu3RnuXcH" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/SaddleLpPriceOracle.sol": { + "keccak256": "0x074f866fc724084ddf4ccf41f0f2f02abc98aa3453251fd898208adf108dd5ed", + "urls": [ + "bzz-raw://b867f7e510ee9edfa756b373f12a9479b988b648891e0929a5cc8f220b507406", + "dweb:/ipfs/QmbnvVtbAQ6CFoY7n4eQRhMFYzkARGaZDme46LBuq74WeV" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b506200001d3362000023565b6200009d565b600180546001600160a01b03191690556200004a816200004d602090811b620015f017901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b614f5380620000ad6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a6fdd2bb116100ad578063e30c397811610071578063e30c39781461031f578063ed287f3f14610330578063f2fde38b14610351578063f560cebd14610364578063f97595181461038c57600080fd5b8063a6fdd2bb1461025a578063a700f9e414610262578063b6b928fd14610296578063c8ff6fee146102b7578063dee7fe48146102eb57600080fd5b8063715018a6116100f4578063715018a6146101f957806379ba50971461020357806389f8132e1461020b5780638da5cb5b146102205780638db87c271461023157600080fd5b80632f53ef2b14610131578063398cd955146101575780633c4f743c1461019b578063403de57f146101c65780636d069a67146101e6575b600080fd5b61014461013f3660046144f9565b610395565b6040519081526020015b60405180910390f35b6101876101653660046144f9565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff909116815260200161014e565b6002546101ae906001600160a01b031681565b6040516001600160a01b03909116815260200161014e565b6101d96101d4366004614532565b6103cb565b60405161014e9190614593565b6101446101f43660046145a6565b6103ef565b61020161042d565b005b610201610482565b6102136104fc565b60405161014e91906145e8565b6000546001600160a01b03166101ae565b6101ae61023f366004614532565b6007602052600090815260409020546001600160a01b031681565b6101d961073d565b6101ae6102703660046144f9565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6102a96102a43660046144f9565b61074e565b60405161014e92919061468e565b6101ae6102c53660046144f9565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b6101ae6102f9366004614722565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6001546001600160a01b03166101ae565b61034361033e3660046144f9565b610eeb565b60405161014e9291906147b7565b61020161035f366004614532565b611264565b6103776103723660046145a6565b6112d5565b6040805192835260208301919091520161014e565b61014461038481565b6001600160a01b038083166000908152600b6020908152604080832093851683529290522054806103c557506103845b92915050565b6001600160a01b03811660009081526008602052604090206060906103c590611640565b60006104066001600160a01b03851633308661164d565b61041084836116be565b90506104266001600160a01b0383163383611880565b9392505050565b6104356118b5565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b031681146104f05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610479565b6104f981611911565b50565b604080516007808252610100820190925260609190600090826020820160e08036833701905050905063ed287f3f60e01b816105378461486e565b93508360ff168151811061054d5761054d61488b565b6001600160e01b03199092166020928302919091019091015263b6b928fd60e01b816105788461486e565b93508360ff168151811061058e5761058e61488b565b6001600160e01b03199092166020928302919091019091015263403de57f60e01b816105b98461486e565b93508360ff16815181106105cf576105cf61488b565b6001600160e01b031990921660209283029190910190910152636d069a6760e01b816105fa8461486e565b93508360ff16815181106106105761061061488b565b6001600160e01b03199092166020928302919091019091015263a6fdd2bb60e01b8161063b8461486e565b93508360ff16815181106106515761065161488b565b6001600160e01b03199092166020928302919091019091015263f560cebd60e01b8161067c8461486e565b93508360ff16815181106106925761069261488b565b6001600160e01b031990921660209283029190910190910152632f53ef2b60e01b816106bd8461486e565b93508360ff16815181106106d3576106d361488b565b6001600160e01b03199092166020928302919091019091015260ff8216156103c55760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610479565b60606107496003611640565b905090565b6001600160a01b0380831660009081526006602090815260408083208585168452825291829020548251808401909352601583527429b7b634b2363ca9bbb0b82634b8bab4b230ba37b960591b91830191909152909116906060906107b490839061192a565b156107ca576107c38484611974565b9050610ee4565b610809826040518060400160405280601881526020017f536f6c69646c794c70546f6b656e4c697175696461746f72000000000000000081525061192a565b15610818576107c38484611e45565b610857826040518060400160405280601981526020017f556e697377617056324c697175696461746f7246756e6465720000000000000081525061192a565b806108915750610891826040518060400160405280601281526020017125b4b6aab734ab192634b8bab4b230ba37b960711b81525061192a565b156108a0576107c38484612050565b6108df826040518060400160405280601981526020017f556e697377617056334c697175696461746f7246756e6465720000000000000081525061192a565b156108ee576107c384846120f8565b610925826040518060400160405280601581526020017420b633b2b13930a9bbb0b82634b8bab4b230ba37b960591b81525061192a565b15610a175760004661868b1415610951575073ac48fcf1049668b285f3dc72483df5ae2162f7e86109e4565b60025460405163bf40fac160e01b815260206004820152601360248201527220a623a2a12920afa9aba0a82fa927aaaa22a960691b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e191906148a1565b90505b604080516001600160a01b0380871660208301528316818301528151808203830181526060909101909152915050610ee4565b610a56826040518060400160405280601d81526020017f47616d6d61416c67656272614c70546f6b656e4c697175696461746f7200000081525061192a565b15610a65576107c38484612252565b610aa4826040518060400160405280601f81526020017f47616d6d61556e697377617056334c70546f6b656e4c697175696461746f720081525061192a565b15610ab3576107c38484612325565b610aeb82604051806040016040528060168152602001752130b630b731b2b929bbb0b82634b8bab4b230ba37b960511b81525061192a565b15610afa576107c38484612388565b610b39826040518060400160405280601881526020017f556e69737761704c70546f6b656e4c697175696461746f72000000000000000081525061192a565b80610b755750610b75826040518060400160405280601481526020017323b2b630ba37a3aab734a634b8bab4b230ba37b960611b81525061192a565b15610b84576107c38484612494565b610bc3826040518060400160405280601781526020017f536164646c654c70546f6b656e4c697175696461746f7200000000000000000081525061192a565b15610bd2576107c3848461275a565b610c11826040518060400160405280602081526020017f43757276654c70546f6b656e4c697175696461746f724e6f526567697374727981525061192a565b15610c20576107c38484612939565b610c55826040518060400160405280601381526020017221bab93b32a9bbb0b82634b8bab4b230ba37b960691b81525061192a565b15610c64576107c38484612b1d565b610c99826040518060400160405280601381526020017221bab93b32a6382a37b5b2b72bb930b83832b960691b81525061192a565b15610ca8576107c38484612d0a565b610ce082604051806040016040528060168152602001752530b93b34b9a634b8bab4b230ba37b9233ab73232b960511b81525061192a565b15610cef576107c38484612db1565b610d2682604051806040016040528060158152602001742c2137b6b12634b8bab4b230ba37b9233ab73232b960591b81525061192a565b15610d35576107c38484612f49565b610d74826040518060400160405280601981526020017f42616c616e6365724c70546f6b656e4c697175696461746f720000000000000081525061192a565b15610d83576107c38484613118565b610db8826040518060400160405280601381526020017220b0bb32aa37b5b2b72634b8bab4b230ba37b960691b81525061192a565b15610dc7576107c38484613118565b610e06826040518060400160405280601a81526020017f47616d6d61416c67656272614c70546f6b656e5772617070657200000000000081525061192a565b15610e15576107c38484613134565b610e54826040518060400160405280601c81526020017f47616d6d61556e697377617056334c70546f6b656e577261707065720000000081525061192a565b15610e63576107c3848461328b565b610e9a826040518060400160405280601581526020017429b7b634b2363ca6382a37b5b2b72bb930b83832b960591b81525061192a565b15610ea9576107c3848461338f565b60405162461bcd60e51b815260206004820152601060248201526f6e6f207374726174656779206461746160801b6044820152606401610479565b9250929050565b60408051600a80825261016082019092526060918291859185916000916020820161014080368337505060408051600a80825261016082019092529293506000929150602082015b6060815260200190600190039081610f3357505060408051600a808252610160820190925291925060009190602082016101408036833701905050905060005b846001600160a01b0316866001600160a01b031614611112576001600160a01b03808716600090815260066020908152604080832089851684529091528120549091168015610fc457869150610fe2565b6001600160a01b038089166000908152600760205260409020541691505b60005b8451811015611038578481815181106110005761100061488b565b60200260200101516001600160a01b0316836001600160a01b0316141561102657611038565b80611030816148be565b915050610fe5565b506000806110468a8561074e565b90925090506001600160a01b0382166110625750505050611112565b818886815181106110755761107561488b565b60200260200101906001600160a01b031690816001600160a01b031681525050808786815181106110a8576110a861488b565b6020026020010181905250838686815181106110c6576110c661488b565b60200260200101906001600160a01b031690816001600160a01b03168152505083995084806110f4906148be565b95505084600a14156111095750505050611112565b50505050610f73565b8067ffffffffffffffff81111561112b5761112b6146b2565b604051908082528060200260200182016040528015611154578160200160208202803683370190505b5097508067ffffffffffffffff811115611170576111706146b2565b6040519080825280602002602001820160405280156111a357816020015b606081526020019060019003908161118e5790505b50965060005b818160ff16101561125657848160ff16815181106111c9576111c961488b565b6020026020010151898260ff16815181106111e6576111e661488b565b60200260200101906001600160a01b031690816001600160a01b031681525050838160ff168151811061121b5761121b61488b565b6020026020010151888260ff16815181106112385761123861488b565b6020026020010181905250808061124e906148d9565b9150506111a9565b505050505050509250929050565b61126c6118b5565b600180546001600160a01b0383166001600160a01b0319909116811790915561129d6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080836112e8575060009050806115e8565b6112f38585856103ef565b915081611305575060009050806115e8565b60025460405163bf40fac160e01b81526020600482015260116024820152704d617374657250726963654f7261636c6560781b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139491906148a1565b6040516315d5220f60e31b81526001600160a01b03888116600483015291925060009183169063aea9107890602401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140491906148f9565b6040516315d5220f60e31b81526001600160a01b03878116600483015291925060009184169063aea9107890602401602060405180830381865afa158015611450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147491906148f9565b90506000611482838a61398d565b61148c9089614912565b9050600061149a838961398d565b6114a49088614912565b9050818110156114d257816114b98282614931565b6114c590612710614912565b6114cf9190614948565b95505b6114dd60018761496a565b6001600160a01b03808c166000908152600b60209081526040808320938d168352929052205490965080158061154457506001600160a01b03808c166000908152600c60209081526040808320938d1683529290522054611388906115429042614931565b115b156115e157886001600160a01b03168b6001600160a01b03167f5d4661f2f390321d7ed6695cf1f19cd360bafab39b6dc6e06e5b48f1653486a1838a604051611597929190918252602082015260400190565b60405180910390a36001600160a01b03808c166000818152600b60209081526040808320948e168084529482528083208c9055928252600c81528282209382529290925290204290555b5050505050505b935093915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061042683613a4d565b6040516001600160a01b03808516602483015283166044820152606481018290526116b89085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613aa9565b50505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b91906148f9565b905060008061173a8686610eeb565b9150915081516000141561176157604051631aa27a4d60e21b815260040160405180910390fd5b858360005b84518110156117d95760008582815181106117835761178361488b565b6020026020010151905060008583815181106117a1576117a161488b565b602002602001015190506000806117ba87878686613b7b565b90975095508493506117d192508391506148be9050565b915050611766565b50866001600160a01b0316826001600160a01b03161461180c5760405163fdbb00c560e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611850573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187491906148f9565b98975050505050505050565b6040516001600160a01b0383166024820152604481018290526118b090849063a9059cbb60e01b90606401611681565b505050565b6000546001600160a01b0316331461190f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610479565b565b600180546001600160a01b03191690556104f9816115f0565b60006001600160a01b03831615801590610426575060058260405161194f9190614982565b908152604051908190036020019020546001600160a01b038481169116149392505050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac1906119a89060040161499e565b602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e991906148a1565b60405163260f701f60e11b815290915083906000906001600160a01b03841690634c1ee03e90611a21908990869086906004016149cb565b602060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6291906148a1565b90506000836001600160a01b0316634c1ee03e888560016040518463ffffffff1660e01b8152600401611a97939291906149cb565b602060405180830381865afa158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad891906148a1565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192509085169063e5e31b1390602401602060405180830381865afa158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4691906149ef565b80611bb6575060405163e5e31b1360e01b81526001600160a01b03838116600483015285169063e5e31b1390602401602060405180830381865afa158015611b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb691906149ef565b611c0e5760405162461bcd60e51b8152602060048201526024808201527f496e76616c696420536f6c69646c794c697175696461746f722073776170207060448201526330ba341760e11b6064820152608401610479565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000919086169063e5e31b1390602401602060405180830381865afa158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c91906149ef565b611c8857506000611e14565b60405163e5e31b1360e01b81526001600160a01b03848116600483015286169063e5e31b1390602401602060405180830381865afa158015611cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf291906149ef565b611cfe57506001611e14565b600080866001600160a01b0316635e60dab58b8860016040518463ffffffff1660e01b8152600401611d32939291906149cb565b6040805180830381865afa158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d729190614a11565b91509150600080886001600160a01b0316635e60dab58d8a60006040518463ffffffff1660e01b8152600401611daa939291906149cb565b6040805180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190614a11565b915091508184118015611dfc57508083115b15611e0a5760019450611e0f565b600094505b505050505b848782604051602001611e29939291906149cb565b6040516020818303038152906040529550505050505092915050565b60606000839050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eae91906148a1565b6001600160a01b0316836001600160a01b03161480611f3f5750806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2a91906148a1565b6001600160a01b0316836001600160a01b0316145b611faa5760405162461bcd60e51b815260206004820152603660248201527f4f757470757420746f6b656e20646f6573206e6f74206d6174636820656974686044820152756572206f6620746865207061697220746f6b656e732160501b6064820152608401610479565b60025460405163bf40fac160e01b81526001600160a01b039091169063bf40fac190611fd89060040161499e565b602060405180830381865afa158015611ff5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201991906148a1565b604080516001600160a01b039283166020820152918516908201526060015b60405160208183030381529060405291505092915050565b6040805160028082526060808301845292600092919060208301908036833701905050905083816000815181106120895761208961488b565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106120bd576120bd61488b565b60200260200101906001600160a01b031690816001600160a01b0316815250506120e684613bfc565b81604051602001612038929190614a35565b6001600160a01b038083166000908152600d602090815260408083209385168352929052205460609062ffffff168061215857506001600160a01b038083166000908152600d602090815260408083209387168352929052205462ffffff165b62ffffff811661216757506101f45b60006121738585613c8c565b60025460405163bf40fac160e01b815260206004820152600660248201526528bab7ba32b960d11b604482015291925086918691859185916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156121db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ff91906148a1565b604080516001600160a01b0396871660208201529486169085015262ffffff9092166060840152831660808301529190911660a082015260c0016040516020818303038152906040529250505092915050565b60025460405163bf40fac160e01b815260206004820152601960248201527823a0a6a6a0afa0a623a2a12920afa9aba0a82fa927aaaa22a960391b604482015260609183916001600160a01b039091169063bf40fac1906064015b602060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee91906148a1565b604080516001600160a01b03938416602082015292909116908201526060015b604051602081830303815290604052905092915050565b60025460405163bf40fac160e01b815260206004820152601c60248201527f47414d4d415f554e49535741505f56335f535741505f524f5554455200000000604482015260609183916001600160a01b039091169063bf40fac1906064016122ad565b60025460405163959fc09760e01b81526001600160a01b038481166004830152838116602483015260609260009291169063959fc09790604401602060405180830381865afa1580156123df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240391906148a1565b90506001600160a01b03811661246f5760405162461bcd60e51b815260206004820152602b60248201527f4e6f2062616c616e63657220706f6f6c20666f756e6420666f7220746865206760448201526a6976656e20746f6b656e7360a81b6064820152608401610479565b604080516001600160a01b038086166020830152831691810191909152606001612038565b606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ff91906148a1565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612541573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256591906148a1565b90506001600160a01b0385811681841681149183161481806125845750805b6125ee5760405162461bcd60e51b815260206004820152603560248201527f4f757470757420746f6b656e20646f6573206e6f74206d6174636820656974686044820152746572206f6620746865207061697220746f6b656e7360581b6064820152608401610479565b606080831561268e5760408051600081526002602082018181526080830184529194509091848101908036833701905050905084816000815181106126355761263561488b565b60200260200101906001600160a01b031690816001600160a01b03168152505085816001815181106126695761266961488b565b60200260200101906001600160a01b031690816001600160a01b03168152505061271f565b5060408051600081526002602082018181526080830184529192838101908036833701905050915085826000815181106126ca576126ca61488b565b60200260200101906001600160a01b031690816001600160a01b03168152505084826001815181106126fe576126fe61488b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6127288a613bfc565b828260405160200161273c93929190614a91565b60405160208183030381529060405297505050505050505092915050565b60025460405163bf40fac160e01b8152602060048201526013602482015272536164646c654c7050726963654f7261636c6560681b60448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156127cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f091906148a1565b60405163195b70b960e21b81526001600160a01b03868116600483015291925060009183169063656dc2e490602401600060405180830381865afa15801561283c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128649190810190614af5565b60025460405163bf40fac160e01b81529192506000916001600160a01b039091169063bf40fac19061289890600401614b89565b602060405180830381865afa1580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d991906148a1565b905060006128e78387613d91565b9050806001600160a01b038116158061291c575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316145b156129245750815b818584604051602001611e2993929190614ba9565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac19061296d90600401614bcc565b602060405180830381865afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ae91906148a1565b60405163988b1fa760e01b81526001600160a01b03868116600483015291925060009183169063988b1fa790602401602060405180830381865afa1580156129fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1e91906148a1565b90506000612a2b826140ac565b90506000612a398287613d91565b60025460405163bf40fac160e01b815291925082916000916001600160a01b03169063bf40fac190612a6d90600401614b89565b602060405180830381865afa158015612a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aae91906148a1565b90506001600160a01b0383161580612ae2575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038416145b15612aeb578091505b828187604051602001612b0093929190614ba9565b604051602081830303815290604052965050505050505092915050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac190612b5190600401614bcc565b602060405180830381865afa158015612b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9291906148a1565b60025460405163bf40fac160e01b815260206004820152602360248201527f437572766556324c70546f6b656e50726963654f7261636c654e6f526567697360448201526274727960e81b60648201529192506000916001600160a01b039091169063bf40fac190608401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e91906148a1565b60025460405163bf40fac160e01b81529192506000916001600160a01b039091169063bf40fac190612c7290600401614b89565b602060405180830381865afa158015612c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb391906148a1565b604080516001600160a01b038087166020830152808616928201929092528189166060820152818816608082015290821660a082015290915060c0015b604051602081830303815290604052935050505092915050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac190612d3e90600401614bcc565b602060405180830381865afa158015612d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7f91906148a1565b60405163988b1fa760e01b81526001600160a01b0385811660048301529192509082169063988b1fa790602401611fd8565b60606000600260009054906101000a90046001600160a01b03166001600160a01b03166377d792196040518163ffffffff1660e01b8152600401600060405180830381865afa158015612e08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e309190810190614c0d565b905060005b8151811015612f41576000828281518110612e5257612e5261488b565b60200260200101519050856001600160a01b031681600001516001600160a01b03161415612ebe57805160408083015160609384015182516001600160a01b03948516602082015293909116838301528284015280518083039093018352608090910190529250612f41565b856001600160a01b031681602001516001600160a01b03161415612f2e57806020015181604001518260600151604051602001612f1c939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405160208183030381529060405293505b5080612f39816148be565b915050612e35565b505092915050565b60604660381415612fad5760405173af16cb45b8149da403af41c63abfebfbcd16264b9073522348779dcb2911539e76a1042aa922f9c47ee390612f9590869084908490602001614ba9565b604051602081830303815290604052925050506103c5565b73e45589fbad3a1fb90f5b2a8a3e8958a8bab5f768734f1885d25ef219d3d4fa064809d6d4985fab9a0b738870f7102f1dcb1c35b01af10f1baf1b00ad6805733d312b224dec414fe865e1e9bfc13e2a86947d19738146293bf5225b471625372e985fdb7165c35fe26001600160a01b038816851415613095576000846001600160a01b0316886001600160a01b0316141561304a575081613067565b836001600160a01b0316886001600160a01b031614156130675750805b8081898a60405160200161307e9493929190614ce7565b60405160208183030381529060405296505061310d565b836001600160a01b0316886001600160a01b031614156130dc57878289876040516020016130c69493929190614ce7565b604051602081830303815290604052955061310d565b826001600160a01b0316886001600160a01b0316141561310d5787818987604051602001611e299493929190614ce7565b505050505092915050565b604080516001600160a01b03831660208201526060910161230e565b60025460405163bf40fac160e01b815260206004820152601960248201527823a0a6a6a0afa0a623a2a12920afa9aba0a82fa927aaaa22a960391b60448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156131ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d091906148a1565b60025460405163bf40fac160e01b815260206004820152601760248201527f47414d4d415f414c47454252415f554e495f50524f585900000000000000000060448201529192506000916001600160a01b039091169063bf40fac1906064015b602060405180830381865afa15801561324d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327191906148a1565b6040519091508490612cf090849084908490602001614ba9565b60025460405163bf40fac160e01b815260206004820152601c60248201527f47414d4d415f554e49535741505f56335f535741505f524f555445520000000060448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa158015613307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332b91906148a1565b60025460405163bf40fac160e01b815260206004820152601a60248201527f47414d4d415f554e49535741505f56335f554e495f50524f585900000000000060448201529192506000916001600160a01b039091169063bf40fac190606401613230565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac1906133c39060040161499e565b602060405180830381865afa1580156133e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340491906148a1565b6040805160018082528183019092529192508491600091816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161342057505060408051600180825281830190925291925060009190602082015b60408051606081018252600080825260208083018290529282015282526000199092019101816134675790505090506000876001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350491906148a1565b6001600160a01b03161490506000886001600160a01b0316856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561355a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357e91906148a1565b6001600160a01b031614905081806135935750805b6135df5760405162461bcd60e51b815260206004820152601b60248201527f21696e70757420746f6b656e206e6f7420756e6465726c79696e6700000000006044820152606401610479565b846001600160a01b03166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561361d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364191906149ef565b846000815181106136545761365461488b565b60200260200101516040019015159081151581525050846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136cc91906148a1565b846000815181106136df576136df61488b565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376591906148a1565b846000815181106137785761377861488b565b6020026020010151602001906001600160a01b031690816001600160a01b031681525050846001600160a01b03166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fe91906149ef565b836000815181106138115761381161488b565b60200260200101516040019015159081151581525050846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388991906148a1565b8360008151811061389c5761389c61488b565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392291906148a1565b836000815181106139355761393561488b565b6020026020010151602001906001600160a01b031690816001600160a01b0316815250505050838383836040516020016139729493929190614d66565b60405160208183030381529060405294505050505092915050565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f29190614da4565b60ff1690506012811115613a2557613a0b601282614931565b613a1690600a614eab565b613a209085614948565b613a45565b613a30816012614931565b613a3b90600a614eab565b613a459085614912565b949350505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613a9d57602002820191906000526020600020905b815481526020019060010190808311613a89575b50505050509050919050565b6000613afe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166142329092919063ffffffff16565b8051909150156118b05780806020019051810190613b1c91906149ef565b6118b05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610479565b6000806000613bd8856310badf4e60e01b898988604051602401613ba193929190614eb7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614241565b905080806020019051810190613bee9190614ede565b925092505094509492505050565b60025460405163bf40fac160e01b815260206004820152601260248201527124aab734b9bbb0b82b192937baba32b9181960711b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613c68573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c591906148a1565b6001600160a01b038083166000908152600e60209081526040808320858516845290915281205490911680613ce557506001600160a01b038083166000908152600e602090815260408083208785168452909152902054165b6001600160a01b03811615613cfb5790506103c5565b60025460405163bf40fac160e01b81526020600482015260116024820152702aa724a9aba0a82fab19afa927aaaa22a960791b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8991906148a1565b9150506103c5565b6000805b8351811015613dec57826001600160a01b0316848281518110613dba57613dba61488b565b60200260200101516001600160a01b03161415613dda57829150506103c5565b80613de4816148be565b915050613d95565b5060025460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac190613e1c90600401614b89565b602060405180830381865afa158015613e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5d91906148a1565b905060005b8451811015613eb857816001600160a01b0316858281518110613e8757613e8761488b565b60200260200101516001600160a01b03161415613ea6575090506103c5565b80613eb0816148be565b915050613e62565b5060025460405163bf40fac160e01b815260206004820152600b60248201526a39ba30b13632aa37b5b2b760a91b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4291906148a1565b905060005b8551811015613f9f57816001600160a01b0316868281518110613f6c57613f6c61488b565b60200260200101516001600160a01b03161415613f8d575091506103c59050565b80613f97816148be565b915050613f47565b5060025460405163bf40fac160e01b81526020600482015260096024820152683ba12a21aa37b5b2b760b91b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015614003573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402791906148a1565b905060005b865181101561408557816001600160a01b03168782815181106140515761405161488b565b60200260200101516001600160a01b03161415614073575092506103c5915050565b8061407d816148be565b91505061402c565b50856000815181106140995761409961488b565b6020026020010151935050505092915050565b606060005b60405163c661065760e01b815260ff821660048201526001600160a01b0384169063c661065790602401602060405180830381865afa925050508015614114575060408051601f3d908101601f19168201909252614111918101906148a1565b60015b61411d57614130565b5080614128816148d9565b9150506140b1565b8060ff1667ffffffffffffffff81111561414c5761414c6146b2565b604051908082528060200260200182016040528015614175578160200160208202803683370190505b50915060005b8160ff1681101561422b5760405163c661065760e01b8152600481018290526001600160a01b0385169063c661065790602401602060405180830381865afa1580156141cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ef91906148a1565b8382815181106142015761420161488b565b6001600160a01b039092166020928302919091019091015280614223816148be565b91505061417b565b5050919050565b6060613a458484600085614335565b60606001600160a01b0383163b6142a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610479565b600080846001600160a01b0316846040516142c49190614982565b600060405180830381855af49150503d80600081146142ff576040519150601f19603f3d011682016040523d82523d6000602084013e614304565b606091505b509150915061432c8282604051806060016040528060278152602001614f2060279139614410565b95945050505050565b6060824710156143965760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610479565b600080866001600160a01b031685876040516143b29190614982565b60006040518083038185875af1925050503d80600081146143ef576040519150601f19603f3d011682016040523d82523d6000602084013e6143f4565b606091505b509150915061440587838387614449565b979650505050505050565b6060831561441f575081610426565b82511561442f5782518084602001fd5b8160405162461bcd60e51b81526004016104799190614f0c565b606083156144b55782516144ae576001600160a01b0385163b6144ae5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610479565b5081613a45565b613a4583838151156144ca5781518083602001fd5b8060405162461bcd60e51b81526004016104799190614f0c565b6001600160a01b03811681146104f957600080fd5b6000806040838503121561450c57600080fd5b8235614517816144e4565b91506020830135614527816144e4565b809150509250929050565b60006020828403121561454457600080fd5b8135610426816144e4565b600081518084526020808501945080840160005b838110156145885781516001600160a01b031687529582019590820190600101614563565b509495945050505050565b602081526000610426602083018461454f565b6000806000606084860312156145bb57600080fd5b83356145c6816144e4565b92506020840135915060408401356145dd816144e4565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561462a5783516001600160e01b03191683529284019291840191600101614604565b50909695505050505050565b60005b83811015614651578181015183820152602001614639565b838111156116b85750506000910152565b6000815180845261467a816020860160208601614636565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090613a4590830184614662565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146eb576146eb6146b2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561471a5761471a6146b2565b604052919050565b6000602080838503121561473557600080fd5b823567ffffffffffffffff8082111561474d57600080fd5b818501915085601f83011261476157600080fd5b813581811115614773576147736146b2565b614785601f8201601f191685016146f1565b9150808252868482850101111561479b57600080fd5b8084840185840137600090820190930192909252509392505050565b604080825283519082018190526000906020906060840190828701845b828110156147f95781516001600160a01b0316845292840192908401906001016147d4565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561484957601f19868403018552614837838351614662565b9487019492509086019060010161481b565b50909998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b600060ff82168061488157614881614858565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156148b357600080fd5b8151610426816144e4565b60006000198214156148d2576148d2614858565b5060010190565b600060ff821660ff8114156148f0576148f0614858565b60010192915050565b60006020828403121561490b57600080fd5b5051919050565b600081600019048311821515161561492c5761492c614858565b500290565b60008282101561494357614943614858565b500390565b60008261496557634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561497d5761497d614858565b500190565b60008251614994818460208701614636565b9190910192915050565b60208082526013908201527229a7a624a2262cafa9aba0a82fa927aaaa22a960691b604082015260600190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b600060208284031215614a0157600080fd5b8151801515811461042657600080fd5b60008060408385031215614a2457600080fd5b505080516020909101519092909150565b6001600160a01b038381168252604060208084018290528451918401829052600092858201929091906060860190855b81811015614a83578551851683529483019491830191600101614a65565b509098975050505050505050565b6001600160a01b0384168152606060208201819052600090614ab59083018561454f565b8281036040840152614ac7818561454f565b9695505050505050565b600067ffffffffffffffff821115614aeb57614aeb6146b2565b5060051b60200190565b60006020808385031215614b0857600080fd5b825167ffffffffffffffff811115614b1f57600080fd5b8301601f81018513614b3057600080fd5b8051614b43614b3e82614ad1565b6146f1565b81815260059190911b82018301908381019087831115614b6257600080fd5b928401925b82841015614405578351614b7a816144e4565b82529284019290840190614b67565b6020808252600690820152653bba37b5b2b760d11b604082015260600190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60208082526021908201527f43757276654c70546f6b656e50726963654f7261636c654e6f526567697374726040820152607960f81b606082015260800190565b60006020808385031215614c2057600080fd5b825167ffffffffffffffff811115614c3757600080fd5b8301601f81018513614c4857600080fd5b8051614c56614b3e82614ad1565b81815260079190911b82018301908381019087831115614c7557600080fd5b928401925b828410156144055760808489031215614c935760008081fd5b614c9b6146c8565b8451614ca6816144e4565b815284860151614cb5816144e4565b81870152604085810151614cc8816144e4565b9082015260608581015190820152825260809093019290840190614c7a565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b600081518084526020808501945080840160005b8381101561458857815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101614d26565b6001600160a01b03858116825284166020820152608060408201819052600090614d9290830185614d12565b82810360608401526144058185614d12565b600060208284031215614db657600080fd5b815160ff8116811461042657600080fd5b600181815b80851115614e02578160001904821115614de857614de8614858565b80851615614df557918102915b93841c9390800290614dcc565b509250929050565b600082614e19575060016103c5565b81614e26575060006103c5565b8160018114614e3c5760028114614e4657614e62565b60019150506103c5565b60ff841115614e5757614e57614858565b50506001821b6103c5565b5060208310610133831016604e8410600b8410161715614e85575081810a6103c5565b614e8f8383614dc7565b8060001904821115614ea357614ea3614858565b029392505050565b60006104268383614e0a565b60018060a01b038416815282602082015260606040820152600061432c6060830184614662565b60008060408385031215614ef157600080fd5b8251614efc816144e4565b6020939093015192949293505050565b602081526000610426602083018461466256fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000a", + "sourceMap": "1211:27421:238:-:0;;;;;;;;;;;;-1:-1:-1;936:32:470;719:10:484;936:18:470;:32::i;:::-;1211:27421:238;;1496:153:471;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;1211:27421:238:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061012c5760003560e01c8063a6fdd2bb116100ad578063e30c397811610071578063e30c39781461031f578063ed287f3f14610330578063f2fde38b14610351578063f560cebd14610364578063f97595181461038c57600080fd5b8063a6fdd2bb1461025a578063a700f9e414610262578063b6b928fd14610296578063c8ff6fee146102b7578063dee7fe48146102eb57600080fd5b8063715018a6116100f4578063715018a6146101f957806379ba50971461020357806389f8132e1461020b5780638da5cb5b146102205780638db87c271461023157600080fd5b80632f53ef2b14610131578063398cd955146101575780633c4f743c1461019b578063403de57f146101c65780636d069a67146101e6575b600080fd5b61014461013f3660046144f9565b610395565b6040519081526020015b60405180910390f35b6101876101653660046144f9565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff909116815260200161014e565b6002546101ae906001600160a01b031681565b6040516001600160a01b03909116815260200161014e565b6101d96101d4366004614532565b6103cb565b60405161014e9190614593565b6101446101f43660046145a6565b6103ef565b61020161042d565b005b610201610482565b6102136104fc565b60405161014e91906145e8565b6000546001600160a01b03166101ae565b6101ae61023f366004614532565b6007602052600090815260409020546001600160a01b031681565b6101d961073d565b6101ae6102703660046144f9565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6102a96102a43660046144f9565b61074e565b60405161014e92919061468e565b6101ae6102c53660046144f9565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b6101ae6102f9366004614722565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6001546001600160a01b03166101ae565b61034361033e3660046144f9565b610eeb565b60405161014e9291906147b7565b61020161035f366004614532565b611264565b6103776103723660046145a6565b6112d5565b6040805192835260208301919091520161014e565b61014461038481565b6001600160a01b038083166000908152600b6020908152604080832093851683529290522054806103c557506103845b92915050565b6001600160a01b03811660009081526008602052604090206060906103c590611640565b60006104066001600160a01b03851633308661164d565b61041084836116be565b90506104266001600160a01b0383163383611880565b9392505050565b6104356118b5565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f776564000060448201526064015b60405180910390fd5b60015433906001600160a01b031681146104f05760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610479565b6104f981611911565b50565b604080516007808252610100820190925260609190600090826020820160e08036833701905050905063ed287f3f60e01b816105378461486e565b93508360ff168151811061054d5761054d61488b565b6001600160e01b03199092166020928302919091019091015263b6b928fd60e01b816105788461486e565b93508360ff168151811061058e5761058e61488b565b6001600160e01b03199092166020928302919091019091015263403de57f60e01b816105b98461486e565b93508360ff16815181106105cf576105cf61488b565b6001600160e01b031990921660209283029190910190910152636d069a6760e01b816105fa8461486e565b93508360ff16815181106106105761061061488b565b6001600160e01b03199092166020928302919091019091015263a6fdd2bb60e01b8161063b8461486e565b93508360ff16815181106106515761065161488b565b6001600160e01b03199092166020928302919091019091015263f560cebd60e01b8161067c8461486e565b93508360ff16815181106106925761069261488b565b6001600160e01b031990921660209283029190910190910152632f53ef2b60e01b816106bd8461486e565b93508360ff16815181106106d3576106d361488b565b6001600160e01b03199092166020928302919091019091015260ff8216156103c55760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610479565b60606107496003611640565b905090565b6001600160a01b0380831660009081526006602090815260408083208585168452825291829020548251808401909352601583527429b7b634b2363ca9bbb0b82634b8bab4b230ba37b960591b91830191909152909116906060906107b490839061192a565b156107ca576107c38484611974565b9050610ee4565b610809826040518060400160405280601881526020017f536f6c69646c794c70546f6b656e4c697175696461746f72000000000000000081525061192a565b15610818576107c38484611e45565b610857826040518060400160405280601981526020017f556e697377617056324c697175696461746f7246756e6465720000000000000081525061192a565b806108915750610891826040518060400160405280601281526020017125b4b6aab734ab192634b8bab4b230ba37b960711b81525061192a565b156108a0576107c38484612050565b6108df826040518060400160405280601981526020017f556e697377617056334c697175696461746f7246756e6465720000000000000081525061192a565b156108ee576107c384846120f8565b610925826040518060400160405280601581526020017420b633b2b13930a9bbb0b82634b8bab4b230ba37b960591b81525061192a565b15610a175760004661868b1415610951575073ac48fcf1049668b285f3dc72483df5ae2162f7e86109e4565b60025460405163bf40fac160e01b815260206004820152601360248201527220a623a2a12920afa9aba0a82fa927aaaa22a960691b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156109bd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109e191906148a1565b90505b604080516001600160a01b0380871660208301528316818301528151808203830181526060909101909152915050610ee4565b610a56826040518060400160405280601d81526020017f47616d6d61416c67656272614c70546f6b656e4c697175696461746f7200000081525061192a565b15610a65576107c38484612252565b610aa4826040518060400160405280601f81526020017f47616d6d61556e697377617056334c70546f6b656e4c697175696461746f720081525061192a565b15610ab3576107c38484612325565b610aeb82604051806040016040528060168152602001752130b630b731b2b929bbb0b82634b8bab4b230ba37b960511b81525061192a565b15610afa576107c38484612388565b610b39826040518060400160405280601881526020017f556e69737761704c70546f6b656e4c697175696461746f72000000000000000081525061192a565b80610b755750610b75826040518060400160405280601481526020017323b2b630ba37a3aab734a634b8bab4b230ba37b960611b81525061192a565b15610b84576107c38484612494565b610bc3826040518060400160405280601781526020017f536164646c654c70546f6b656e4c697175696461746f7200000000000000000081525061192a565b15610bd2576107c3848461275a565b610c11826040518060400160405280602081526020017f43757276654c70546f6b656e4c697175696461746f724e6f526567697374727981525061192a565b15610c20576107c38484612939565b610c55826040518060400160405280601381526020017221bab93b32a9bbb0b82634b8bab4b230ba37b960691b81525061192a565b15610c64576107c38484612b1d565b610c99826040518060400160405280601381526020017221bab93b32a6382a37b5b2b72bb930b83832b960691b81525061192a565b15610ca8576107c38484612d0a565b610ce082604051806040016040528060168152602001752530b93b34b9a634b8bab4b230ba37b9233ab73232b960511b81525061192a565b15610cef576107c38484612db1565b610d2682604051806040016040528060158152602001742c2137b6b12634b8bab4b230ba37b9233ab73232b960591b81525061192a565b15610d35576107c38484612f49565b610d74826040518060400160405280601981526020017f42616c616e6365724c70546f6b656e4c697175696461746f720000000000000081525061192a565b15610d83576107c38484613118565b610db8826040518060400160405280601381526020017220b0bb32aa37b5b2b72634b8bab4b230ba37b960691b81525061192a565b15610dc7576107c38484613118565b610e06826040518060400160405280601a81526020017f47616d6d61416c67656272614c70546f6b656e5772617070657200000000000081525061192a565b15610e15576107c38484613134565b610e54826040518060400160405280601c81526020017f47616d6d61556e697377617056334c70546f6b656e577261707065720000000081525061192a565b15610e63576107c3848461328b565b610e9a826040518060400160405280601581526020017429b7b634b2363ca6382a37b5b2b72bb930b83832b960591b81525061192a565b15610ea9576107c3848461338f565b60405162461bcd60e51b815260206004820152601060248201526f6e6f207374726174656779206461746160801b6044820152606401610479565b9250929050565b60408051600a80825261016082019092526060918291859185916000916020820161014080368337505060408051600a80825261016082019092529293506000929150602082015b6060815260200190600190039081610f3357505060408051600a808252610160820190925291925060009190602082016101408036833701905050905060005b846001600160a01b0316866001600160a01b031614611112576001600160a01b03808716600090815260066020908152604080832089851684529091528120549091168015610fc457869150610fe2565b6001600160a01b038089166000908152600760205260409020541691505b60005b8451811015611038578481815181106110005761100061488b565b60200260200101516001600160a01b0316836001600160a01b0316141561102657611038565b80611030816148be565b915050610fe5565b506000806110468a8561074e565b90925090506001600160a01b0382166110625750505050611112565b818886815181106110755761107561488b565b60200260200101906001600160a01b031690816001600160a01b031681525050808786815181106110a8576110a861488b565b6020026020010181905250838686815181106110c6576110c661488b565b60200260200101906001600160a01b031690816001600160a01b03168152505083995084806110f4906148be565b95505084600a14156111095750505050611112565b50505050610f73565b8067ffffffffffffffff81111561112b5761112b6146b2565b604051908082528060200260200182016040528015611154578160200160208202803683370190505b5097508067ffffffffffffffff811115611170576111706146b2565b6040519080825280602002602001820160405280156111a357816020015b606081526020019060019003908161118e5790505b50965060005b818160ff16101561125657848160ff16815181106111c9576111c961488b565b6020026020010151898260ff16815181106111e6576111e661488b565b60200260200101906001600160a01b031690816001600160a01b031681525050838160ff168151811061121b5761121b61488b565b6020026020010151888260ff16815181106112385761123861488b565b6020026020010181905250808061124e906148d9565b9150506111a9565b505050505050509250929050565b61126c6118b5565b600180546001600160a01b0383166001600160a01b0319909116811790915561129d6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080836112e8575060009050806115e8565b6112f38585856103ef565b915081611305575060009050806115e8565b60025460405163bf40fac160e01b81526020600482015260116024820152704d617374657250726963654f7261636c6560781b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015611370573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061139491906148a1565b6040516315d5220f60e31b81526001600160a01b03888116600483015291925060009183169063aea9107890602401602060405180830381865afa1580156113e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061140491906148f9565b6040516315d5220f60e31b81526001600160a01b03878116600483015291925060009184169063aea9107890602401602060405180830381865afa158015611450573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061147491906148f9565b90506000611482838a61398d565b61148c9089614912565b9050600061149a838961398d565b6114a49088614912565b9050818110156114d257816114b98282614931565b6114c590612710614912565b6114cf9190614948565b95505b6114dd60018761496a565b6001600160a01b03808c166000908152600b60209081526040808320938d168352929052205490965080158061154457506001600160a01b03808c166000908152600c60209081526040808320938d1683529290522054611388906115429042614931565b115b156115e157886001600160a01b03168b6001600160a01b03167f5d4661f2f390321d7ed6695cf1f19cd360bafab39b6dc6e06e5b48f1653486a1838a604051611597929190918252602082015260400190565b60405180910390a36001600160a01b03808c166000818152600b60209081526040808320948e168084529482528083208c9055928252600c81528282209382529290925290204290555b5050505050505b935093915050565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b6060600061042683613a4d565b6040516001600160a01b03808516602483015283166044820152606481018290526116b89085906323b872dd60e01b906084015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613aa9565b50505050565b6040516370a0823160e01b815230600482015260009081906001600160a01b038516906370a0823190602401602060405180830381865afa158015611707573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061172b91906148f9565b905060008061173a8686610eeb565b9150915081516000141561176157604051631aa27a4d60e21b815260040160405180910390fd5b858360005b84518110156117d95760008582815181106117835761178361488b565b6020026020010151905060008583815181106117a1576117a161488b565b602002602001015190506000806117ba87878686613b7b565b90975095508493506117d192508391506148be9050565b915050611766565b50866001600160a01b0316826001600160a01b03161461180c5760405163fdbb00c560e01b815260040160405180910390fd5b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611850573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061187491906148f9565b98975050505050505050565b6040516001600160a01b0383166024820152604481018290526118b090849063a9059cbb60e01b90606401611681565b505050565b6000546001600160a01b0316331461190f5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610479565b565b600180546001600160a01b03191690556104f9816115f0565b60006001600160a01b03831615801590610426575060058260405161194f9190614982565b908152604051908190036020019020546001600160a01b038481169116149392505050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac1906119a89060040161499e565b602060405180830381865afa1580156119c5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e991906148a1565b60405163260f701f60e11b815290915083906000906001600160a01b03841690634c1ee03e90611a21908990869086906004016149cb565b602060405180830381865afa158015611a3e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a6291906148a1565b90506000836001600160a01b0316634c1ee03e888560016040518463ffffffff1660e01b8152600401611a97939291906149cb565b602060405180830381865afa158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad891906148a1565b60405163e5e31b1360e01b81526001600160a01b0380831660048301529192509085169063e5e31b1390602401602060405180830381865afa158015611b22573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b4691906149ef565b80611bb6575060405163e5e31b1360e01b81526001600160a01b03838116600483015285169063e5e31b1390602401602060405180830381865afa158015611b92573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611bb691906149ef565b611c0e5760405162461bcd60e51b8152602060048201526024808201527f496e76616c696420536f6c69646c794c697175696461746f722073776170207060448201526330ba341760e11b6064820152608401610479565b60405163e5e31b1360e01b81526001600160a01b0382811660048301526000919086169063e5e31b1390602401602060405180830381865afa158015611c58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c7c91906149ef565b611c8857506000611e14565b60405163e5e31b1360e01b81526001600160a01b03848116600483015286169063e5e31b1390602401602060405180830381865afa158015611cce573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf291906149ef565b611cfe57506001611e14565b600080866001600160a01b0316635e60dab58b8860016040518463ffffffff1660e01b8152600401611d32939291906149cb565b6040805180830381865afa158015611d4e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611d729190614a11565b91509150600080886001600160a01b0316635e60dab58d8a60006040518463ffffffff1660e01b8152600401611daa939291906149cb565b6040805180830381865afa158015611dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611dea9190614a11565b915091508184118015611dfc57508083115b15611e0a5760019450611e0f565b600094505b505050505b848782604051602001611e29939291906149cb565b6040516020818303038152906040529550505050505092915050565b60606000839050806001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611eae91906148a1565b6001600160a01b0316836001600160a01b03161480611f3f5750806001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015611f06573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f2a91906148a1565b6001600160a01b0316836001600160a01b0316145b611faa5760405162461bcd60e51b815260206004820152603660248201527f4f757470757420746f6b656e20646f6573206e6f74206d6174636820656974686044820152756572206f6620746865207061697220746f6b656e732160501b6064820152608401610479565b60025460405163bf40fac160e01b81526001600160a01b039091169063bf40fac190611fd89060040161499e565b602060405180830381865afa158015611ff5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061201991906148a1565b604080516001600160a01b039283166020820152918516908201526060015b60405160208183030381529060405291505092915050565b6040805160028082526060808301845292600092919060208301908036833701905050905083816000815181106120895761208961488b565b60200260200101906001600160a01b031690816001600160a01b03168152505082816001815181106120bd576120bd61488b565b60200260200101906001600160a01b031690816001600160a01b0316815250506120e684613bfc565b81604051602001612038929190614a35565b6001600160a01b038083166000908152600d602090815260408083209385168352929052205460609062ffffff168061215857506001600160a01b038083166000908152600d602090815260408083209387168352929052205462ffffff165b62ffffff811661216757506101f45b60006121738585613c8c565b60025460405163bf40fac160e01b815260206004820152600660248201526528bab7ba32b960d11b604482015291925086918691859185916001600160a01b03169063bf40fac190606401602060405180830381865afa1580156121db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121ff91906148a1565b604080516001600160a01b0396871660208201529486169085015262ffffff9092166060840152831660808301529190911660a082015260c0016040516020818303038152906040529250505092915050565b60025460405163bf40fac160e01b815260206004820152601960248201527823a0a6a6a0afa0a623a2a12920afa9aba0a82fa927aaaa22a960391b604482015260609183916001600160a01b039091169063bf40fac1906064015b602060405180830381865afa1580156122ca573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ee91906148a1565b604080516001600160a01b03938416602082015292909116908201526060015b604051602081830303815290604052905092915050565b60025460405163bf40fac160e01b815260206004820152601c60248201527f47414d4d415f554e49535741505f56335f535741505f524f5554455200000000604482015260609183916001600160a01b039091169063bf40fac1906064016122ad565b60025460405163959fc09760e01b81526001600160a01b038481166004830152838116602483015260609260009291169063959fc09790604401602060405180830381865afa1580156123df573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061240391906148a1565b90506001600160a01b03811661246f5760405162461bcd60e51b815260206004820152602b60248201527f4e6f2062616c616e63657220706f6f6c20666f756e6420666f7220746865206760448201526a6976656e20746f6b656e7360a81b6064820152608401610479565b604080516001600160a01b038086166020830152831691810191909152606001612038565b606060008390506000816001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906124ff91906148a1565b90506000826001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015612541573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256591906148a1565b90506001600160a01b0385811681841681149183161481806125845750805b6125ee5760405162461bcd60e51b815260206004820152603560248201527f4f757470757420746f6b656e20646f6573206e6f74206d6174636820656974686044820152746572206f6620746865207061697220746f6b656e7360581b6064820152608401610479565b606080831561268e5760408051600081526002602082018181526080830184529194509091848101908036833701905050905084816000815181106126355761263561488b565b60200260200101906001600160a01b031690816001600160a01b03168152505085816001815181106126695761266961488b565b60200260200101906001600160a01b031690816001600160a01b03168152505061271f565b5060408051600081526002602082018181526080830184529192838101908036833701905050915085826000815181106126ca576126ca61488b565b60200260200101906001600160a01b031690816001600160a01b03168152505084826001815181106126fe576126fe61488b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b6127288a613bfc565b828260405160200161273c93929190614a91565b60405160208183030381529060405297505050505050505092915050565b60025460405163bf40fac160e01b8152602060048201526013602482015272536164646c654c7050726963654f7261636c6560681b60448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156127cc573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127f091906148a1565b60405163195b70b960e21b81526001600160a01b03868116600483015291925060009183169063656dc2e490602401600060405180830381865afa15801561283c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526128649190810190614af5565b60025460405163bf40fac160e01b81529192506000916001600160a01b039091169063bf40fac19061289890600401614b89565b602060405180830381865afa1580156128b5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128d991906148a1565b905060006128e78387613d91565b9050806001600160a01b038116158061291c575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038316145b156129245750815b818584604051602001611e2993929190614ba9565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac19061296d90600401614bcc565b602060405180830381865afa15801561298a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906129ae91906148a1565b60405163988b1fa760e01b81526001600160a01b03868116600483015291925060009183169063988b1fa790602401602060405180830381865afa1580156129fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a1e91906148a1565b90506000612a2b826140ac565b90506000612a398287613d91565b60025460405163bf40fac160e01b815291925082916000916001600160a01b03169063bf40fac190612a6d90600401614b89565b602060405180830381865afa158015612a8a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612aae91906148a1565b90506001600160a01b0383161580612ae2575073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee6001600160a01b038416145b15612aeb578091505b828187604051602001612b0093929190614ba9565b604051602081830303815290604052965050505050505092915050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac190612b5190600401614bcc565b602060405180830381865afa158015612b6e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b9291906148a1565b60025460405163bf40fac160e01b815260206004820152602360248201527f437572766556324c70546f6b656e50726963654f7261636c654e6f526567697360448201526274727960e81b60648201529192506000916001600160a01b039091169063bf40fac190608401602060405180830381865afa158015612c1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c3e91906148a1565b60025460405163bf40fac160e01b81529192506000916001600160a01b039091169063bf40fac190612c7290600401614b89565b602060405180830381865afa158015612c8f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612cb391906148a1565b604080516001600160a01b038087166020830152808616928201929092528189166060820152818816608082015290821660a082015290915060c0015b604051602081830303815290604052935050505092915050565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac190612d3e90600401614bcc565b602060405180830381865afa158015612d5b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612d7f91906148a1565b60405163988b1fa760e01b81526001600160a01b0385811660048301529192509082169063988b1fa790602401611fd8565b60606000600260009054906101000a90046001600160a01b03166001600160a01b03166377d792196040518163ffffffff1660e01b8152600401600060405180830381865afa158015612e08573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612e309190810190614c0d565b905060005b8151811015612f41576000828281518110612e5257612e5261488b565b60200260200101519050856001600160a01b031681600001516001600160a01b03161415612ebe57805160408083015160609384015182516001600160a01b03948516602082015293909116838301528284015280518083039093018352608090910190529250612f41565b856001600160a01b031681602001516001600160a01b03161415612f2e57806020015181604001518260600151604051602001612f1c939291906001600160a01b039384168152919092166020820152604081019190915260600190565b60405160208183030381529060405293505b5080612f39816148be565b915050612e35565b505092915050565b60604660381415612fad5760405173af16cb45b8149da403af41c63abfebfbcd16264b9073522348779dcb2911539e76a1042aa922f9c47ee390612f9590869084908490602001614ba9565b604051602081830303815290604052925050506103c5565b73e45589fbad3a1fb90f5b2a8a3e8958a8bab5f768734f1885d25ef219d3d4fa064809d6d4985fab9a0b738870f7102f1dcb1c35b01af10f1baf1b00ad6805733d312b224dec414fe865e1e9bfc13e2a86947d19738146293bf5225b471625372e985fdb7165c35fe26001600160a01b038816851415613095576000846001600160a01b0316886001600160a01b0316141561304a575081613067565b836001600160a01b0316886001600160a01b031614156130675750805b8081898a60405160200161307e9493929190614ce7565b60405160208183030381529060405296505061310d565b836001600160a01b0316886001600160a01b031614156130dc57878289876040516020016130c69493929190614ce7565b604051602081830303815290604052955061310d565b826001600160a01b0316886001600160a01b0316141561310d5787818987604051602001611e299493929190614ce7565b505050505092915050565b604080516001600160a01b03831660208201526060910161230e565b60025460405163bf40fac160e01b815260206004820152601960248201527823a0a6a6a0afa0a623a2a12920afa9aba0a82fa927aaaa22a960391b60448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa1580156131ac573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906131d091906148a1565b60025460405163bf40fac160e01b815260206004820152601760248201527f47414d4d415f414c47454252415f554e495f50524f585900000000000000000060448201529192506000916001600160a01b039091169063bf40fac1906064015b602060405180830381865afa15801561324d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061327191906148a1565b6040519091508490612cf090849084908490602001614ba9565b60025460405163bf40fac160e01b815260206004820152601c60248201527f47414d4d415f554e49535741505f56335f535741505f524f555445520000000060448201526060916000916001600160a01b039091169063bf40fac190606401602060405180830381865afa158015613307573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061332b91906148a1565b60025460405163bf40fac160e01b815260206004820152601a60248201527f47414d4d415f554e49535741505f56335f554e495f50524f585900000000000060448201529192506000916001600160a01b039091169063bf40fac190606401613230565b60025460405163bf40fac160e01b81526060916000916001600160a01b039091169063bf40fac1906133c39060040161499e565b602060405180830381865afa1580156133e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061340491906148a1565b6040805160018082528183019092529192508491600091816020015b604080516060810182526000808252602080830182905292820152825260001990920191018161342057505060408051600180825281830190925291925060009190602082015b60408051606081018252600080825260208083018290529282015282526000199092019101816134675790505090506000876001600160a01b0316846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156134e0573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061350491906148a1565b6001600160a01b03161490506000886001600160a01b0316856001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa15801561355a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061357e91906148a1565b6001600160a01b031614905081806135935750805b6135df5760405162461bcd60e51b815260206004820152601b60248201527f21696e70757420746f6b656e206e6f7420756e6465726c79696e6700000000006044820152606401610479565b846001600160a01b03166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa15801561361d573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061364191906149ef565b846000815181106136545761365461488b565b60200260200101516040019015159081151581525050846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156136a8573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906136cc91906148a1565b846000815181106136df576136df61488b565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613741573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061376591906148a1565b846000815181106137785761377861488b565b6020026020010151602001906001600160a01b031690816001600160a01b031681525050846001600160a01b03166322be3de16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156137da573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906137fe91906149ef565b836000815181106138115761381161488b565b60200260200101516040019015159081151581525050846001600160a01b031663d21220a76040518163ffffffff1660e01b8152600401602060405180830381865afa158015613865573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061388991906148a1565b8360008151811061389c5761389c61488b565b6020026020010151600001906001600160a01b031690816001600160a01b031681525050846001600160a01b0316630dfe16816040518163ffffffff1660e01b8152600401602060405180830381865afa1580156138fe573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061392291906148a1565b836000815181106139355761393561488b565b6020026020010151602001906001600160a01b031690816001600160a01b0316815250505050838383836040516020016139729493929190614d66565b60405160208183030381529060405294505050505092915050565b600080826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156139ce573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906139f29190614da4565b60ff1690506012811115613a2557613a0b601282614931565b613a1690600a614eab565b613a209085614948565b613a45565b613a30816012614931565b613a3b90600a614eab565b613a459085614912565b949350505050565b606081600001805480602002602001604051908101604052809291908181526020018280548015613a9d57602002820191906000526020600020905b815481526020019060010190808311613a89575b50505050509050919050565b6000613afe826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166142329092919063ffffffff16565b8051909150156118b05780806020019051810190613b1c91906149ef565b6118b05760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610479565b6000806000613bd8856310badf4e60e01b898988604051602401613ba193929190614eb7565b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152614241565b905080806020019051810190613bee9190614ede565b925092505094509492505050565b60025460405163bf40fac160e01b815260206004820152601260248201527124aab734b9bbb0b82b192937baba32b9181960711b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613c68573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103c591906148a1565b6001600160a01b038083166000908152600e60209081526040808320858516845290915281205490911680613ce557506001600160a01b038083166000908152600e602090815260408083208785168452909152902054165b6001600160a01b03811615613cfb5790506103c5565b60025460405163bf40fac160e01b81526020600482015260116024820152702aa724a9aba0a82fab19afa927aaaa22a960791b60448201526001600160a01b039091169063bf40fac190606401602060405180830381865afa158015613d65573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613d8991906148a1565b9150506103c5565b6000805b8351811015613dec57826001600160a01b0316848281518110613dba57613dba61488b565b60200260200101516001600160a01b03161415613dda57829150506103c5565b80613de4816148be565b915050613d95565b5060025460405163bf40fac160e01b81526000916001600160a01b03169063bf40fac190613e1c90600401614b89565b602060405180830381865afa158015613e39573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613e5d91906148a1565b905060005b8451811015613eb857816001600160a01b0316858281518110613e8757613e8761488b565b60200260200101516001600160a01b03161415613ea6575090506103c5565b80613eb0816148be565b915050613e62565b5060025460405163bf40fac160e01b815260206004820152600b60248201526a39ba30b13632aa37b5b2b760a91b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015613f1e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613f4291906148a1565b905060005b8551811015613f9f57816001600160a01b0316868281518110613f6c57613f6c61488b565b60200260200101516001600160a01b03161415613f8d575091506103c59050565b80613f97816148be565b915050613f47565b5060025460405163bf40fac160e01b81526020600482015260096024820152683ba12a21aa37b5b2b760b91b60448201526000916001600160a01b03169063bf40fac190606401602060405180830381865afa158015614003573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061402791906148a1565b905060005b865181101561408557816001600160a01b03168782815181106140515761405161488b565b60200260200101516001600160a01b03161415614073575092506103c5915050565b8061407d816148be565b91505061402c565b50856000815181106140995761409961488b565b6020026020010151935050505092915050565b606060005b60405163c661065760e01b815260ff821660048201526001600160a01b0384169063c661065790602401602060405180830381865afa925050508015614114575060408051601f3d908101601f19168201909252614111918101906148a1565b60015b61411d57614130565b5080614128816148d9565b9150506140b1565b8060ff1667ffffffffffffffff81111561414c5761414c6146b2565b604051908082528060200260200182016040528015614175578160200160208202803683370190505b50915060005b8160ff1681101561422b5760405163c661065760e01b8152600481018290526001600160a01b0385169063c661065790602401602060405180830381865afa1580156141cb573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906141ef91906148a1565b8382815181106142015761420161488b565b6001600160a01b039092166020928302919091019091015280614223816148be565b91505061417b565b5050919050565b6060613a458484600085614335565b60606001600160a01b0383163b6142a95760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b6064820152608401610479565b600080846001600160a01b0316846040516142c49190614982565b600060405180830381855af49150503d80600081146142ff576040519150601f19603f3d011682016040523d82523d6000602084013e614304565b606091505b509150915061432c8282604051806060016040528060278152602001614f2060279139614410565b95945050505050565b6060824710156143965760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610479565b600080866001600160a01b031685876040516143b29190614982565b60006040518083038185875af1925050503d80600081146143ef576040519150601f19603f3d011682016040523d82523d6000602084013e6143f4565b606091505b509150915061440587838387614449565b979650505050505050565b6060831561441f575081610426565b82511561442f5782518084602001fd5b8160405162461bcd60e51b81526004016104799190614f0c565b606083156144b55782516144ae576001600160a01b0385163b6144ae5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610479565b5081613a45565b613a4583838151156144ca5781518083602001fd5b8060405162461bcd60e51b81526004016104799190614f0c565b6001600160a01b03811681146104f957600080fd5b6000806040838503121561450c57600080fd5b8235614517816144e4565b91506020830135614527816144e4565b809150509250929050565b60006020828403121561454457600080fd5b8135610426816144e4565b600081518084526020808501945080840160005b838110156145885781516001600160a01b031687529582019590820190600101614563565b509495945050505050565b602081526000610426602083018461454f565b6000806000606084860312156145bb57600080fd5b83356145c6816144e4565b92506020840135915060408401356145dd816144e4565b809150509250925092565b6020808252825182820181905260009190848201906040850190845b8181101561462a5783516001600160e01b03191683529284019291840191600101614604565b50909695505050505050565b60005b83811015614651578181015183820152602001614639565b838111156116b85750506000910152565b6000815180845261467a816020860160208601614636565b601f01601f19169290920160200192915050565b6001600160a01b0383168152604060208201819052600090613a4590830184614662565b634e487b7160e01b600052604160045260246000fd5b6040516080810167ffffffffffffffff811182821017156146eb576146eb6146b2565b60405290565b604051601f8201601f1916810167ffffffffffffffff8111828210171561471a5761471a6146b2565b604052919050565b6000602080838503121561473557600080fd5b823567ffffffffffffffff8082111561474d57600080fd5b818501915085601f83011261476157600080fd5b813581811115614773576147736146b2565b614785601f8201601f191685016146f1565b9150808252868482850101111561479b57600080fd5b8084840185840137600090820190930192909252509392505050565b604080825283519082018190526000906020906060840190828701845b828110156147f95781516001600160a01b0316845292840192908401906001016147d4565b50505083810382850152845180825282820190600581901b8301840187850160005b8381101561484957601f19868403018552614837838351614662565b9487019492509086019060010161481b565b50909998505050505050505050565b634e487b7160e01b600052601160045260246000fd5b600060ff82168061488157614881614858565b6000190192915050565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156148b357600080fd5b8151610426816144e4565b60006000198214156148d2576148d2614858565b5060010190565b600060ff821660ff8114156148f0576148f0614858565b60010192915050565b60006020828403121561490b57600080fd5b5051919050565b600081600019048311821515161561492c5761492c614858565b500290565b60008282101561494357614943614858565b500390565b60008261496557634e487b7160e01b600052601260045260246000fd5b500490565b6000821982111561497d5761497d614858565b500190565b60008251614994818460208701614636565b9190910192915050565b60208082526013908201527229a7a624a2262cafa9aba0a82fa927aaaa22a960691b604082015260600190565b6001600160a01b039384168152919092166020820152901515604082015260600190565b600060208284031215614a0157600080fd5b8151801515811461042657600080fd5b60008060408385031215614a2457600080fd5b505080516020909101519092909150565b6001600160a01b038381168252604060208084018290528451918401829052600092858201929091906060860190855b81811015614a83578551851683529483019491830191600101614a65565b509098975050505050505050565b6001600160a01b0384168152606060208201819052600090614ab59083018561454f565b8281036040840152614ac7818561454f565b9695505050505050565b600067ffffffffffffffff821115614aeb57614aeb6146b2565b5060051b60200190565b60006020808385031215614b0857600080fd5b825167ffffffffffffffff811115614b1f57600080fd5b8301601f81018513614b3057600080fd5b8051614b43614b3e82614ad1565b6146f1565b81815260059190911b82018301908381019087831115614b6257600080fd5b928401925b82841015614405578351614b7a816144e4565b82529284019290840190614b67565b6020808252600690820152653bba37b5b2b760d11b604082015260600190565b6001600160a01b0393841681529183166020830152909116604082015260600190565b60208082526021908201527f43757276654c70546f6b656e50726963654f7261636c654e6f526567697374726040820152607960f81b606082015260800190565b60006020808385031215614c2057600080fd5b825167ffffffffffffffff811115614c3757600080fd5b8301601f81018513614c4857600080fd5b8051614c56614b3e82614ad1565b81815260079190911b82018301908381019087831115614c7557600080fd5b928401925b828410156144055760808489031215614c935760008081fd5b614c9b6146c8565b8451614ca6816144e4565b815284860151614cb5816144e4565b81870152604085810151614cc8816144e4565b9082015260608581015190820152825260809093019290840190614c7a565b6001600160a01b03948516815292841660208401529083166040830152909116606082015260800190565b600081518084526020808501945080840160005b8381101561458857815180516001600160a01b03908116895284820151168489015260409081015115159088015260609096019590820190600101614d26565b6001600160a01b03858116825284166020820152608060408201819052600090614d9290830185614d12565b82810360608401526144058185614d12565b600060208284031215614db657600080fd5b815160ff8116811461042657600080fd5b600181815b80851115614e02578160001904821115614de857614de8614858565b80851615614df557918102915b93841c9390800290614dcc565b509250929050565b600082614e19575060016103c5565b81614e26575060006103c5565b8160018114614e3c5760028114614e4657614e62565b60019150506103c5565b60ff841115614e5757614e57614858565b50506001821b6103c5565b5060208310610133831016604e8410600b8410161715614e85575081810a6103c5565b614e8f8383614dc7565b8060001904821115614ea357614ea3614858565b029392505050565b60006104268383614e0a565b60018060a01b038416815282602082015260606040820152600061432c6060830184614662565b60008060408385031215614ef157600080fd5b8251614efc816144e4565b6020939093015192949293505050565b602081526000610426602083018461466256fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a164736f6c634300080a000a", + "sourceMap": "1211:27421:238:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2514:290;;;;;;:::i;:::-;;:::i;:::-;;;802:25:504;;;790:2;775:18;2514:290:238;;;;;;;;1164:87:240;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1012:8:504;1000:21;;;982:40;;970:2;955:18;1164:87:240;838:190:504;450:27:240;;;;;-1:-1:-1;;;;;450:27:240;;;;;;-1:-1:-1;;;;;1224:32:504;;;1206:51;;1194:2;1179:18;450:27:240;1033:230:504;7446:173:238;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4742:342::-;;;;;;:::i;:::-;;:::i;174:106:139:-;;;:::i;:::-;;1729:206:471;;;:::i;1742:768:238:-;;;:::i;:::-;;;;;;;:::i;1201:85:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;1201:85;;735:73:240;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;735:73:240;;;2808:124:238;;;:::i;616:115:240:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;616:115:240;;;9397:3601:238;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1255:92:240:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1255:92:240;;;540:72;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:72:240;;;842:99:471;921:13;;-1:-1:-1;;;;;921:13:471;842:99;;7623:1770:238;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;1134:178:471:-;;;;;;:::i;:::-;;:::i;2936:1395:238:-;;;;;;:::i;:::-;;:::i;:::-;;;;8322:25:504;;;8378:2;8363:18;;8356:34;;;;8295:18;2936:1395:238;8148:248:504;1689:42:238;;1728:3;1689:42;;2514:290;-1:-1:-1;;;;;2668:30:238;;;2631:16;2668:30;;;:18;:30;;;;;;;;:43;;;;;;;;;;2765:13;2761:38;;-1:-1:-1;1728:3:238;2761:38;2514:290;;;;:::o;7446:173::-;-1:-1:-1;;;;;7568:37:238;;;;;;:24;:37;;;;;7537:16;;7568:46;;:44;:46::i;4742:342::-;4870:20;4898:67;-1:-1:-1;;;;;4898:27:238;;4926:10;4946:4;4953:11;4898:27;:67::i;:::-;4986:37;4999:10;5011:11;4986:12;:37::i;:::-;4971:52;-1:-1:-1;5029:50:238;-1:-1:-1;;;;;5029:24:238;;5054:10;4971:52;5029:24;:50::i;:::-;4742:342;;;;;:::o;174:106:139:-;1094:13:470;:11;:13::i;:::-;235:40:139::1;::::0;-1:-1:-1;;;235:40:139;;8603:2:504;235:40:139::1;::::0;::::1;8585:21:504::0;8642:2;8622:18;;;8615:30;8681:32;8661:18;;;8654:60;8731:18;;235:40:139::1;;;;;;;;1729:206:471::0;921:13;;719:10:484;;-1:-1:-1;;;;;921:13:471;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:471;;8962:2:504;1814:78:471;;;8944:21:504;9001:2;8981:18;;;8974:30;9040:34;9020:18;;;9013:62;-1:-1:-1;;;9091:18:504;;;9084:39;9140:19;;1814:78:471;8760:405:504;1814:78:471;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;1742:768:238:-;1891:22;;;1848:1;1891:22;;;;;;;;;1808:15;;1848:1;1831:14;;1848:1;1891:22;;;;;;;;;;-1:-1:-1;;1855:58:238;-1:-1:-1;;;;1855:58:238;1937:10;;;:::i;:::-;;;;1919:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1919:69:238;;;:29;;;;;;;;;;;:69;-1:-1:-1;;;1994:17:238;2012:10;;;:::i;:::-;;;;1994:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1994:67:238;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;2067:17:238;2085:10;;;:::i;:::-;;;;2067:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2067:73:238;;;:29;;;;;;;;;;;:73;-1:-1:-1;;;2146:17:238;2164:10;;;:::i;:::-;;;;2146:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2146:50:238;;;:29;;;;;;;;;;;:50;-1:-1:-1;;;2202:17:238;2220:10;;;:::i;:::-;;;;2202:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2202:72:238;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;2280:17:238;2298:10;;;:::i;:::-;;;;2280:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2280:72:238;;;:29;;;;;;;;;;;:72;-1:-1:-1;;;2358:17:238;2376:10;;;:::i;:::-;;;;2358:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;2358:57:238;;;:29;;;;;;;;;;;:57;2429:13;;;;2421:54;;;;-1:-1:-1;;;2421:54:238;;9819:2:504;2421:54:238;;;9801:21:504;9858:2;9838:18;;;9831:30;9897;9877:18;;;9870:58;9945:18;;2421:54:238;9617:352:504;2808:124:238;2867:16;2898:29;:20;:27;:29::i;:::-;2891:36;;2808:124;:::o;9397:3601::-;-1:-1:-1;;;;;9598:40:238;;;9522:28;9598:40;;;:28;:40;;;;;;;;:53;;;;;;;;;;;;9662:45;;;;;;;;;;;-1:-1:-1;;;9662:45:238;;;;;;;9598:53;;;;9552:25;;9662:45;;9598:53;;9662:10;:45::i;:::-;9658:3336;;;9732:50;9758:10;9770:11;9732:25;:50::i;:::-;9717:65;;9658:3336;;;9799:48;9810:8;9799:48;;;;;;;;;;;;;;;;;:10;:48::i;:::-;9795:3199;;;9872:53;9901:10;9913:11;9872:28;:53::i;9795:3199::-;9942:49;9953:8;9942:49;;;;;;;;;;;;;;;;;:10;:49::i;:::-;:95;;;;9995:42;10006:8;9995:42;;;;;;;;;;;;;-1:-1:-1;;;9995:42:238;;;:10;:42::i;:::-;9938:3056;;;10062:48;10086:10;10098:11;10062:23;:48::i;9938:3056::-;10127:49;10138:8;10127:49;;;;;;;;;;;;;;;;;:10;:49::i;:::-;10123:2871;;;10201:54;10231:10;10243:11;10201:29;:54::i;10123:2871::-;10272:45;10283:8;10272:45;;;;;;;;;;;;;-1:-1:-1;;;10272:45:238;;;:10;:45::i;:::-;10268:2726;;;10327:18;10357:13;10374:5;10357:22;10353:176;;;-1:-1:-1;10404:42:238;10353:176;;;10484:2;;:36;;-1:-1:-1;;;10484:36:238;;10176:2:504;10484:36:238;;;10158:21:504;10215:2;10195:18;;;10188:30;-1:-1:-1;;;10234:18:504;;;10227:49;-1:-1:-1;;;;;10484:2:238;;;;:13;;10293:18:504;;10484:36:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10471:49;;10353:176;18807:35;;;-1:-1:-1;;;;;16547:15:504;;;18807:35:238;;;16529:34:504;16599:15;;16579:18;;;16572:43;18807:35:238;;;;;;;;;18759:25;16464:18:504;;;18807:35:238;;;10536:77;;10319:301;10268:2726;;;10630:53;10641:8;10630:53;;;;;;;;;;;;;;;;;:10;:53::i;:::-;10626:2368;;;10708:58;10742:10;10754:11;10708:33;:58::i;10626:2368::-;10783:55;10794:8;10783:55;;;;;;;;;;;;;;;;;:10;:55::i;:::-;10779:2215;;;10863:60;10899:10;10911:11;10863:35;:60::i;10779:2215::-;10940:46;10951:8;10940:46;;;;;;;;;;;;;-1:-1:-1;;;10940:46:238;;;:10;:46::i;:::-;10936:2058;;;11011:51;11038:10;11050:11;11011:26;:51::i;10936:2058::-;11079:48;11090:8;11079:48;;;;;;;;;;;;;;;;;:10;:48::i;:::-;:96;;;;11131:44;11142:8;11131:44;;;;;;;;;;;;;-1:-1:-1;;;11131:44:238;;;:10;:44::i;:::-;11075:1919;;;11200:53;11229:10;11241:11;11200:28;:53::i;11075:1919::-;11270:47;11281:8;11270:47;;;;;;;;;;;;;;;;;:10;:47::i;:::-;11266:1728;;;11342:52;11370:10;11382:11;11342:27;:52::i;11266:1728::-;11411:56;11422:8;11411:56;;;;;;;;;;;;;;;;;:10;:56::i;:::-;11407:1587;;;11492:61;11529:10;11541:11;11492:36;:61::i;11407:1587::-;11570:43;11581:8;11570:43;;;;;;;;;;;;;-1:-1:-1;;;11570:43:238;;;:10;:43::i;:::-;11566:1428;;;11638:48;11662:10;11674:11;11638:23;:48::i;11566:1428::-;11703:43;11714:8;11703:43;;;;;;;;;;;;;-1:-1:-1;;;11703:43:238;;;:10;:43::i;:::-;11699:1295;;;11771:48;11795:10;11807:11;11771:23;:48::i;11699:1295::-;11836:46;11847:8;11836:46;;;;;;;;;;;;;-1:-1:-1;;;11836:46:238;;;:10;:46::i;:::-;11832:1162;;;11907:51;11934:10;11946:11;11907:26;:51::i;11832:1162::-;11975:45;11986:8;11975:45;;;;;;;;;;;;;-1:-1:-1;;;11975:45:238;;;:10;:45::i;:::-;11971:1023;;;12045:44;12065:10;12077:11;12045:19;:44::i;11971:1023::-;12106:49;12117:8;12106:49;;;;;;;;;;;;;;;;;:10;:49::i;:::-;12102:892;;;12180:54;12210:10;12222:11;12180:29;:54::i;12102:892::-;12251:43;12262:8;12251:43;;;;;;;;;;;;;-1:-1:-1;;;12251:43:238;;;:10;:43::i;:::-;12247:747;;;12319:43;12338:10;12350:11;12319:18;:43::i;12247:747::-;12379:50;12390:8;12379:50;;;;;;;;;;;;;;;;;:10;:50::i;:::-;12375:619;;;12454:55;12485:10;12497:11;12454:30;:55::i;12375:619::-;12526:52;12537:8;12526:52;;;;;;;;;;;;;;;;;:10;:52::i;:::-;12522:472;;;12603:57;12636:10;12648:11;12603:32;:57::i;12522:472::-;12677:45;12688:8;12677:45;;;;;;;;;;;;;-1:-1:-1;;;12677:45:238;;;:10;:45::i;:::-;12673:321;;;12747:50;12773:10;12785:11;12747:25;:50::i;12673:321::-;12961:26;;-1:-1:-1;;;12961:26:238;;10799:2:504;12961:26:238;;;10781:21:504;10838:2;10818:18;;;10811:30;-1:-1:-1;;;10857:18:504;;;10850:46;10913:18;;12961:26:238;10597:340:504;12673:321:238;9397:3601;;;;;:::o;7623:1770::-;7981:29;;;8007:2;7981:29;;;;;;;;;7750:39;;;;7864:10;;7918:11;;7830:31;;7981:29;;;;;;;;-1:-1:-1;;8052:15:238;;;8064:2;8052:15;;;;;;;;;7935:75;;-1:-1:-1;8016:33:238;;8052:15;-1:-1:-1;8052:15:238;;;;;;;;;;;;;;;;;-1:-1:-1;;8112:27:238;;;8136:2;8112:27;;;;;;;;;8016:51;;-1:-1:-1;8073:36:238;;8112:27;;;;;;;;;;;-1:-1:-1;8112:27:238;8073:66;;8146:9;8165:1006;8189:17;-1:-1:-1;;;;;8172:34:238;:13;-1:-1:-1;;;;;8172:34:238;;8165:1006;;-1:-1:-1;;;;;8296:43:238;;;8216:35;8296:43;;;:28;:43;;;;;;;;:62;;;;;;;;;;;8216:35;;8296:62;8370:37;;8366:240;;8439:17;8419:37;;8366:240;;;-1:-1:-1;;;;;8564:33:238;;;;;;;:18;:33;;;;;;;;-1:-1:-1;8366:240:238;8662:9;8657:110;8681:9;:16;8677:1;:20;8657:110;;;8739:9;8749:1;8739:12;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8718:33:238;:17;-1:-1:-1;;;;;8718:33:238;;8714:44;;;8753:5;;8714:44;8699:3;;;;:::i;:::-;;;;8657:110;;;;8776:28;8806:25;8835:79;8866:13;8889:17;8835:21;:79::i;:::-;8775:139;;-1:-1:-1;8775:139:238;-1:-1:-1;;;;;;8926:31:238;;8922:42;;8959:5;;;;;;8922:42;8993:8;8973:14;8988:1;8973:17;;;;;;;;:::i;:::-;;;;;;:28;-1:-1:-1;;;;;8973:28:238;;;-1:-1:-1;;;;;8973:28:238;;;;;9033:12;9009:18;9028:1;9009:21;;;;;;;;:::i;:::-;;;;;;:36;;;;9068:17;9053:9;9063:1;9053:12;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;9053:32:238;;;-1:-1:-1;;;;;9053:32:238;;;;;9109:17;9093:33;;9135:3;;;;;:::i;:::-;;;;9150:1;9155:2;9150:7;9146:18;;;9159:5;;;;;;9146:18;8208:963;;;;8165:1006;;;9216:1;9190:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9190:28:238;;9177:41;;9253:1;9241:14;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9224:31;;9267:7;9262:127;9284:1;9280;:5;;;9262:127;;;9316:14;9331:1;9316:17;;;;;;;;;;:::i;:::-;;;;;;;9300:10;9311:1;9300:13;;;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;9300:33:238;;;-1:-1:-1;;;;;9300:33:238;;;;;9361:18;9380:1;9361:21;;;;;;;;;;:::i;:::-;;;;;;;9341:14;9356:1;9341:17;;;;;;;;;;:::i;:::-;;;;;;:41;;;;9287:3;;;;;:::i;:::-;;;;9262:127;;;;7824:1569;;;;;;7623:1770;;;;;:::o;1134:178:471:-;1094:13:470;:11;:13::i;:::-;1223::471::1;:24:::0;;-1:-1:-1;;;;;1223:24:471;::::1;-1:-1:-1::0;;;;;;1223:24:471;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::470::0;1273:6;-1:-1:-1;;;;;1273:6:470;;1201:85;1287:7:471::1;-1:-1:-1::0;;;;;1262:43:471::1;;;;;;;;;;;1134:178:::0;:::o;2936:1395:238:-;3088:20;;3138:16;3134:35;;-1:-1:-1;3164:1:238;;-1:-1:-1;3164:1:238;3156:13;;3134:35;3191:42;3196:10;3208:11;3221;3191:4;:42::i;:::-;3176:57;-1:-1:-1;3243:17:238;3239:36;;-1:-1:-1;3270:1:238;;-1:-1:-1;3270:1:238;3262:13;;3239:36;3324:2;;:34;;-1:-1:-1;;;3324:34:238;;11464:2:504;3324:34:238;;;11446:21:504;11503:2;11483:18;;;11476:30;-1:-1:-1;;;11522:18:504;;;11515:47;3282:21:238;;-1:-1:-1;;;;;3324:2:238;;:13;;11579:18:504;;3324:34:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3391:30;;-1:-1:-1;;;3391:30:238;;-1:-1:-1;;;;;1224:32:504;;;3391:30:238;;;1206:51:504;3282:77:238;;-1:-1:-1;3365:23:238;;3391:9;;;;;1179:18:504;;3391:30:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3454:31;;-1:-1:-1;;;3454:31:238;;-1:-1:-1;;;;;1224:32:504;;;3454:31:238;;;1206:51:504;3365:56:238;;-1:-1:-1;3427:24:238;;3454:9;;;;;1179:18:504;;3454:31:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3427:58;;3492:24;3533:42;3547:15;3564:10;3533:13;:42::i;:::-;3519:56;;:11;:56;:::i;:::-;3492:83;;3581:25;3624:44;3638:16;3656:11;3624:13;:44::i;:::-;3609:59;;:12;:59;:::i;:::-;3581:87;;3699:16;3679:17;:36;3675:135;;;3787:16;3738:36;3757:17;3787:16;3738:36;:::i;:::-;3737:46;;3778:5;3737:46;:::i;:::-;3736:67;;;;:::i;:::-;3725:78;;3675:135;3893:13;3905:1;3893:13;;:::i;:::-;-1:-1:-1;;;;;3959:30:238;;;3939:17;3959:30;;;:18;:30;;;;;;;;:43;;;;;;;;;;3893:13;;-1:-1:-1;4012:14:238;;;:93;;-1:-1:-1;;;;;;4048:37:238;;;;;;;:25;:37;;;;;;;;:50;;;;;;;;;;4101:4;;4030:68;;:15;:68;:::i;:::-;:75;4012:93;4008:319;;;4148:11;-1:-1:-1;;;;;4120:61:238;4136:10;-1:-1:-1;;;;;4120:61:238;;4161:9;4172:8;4120:61;;;;;;8322:25:504;;;8378:2;8363:18;;8356:34;8310:2;8295:18;;8148:248;4120:61:238;;;;;;;;-1:-1:-1;;;;;4190:30:238;;;;;;;:18;:30;;;;;;;;:43;;;;;;;;;;;;:54;;;4252:37;;;:25;:37;;;;;:50;;;;;;;;;4305:15;4252:68;;4008:319;3128:1203;;;;;;2936:1395;;;;;;;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;10251:300:487:-;10314:16;10342:22;10367:19;10375:3;10367:7;:19::i;1040:252:465:-;1216:68;;-1:-1:-1;;;;;12713:15:504;;;1216:68:465;;;12695:34:504;12765:15;;12745:18;;;12738:43;12797:18;;;12790:34;;;1189:96:465;;1209:5;;-1:-1:-1;;;1239:27:465;12630:18:504;;1216:68:465;;;;-1:-1:-1;;1216:68:465;;;;;;;;;;;;;;-1:-1:-1;;;;;1216:68:465;-1:-1:-1;;;;;;1216:68:465;;;;;;;;;;1189:19;:96::i;:::-;1040:252;;;;:::o;5088:1092:238:-;5225:35;;-1:-1:-1;;;5225:35:238;;5254:4;5225:35;;;1206:51:504;5188:7:238;;;;-1:-1:-1;;;;;5225:20:238;;;;;1179:18:504;;5225:35:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5203:57;;5267:49;5318:29;5351:66;5382:10;5400:11;5351:23;:66::i;:::-;5266:151;;;;5428:20;:27;5459:1;5428:32;5424:63;;;5469:18;;-1:-1:-1;;;5469:18:238;;;;;;;;;;;5424:63;5529:10;5571:11;5494:32;5588:469;5612:20;:27;5608:1;:31;5588:469;;;5654:38;5695:20;5716:1;5695:23;;;;;;;;:::i;:::-;;;;;;;5654:64;;5726:25;5754:14;5769:1;5754:17;;;;;;;;:::i;:::-;;;;;;;5726:45;;5780:33;5815:24;5843:125;5871:14;5895:15;5920:18;5948:12;5843:18;:125::i;:::-;5779:189;;-1:-1:-1;5779:189:238;-1:-1:-1;5641:3:238;;-1:-1:-1;5641:3:238;;-1:-1:-1;5641:3:238;;-1:-1:-1;5641:3:238;;-1:-1:-1;5641:3:238:i;:::-;;;;5588:469;;;;6085:11;-1:-1:-1;;;;;6067:29:238;:14;-1:-1:-1;;;;;6067:29:238;;6063:63;;6105:21;;-1:-1:-1;;;6105:21:238;;;;;;;;;;;6063:63;6139:36;;-1:-1:-1;;;6139:36:238;;6169:4;6139:36;;;1206:51:504;-1:-1:-1;;;;;6139:21:238;;;;;1179:18:504;;6139:36:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6132:43;5088:1092;-1:-1:-1;;;;;;;;5088:1092:238:o;818:216:465:-;968:58;;-1:-1:-1;;;;;13027:32:504;;968:58:465;;;13009:51:504;13076:18;;;13069:34;;;941:86:465;;961:5;;-1:-1:-1;;;991:23:465;12982:18:504;;968:58:465;12835:274:504;941:86:465;818:216;;;:::o;1359:130:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;719:10:484;1422:23:470;1414:68;;;;-1:-1:-1;;;1414:68:470;;13316:2:504;1414:68:470;;;13298:21:504;;;13335:18;;;13328:30;13394:34;13374:18;;;13367:62;13446:18;;1414:68:470;13114:356:504;1414:68:470;1359:130::o;1496:153:471:-;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;:34::i;13002:214:238:-;13095:4;-1:-1:-1;;;;;13114:31:238;;;;;;:97;;;13178:26;13205:4;13178:32;;;;;;:::i;:::-;;;;;;;;;;;;;;;-1:-1:-1;;;;;13149:62:238;;;13178:32;;13149:62;13107:104;13002:214;-1:-1:-1;;;13002:214:238:o;14652:1318::-;14884:2;;:36;;-1:-1:-1;;;14884:36:238;;14783:25;;14852:21;;-1:-1:-1;;;;;14884:2:238;;;;:13;;:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15030:58;;-1:-1:-1;;;15030:58:238;;14852:69;;-1:-1:-1;14953:11:238;;14927:15;;-1:-1:-1;;;;;15030:21:238;;;;;:58;;15060:10;;14953:11;;14927:15;;15030:58;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15007:81;;15094:18;15115:13;-1:-1:-1;;;;;15115:21:238;;15145:10;15158:7;15167:4;15115:57;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15194:32;;-1:-1:-1;;;15194:32:238;;-1:-1:-1;;;;;1224:32:504;;;15194::238;;;1206:51:504;15094:78:238;;-1:-1:-1;15194:20:238;;;;;;1179:18:504;;15194:32:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:70;;;-1:-1:-1;15230:34:238;;-1:-1:-1;;;15230:34:238;;-1:-1:-1;;;;;1224:32:504;;;15230:34:238;;;1206:51:504;15230:20:238;;;;;1179:18:504;;15230:34:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15179:137;;;;-1:-1:-1;;;15179:137:238;;14978:2:504;15179:137:238;;;14960:21:504;15017:2;14997:18;;;14990:30;15056:34;15036:18;;;15029:62;-1:-1:-1;;;15107:18:504;;;15100:34;15151:19;;15179:137:238;14776:400:504;15179:137:238;15345:32;;-1:-1:-1;;;15345:32:238;;-1:-1:-1;;;;;1224:32:504;;;15345::238;;;1206:51:504;15323:11:238;;15345:20;;;;;;1179:18:504;;15345:32:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15340:558;;-1:-1:-1;15396:5:238;15340:558;;;15419:34;;-1:-1:-1;;;15419:34:238;;-1:-1:-1;;;;;1224:32:504;;;15419:34:238;;;1206:51:504;15419:20:238;;;;;1179:18:504;;15419:34:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15414:484;;-1:-1:-1;15472:4:238;15414:484;;;15498:16;15516;15536:13;-1:-1:-1;;;;;15536:25:238;;15570:10;15583:7;15592:4;15536:61;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15497:100;;;;15606:18;15626;15648:13;-1:-1:-1;;;;;15648:25:238;;15682:10;15695:7;15704:5;15648:62;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15605:105;;;;15784:10;15773:8;:21;:46;;;;;15809:10;15798:8;:21;15773:46;15769:123;;;15840:4;15831:13;;15769:123;;;15878:5;15869:14;;15769:123;15489:409;;;;15414:484;15930:13;15945:11;15958:6;15919:46;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;15904:61;;14812:1158;;;;;14652:1318;;;;:::o;15974:474::-;16108:25;16143:13;16173:10;16143:42;;16230:7;-1:-1:-1;;;;;16230:14:238;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16206:40:238;16214:11;-1:-1:-1;;;;;16206:40:238;;:84;;;;16274:7;-1:-1:-1;;;;;16274:14:238;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;16250:40:238;16258:11;-1:-1:-1;;;;;16250:40:238;;16206:84;16191:169;;;;-1:-1:-1;;;16191:169:238;;16068:2:504;16191:169:238;;;16050:21:504;16107:2;16087:18;;;16080:30;16146:34;16126:18;;;16119:62;-1:-1:-1;;;16197:18:504;;;16190:52;16259:19;;16191:169:238;15866:418:504;16191:169:238;16393:2;;:36;;-1:-1:-1;;;16393:36:238;;-1:-1:-1;;;;;16393:2:238;;;;:13;;:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16382:61;;;-1:-1:-1;;;;;16547:15:504;;;16382:61:238;;;16529:34:504;16599:15;;;16579:18;;;16572:43;16464:18;;16382:61:238;;;;;;;;;;;;;16367:76;;16137:311;15974:474;;;;:::o;18233:367::-;18435:26;;;18459:1;18435:26;;;18362:25;18435:26;;;;;18362:25;18397:35;;18435:26;18459:1;18435:26;;;;;;;;;;-1:-1:-1;18435:26:238;18397:64;;18481:10;18467:8;18476:1;18467:11;;;;;;;;:::i;:::-;;;;;;:24;-1:-1:-1;;;;;18467:24:238;;;-1:-1:-1;;;;;18467:24:238;;;;;18511:11;18497:8;18506:1;18497:11;;;;;;;;:::i;:::-;;;;;;:25;-1:-1:-1;;;;;18497:25:238;;;-1:-1:-1;;;;;18497:25:238;;;;;18554:30;18573:10;18554:18;:30::i;:::-;18586:8;18543:52;;;;;;;;;:::i;17749:480::-;-1:-1:-1;;;;;17932:25:238;;;17919:10;17932:25;;;:13;:25;;;;;;;;:38;;;;;;;;;;17884:25;;17932:38;;17980:8;17976:58;;-1:-1:-1;;;;;;17996:26:238;;;;;;;:13;:26;;;;;;;;:38;;;;;;;;;;;;17976:58;18044:8;;;18040:23;;-1:-1:-1;18060:3:238;18040:23;18070:14;18087:43;18106:10;18118:11;18087:18;:43::i;:::-;18200:2;;:23;;-1:-1:-1;;;18200:23:238;;17620:2:504;18200:23:238;;;17602:21:504;17659:1;17639:18;;;17632:29;-1:-1:-1;;;17677:18:504;;;17670:36;18070:60:238;;-1:-1:-1;18162:10:238;;18174:11;;18187:3;;18070:60;;-1:-1:-1;;;;;18200:2:238;;:13;;17723:18:504;;18200:23:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18151:73;;;-1:-1:-1;;;;;18121:15:504;;;18151:73:238;;;18103:34:504;18173:15;;;18153:18;;;18146:43;18237:8;18225:21;;;18205:18;;;18198:49;18283:15;;18263:18;;;18256:43;18336:15;;;;18315:19;;;18308:44;18037:19;;18151:73:238;;;;;;;;;;;;18136:88;;17913:316;;17749:480;;;;:::o;18851:261::-;19064:2;;:42;;-1:-1:-1;;;19064:42:238;;18902:2:504;19064:42:238;;;18884:21:504;18941:2;18921:18;;;18914:30;-1:-1:-1;;;18960:18:504;;;18953:55;18990:25:238;;19051:11;;-1:-1:-1;;;;;19064:2:238;;;;:13;;19025:18:504;;19064:42:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19040:67;;;-1:-1:-1;;;;;16547:15:504;;;19040:67:238;;;16529:34:504;16599:15;;;;16579:18;;;16572:43;16464:18;;19040:67:238;;;;;;;;;;;;;19025:82;;18851:261;;;;:::o;19116:266::-;19331:2;;:45;;-1:-1:-1;;;19331:45:238;;19256:2:504;19331:45:238;;;19238:21:504;19295:2;19275:18;;;19268:30;19334;19314:18;;;19307:58;19257:25:238;;19318:11;;-1:-1:-1;;;;;19331:2:238;;;;:13;;19382:18:504;;19331:45:238;19054:352:504;24149:449:238;24338:2;;:70;;-1:-1:-1;;;24338:70:238;;-1:-1:-1;;;;;16547:15:504;;;24338:70:238;;;16529:34:504;16599:15;;;16579:18;;;16572:43;24281:25:238;;24316:19;;24338:2;;;:27;;16464:18:504;;24338:70:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24316:92;-1:-1:-1;;;;;;24418:25:238;;24414:123;;24477:53;;-1:-1:-1;;;24477:53:238;;19922:2:504;24477:53:238;;;19904:21:504;19961:2;19941:18;;;19934:30;20000:34;19980:18;;;19973:62;-1:-1:-1;;;20051:18:504;;;20044:41;20102:19;;24477:53:238;19720:407:504;24414:123:238;24557:36;;;-1:-1:-1;;;;;16547:15:504;;;24557:36:238;;;16529:34:504;16599:15;;16579:18;;;16572:43;;;;16464:18;;24557:36:238;16289:332:504;19386:1047:238;19520:25;19555:22;19603:10;19555:60;;19621:14;19638:7;-1:-1:-1;;;;;19638:14:238;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19621:33;;19660:14;19677:7;-1:-1:-1;;;;;19677:14:238;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19660:33;-1:-1:-1;;;;;;19726:30:238;;;;;;;;;19789;;;19726;;19833:42;;;19856:19;19833:42;19825:108;;;;-1:-1:-1;;;19825:108:238;;20334:2:504;19825:108:238;;;20316:21:504;20373:2;20353:18;;;20346:30;20412:34;20392:18;;;20385:62;-1:-1:-1;;;20463:18:504;;;20456:51;20524:19;;19825:108:238;20132:417:504;19825:108:238;19940:26;19972;20016:19;20012:325;;;20059:16;;;20073:1;20059:16;;20111:1;20059:16;;;20097;;;;;;;;20059;;-1:-1:-1;20059:16:238;;20097;;;;20059;20097;;;;;-1:-1:-1;20097:16:238;20085:28;;20138:6;20123:9;20133:1;20123:12;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;20123:21:238;;;-1:-1:-1;;;;;20123:21:238;;;;;20169:6;20154:9;20164:1;20154:12;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;20154:21:238;;;-1:-1:-1;;;;;20154:21:238;;;;;20012:325;;;-1:-1:-1;20212:16:238;;;20226:1;20212:16;;20264:1;20212:16;;;20250;;;;;;;;20212;;20250;;;;20212;20250;;;;;-1:-1:-1;20250:16:238;20238:28;;20291:6;20276:9;20286:1;20276:12;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;20276:21:238;;;-1:-1:-1;;;;;20276:21:238;;;;;20322:6;20307:9;20317:1;20307:12;;;;;;;;:::i;:::-;;;;;;:21;-1:-1:-1;;;;;20307:21:238;;;-1:-1:-1;;;;;20307:21:238;;;;;20012:325;20375:30;20394:10;20375:18;:30::i;:::-;20407:9;20418;20364:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;20349:79;;19549:884;;;;;;;19386:1047;;;;:::o;20437:806::-;20667:2;;:36;;-1:-1:-1;;;20667:36:238;;21323:2:504;20667:36:238;;;21305:21:504;21362:2;21342:18;;;21335:30;-1:-1:-1;;;21381:18:504;;;21374:49;20570:25:238;;20605:39;;-1:-1:-1;;;;;20667:2:238;;;;:13;;21440:18:504;;20667:36:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20736:60;;-1:-1:-1;;;20736:60:238;;-1:-1:-1;;;;;1224:32:504;;;20736:60:238;;;1206:51:504;20605:99:238;;-1:-1:-1;20710:23:238;;20736:39;;;;;1179:18:504;;20736:60:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20736:60:238;;;;;;;;;;;;:::i;:::-;20821:2;;:23;;-1:-1:-1;;;20821:23:238;;20710:86;;-1:-1:-1;20803:15:238;;-1:-1:-1;;;;;20821:2:238;;;;:13;;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20803:41;;20850:22;20875:48;20894:6;20910:11;20875:18;:48::i;:::-;20850:73;-1:-1:-1;20850:73:238;-1:-1:-1;;;;;20981:28:238;;;;:92;;-1:-1:-1;21031:42:238;-1:-1:-1;;;;;21013:60:238;;;20981:92;20977:140;;;-1:-1:-1;21103:7:238;20977:140;21193:14;21209:19;21230:7;21182:56;;;;;;;;;;:::i;21247:909::-;21515:2;;:50;;-1:-1:-1;;;21515:50:238;;21389:25;;21424:47;;-1:-1:-1;;;;;21515:2:238;;;;:13;;:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21611:41;;-1:-1:-1;;;21611:41:238;;-1:-1:-1;;;;;1224:32:504;;;21611:41:238;;;1206:51:504;21424:147:238;;-1:-1:-1;21577:20:238;;21611;;;;;1179:18:504;;21611:41:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21577:76;;21659:23;21685:30;21705:9;21685:19;:30::i;:::-;21659:56;;21722:22;21747:48;21766:6;21782:11;21747:18;:48::i;:::-;21867:2;;:23;;-1:-1:-1;;;21867:23:238;;21722:73;;-1:-1:-1;21722:73:238;;21801:25;;-1:-1:-1;;;;;21867:2:238;;:13;;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21849:41;-1:-1:-1;;;;;;21900:28:238;;;;:92;;-1:-1:-1;21950:42:238;-1:-1:-1;;;;;21932:60:238;;;21900:92;21896:140;;;22022:7;22002:27;;21896:140;22112:14;22128:7;22137:13;22101:50;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22086:65;;21418:738;;;;;;21247:909;;;;:::o;22938:468::-;23126:2;;:50;;-1:-1:-1;;;23126:50:238;;23067:25;;23102:21;;-1:-1:-1;;;;;23126:2:238;;;;:13;;:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23206:2;;:52;;-1:-1:-1;;;23206:52:238;;24425:2:504;23206:52:238;;;24407:21:504;24464:2;24444:18;;;24437:30;24503:34;24483:18;;;24476:62;-1:-1:-1;;;24554:18:504;;;24547:33;23102:74:238;;-1:-1:-1;23182:21:238;;-1:-1:-1;;;;;23206:2:238;;;;:13;;24597:19:504;;23206:52:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23282:2;;:23;;-1:-1:-1;;;23282:23:238;;23182:76;;-1:-1:-1;23264:15:238;;-1:-1:-1;;;;;23282:2:238;;;;:13;;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23327:74;;;-1:-1:-1;;;;;24998:15:504;;;23327:74:238;;;24980:34:504;25050:15;;;25030:18;;;25023:43;;;;25102:15;;;25082:18;;;25075:43;25154:15;;;25134:18;;;25127:43;25207:15;;;25186:19;;;25179:44;23264:41:238;;-1:-1:-1;24914:19:504;;23327:74:238;;;;;;;;;;;;;23312:89;;23096:310;;;22938:468;;;;:::o;22529:405::-;22784:2;;:50;;-1:-1:-1;;;22784:50:238;;22658:25;;22693:47;;-1:-1:-1;;;;;22784:2:238;;;;:13;;:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22873:42;;-1:-1:-1;;;22873:42:238;;-1:-1:-1;;;;;1224:32:504;;;22873:42:238;;;1206:51:504;22693:147:238;;-1:-1:-1;22873:20:238;;;;;;1179:18:504;;22873:42:238;1033:230:504;23410:735:238;23542:25;23577:43;23623:2;;;;;;;;;-1:-1:-1;;;;;23623:2:238;-1:-1:-1;;;;;23623:17:238;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;23623:19:238;;;;;;;;;;;;:::i;:::-;23577:65;;23653:9;23648:493;23672:5;:12;23668:1;:16;23648:493;;;23699:40;23742:5;23748:1;23742:8;;;;;;;;:::i;:::-;;;;;;;23699:51;;23793:10;-1:-1:-1;;;;;23762:42:238;:4;:19;;;-1:-1:-1;;;;;23762:42:238;;23758:377;;;23842:19;;23863:18;;;;;23883:19;;;;;23831:72;;-1:-1:-1;;;;;12713:15:504;;;23831:72:238;;;12695:34:504;12765:15;;;;12745:18;;;12738:43;12797:18;;;12790:34;23831:72:238;;;;;;;;;;12630:18:504;;;;23831:72:238;;;-1:-1:-1;23959:5:238;;23758:377;24015:10;-1:-1:-1;;;;;23983:43:238;:4;:20;;;-1:-1:-1;;;;;23983:43:238;;23979:156;;;24064:4;:20;;;24086:4;:18;;;24106:4;:19;;;24053:73;;;;;;;;;-1:-1:-1;;;;;12713:15:504;;;12695:34;;12765:15;;;;12760:2;12745:18;;12738:43;12812:2;12797:18;;12790:34;;;;12645:2;12630:18;;12455:375;24053:73:238;;;;;;;;;;;;;24038:88;;23979:156;-1:-1:-1;23686:3:238;;;;:::i;:::-;;;;23648:493;;;;23571:574;23410:735;;;;:::o;25593:1461::-;25718:25;25757:13;25774:2;25757:19;25753:1297;;;25932:35;;25802:42;;25867;;25932:35;;25943:10;;25802:42;;25867;;25932:35;;;:::i;:::-;;;;;;;;;;;;;25917:50;;25778:196;;25753:1297;;;26037:42;26137;26237;26324;26411;-1:-1:-1;;;;;26467:24:238;;;;26463:581;;;26503:18;26550:10;-1:-1:-1;;;;;26535:25:238;:11;-1:-1:-1;;;;;26535:25:238;;26531:162;;;-1:-1:-1;26585:13:238;26531:162;;;26634:10;-1:-1:-1;;;;;26619:25:238;:11;-1:-1:-1;;;;;26619:25:238;;26615:78;;;-1:-1:-1;26669:13:238;26615:78;26728:8;26738;26748:11;26761;26717:56;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26702:71;;26493:289;26463:581;;;26806:10;-1:-1:-1;;;;;26792:24:238;:10;-1:-1:-1;;;;;26792:24:238;;26788:256;;;26854:10;26866:13;26881:10;26893;26843:61;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;26828:76;;26788:256;;;26937:10;-1:-1:-1;;;;;26923:24:238;:10;-1:-1:-1;;;;;26923:24:238;;26919:125;;;26985:10;26997:13;27012:10;27024;26974:61;;;;;;;;;;;:::i;26919:125::-;25980:1070;;;;;25593:1461;;;;:::o;17532:213::-;17717:23;;;-1:-1:-1;;;;;1224:32:504;;17717:23:238;;;1206:51:504;17667:25:238;;1179:18:504;17717:23:238;1033:230:504;16658:429:238;16850:2;;:42;;-1:-1:-1;;;16850:42:238;;18902:2:504;16850:42:238;;;18884:21:504;18941:2;18921:18;;;18914:30;-1:-1:-1;;;18960:18:504;;;18953:55;16794:25:238;;16829:18;;-1:-1:-1;;;;;16850:2:238;;;;:13;;19025:18:504;;16850:42:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;16914:2;;:40;;-1:-1:-1;;;16914:40:238;;28637:2:504;16914:40:238;;;28619:21:504;28676:2;28656:18;;;28649:30;28715:25;28695:18;;;28688:53;16829:63:238;;-1:-1:-1;16898:13:238;;-1:-1:-1;;;;;16914:2:238;;;;:13;;28758:18:504;;16914:40:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17046:36;;16898:56;;-1:-1:-1;16997:11:238;;17046:36;;17057:10;;16898:56;;16997:11;;17046:36;;;:::i;17091:437::-;17285:2;;:45;;-1:-1:-1;;;17285:45:238;;19256:2:504;17285:45:238;;;19238:21:504;19295:2;19275:18;;;19268:30;19334;19314:18;;;19307:58;17229:25:238;;17264:18;;-1:-1:-1;;;;;17285:2:238;;;;:13;;19382:18:504;;17285:45:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;17352:2;;:43;;-1:-1:-1;;;17352:43:238;;29378:2:504;17352:43:238;;;29360:21:504;29417:2;29397:18;;;29390:30;29456:28;29436:18;;;29429:56;17264:66:238;;-1:-1:-1;17336:13:238;;-1:-1:-1;;;;;17352:2:238;;;;:13;;29502:18:504;;17352:43:238;29176:350:504;24602:956:238;24800:2;;:36;;-1:-1:-1;;;24800:36:238;;24733:25;;24768:21;;-1:-1:-1;;;;;24800:2:238;;;;:13;;:36;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24925:22;;;24945:1;24925:22;;;;;;;;;24768:69;;-1:-1:-1;24870:11:238;;24843:10;;24925:22;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;24925:22:238;;-1:-1:-1;;24925:22:238;;;;;;;;-1:-1:-1;;24988:22:238;;;25008:1;24988:22;;;;;;;;;24890:57;;-1:-1:-1;24953:32:238;;24988:22;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;24988:22:238;;-1:-1:-1;;24988:22:238;;;;;;;;;;;24953:57;;25024:18;25070:10;-1:-1:-1;;;;;25045:36:238;:4;-1:-1:-1;;;;;25045:11:238;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25045:36:238;;25024:57;;25089:18;25135:10;-1:-1:-1;;;;;25110:36:238;:4;-1:-1:-1;;;;;25110:11:238;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;25110:36:238;;25089:57;;25162:13;:30;;;;25179:13;25162:30;25154:70;;;;-1:-1:-1;;;25154:70:238;;29733:2:504;25154:70:238;;;29715:21:504;29772:2;29752:18;;;29745:30;29811:29;29791:18;;;29784:57;29858:18;;25154:70:238;29531:351:504;25154:70:238;25255:4;-1:-1:-1;;;;;25255:11:238;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25233:9;25243:1;25233:12;;;;;;;;:::i;:::-;;;;;;;:19;;:35;;;;;;;;;;;25296:4;-1:-1:-1;;;;;25296:11:238;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25276:9;25286:1;25276:12;;;;;;;;:::i;:::-;;;;;;;:17;;:33;-1:-1:-1;;;;;25276:33:238;;;-1:-1:-1;;;;;25276:33:238;;;;;25335:4;-1:-1:-1;;;;;25335:11:238;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25317:9;25327:1;25317:12;;;;;;;;:::i;:::-;;;;;;;:15;;:31;-1:-1:-1;;;;;25317:31:238;;;-1:-1:-1;;;;;25317:31:238;;;;;25379:4;-1:-1:-1;;;;;25379:11:238;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25357:9;25367:1;25357:12;;;;;;;;:::i;:::-;;;;;;;:19;;:35;;;;;;;;;;;25420:4;-1:-1:-1;;;;;25420:11:238;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25400:9;25410:1;25400:12;;;;;;;;:::i;:::-;;;;;;;:17;;:33;-1:-1:-1;;;;;25400:33:238;;;-1:-1:-1;;;;;25400:33:238;;;;;25459:4;-1:-1:-1;;;;;25459:11:238;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;25441:9;25451:1;25441:12;;;;;;;;:::i;:::-;;;;;;;:15;;:31;-1:-1:-1;;;;;25441:31:238;;;-1:-1:-1;;;;;25441:31:238;;;;;25016:463;;25511:13;25526:4;25532:9;25543;25500:53;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;25485:68;;24762:796;;;;24602:956;;;;:::o;4386:352::-;4480:7;4495:21;4552:5;-1:-1:-1;;;;;4527:41:238;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4519:52;;4495:76;;4607:2;4590:13;:19;;:143;;4713:18;4729:2;4713:13;:18;:::i;:::-;4708:24;;:2;:24;:::i;:::-;4682:51;;4690:13;4682:51;:::i;:::-;4590:143;;;4651:18;4656:13;4651:2;:18;:::i;:::-;4646:24;;:2;:24;:::i;:::-;4620:51;;4628:13;4620:51;:::i;:::-;4577:156;4386:352;-1:-1:-1;;;;4386:352:238:o;5562:109:487:-;5618:16;5653:3;:11;;5646:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:109;;;:::o;3868:717:465:-;4298:23;4324:69;4352:4;4324:69;;;;;;;;;;;;;;;;;4332:5;-1:-1:-1;;;;;4324:27:465;;;:69;;;;;:::i;:::-;4407:17;;4298:95;;-1:-1:-1;4407:21:465;4403:176;;4502:10;4491:30;;;;;;;;;;;;:::i;:::-;4483:85;;;;-1:-1:-1;;;4483:85:465;;33237:2:504;4483:85:465;;;33219:21:504;33276:2;33256:18;;;33249:30;33315:34;33295:18;;;33288:62;-1:-1:-1;;;33366:18:504;;;33359:40;33416:19;;4483:85:465;33035:406:504;6184:450:238;6357:17;6376:7;6391:23;6417:147;6454:8;6494:24;;;6520:10;6532:11;6545:12;6471:87;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;6471:87:238;;;;;;;;;;;;;;-1:-1:-1;;;;;6471:87:238;-1:-1:-1;;;;;;6471:87:238;;;;;;;;;;6417:21;:147::i;:::-;6391:173;;6588:10;6577:52;;;;;;;;;;;;:::i;:::-;6570:59;;;;;6184:450;;;;;;;:::o;14461:187::-;14608:2;;:35;;-1:-1:-1;;;14608:35:238;;34430:2:504;14608:35:238;;;34412:21:504;34469:2;34449:18;;;34442:30;-1:-1:-1;;;34488:18:504;;;34481:48;14542:7:238;;-1:-1:-1;;;;;14608:2:238;;:13;;34546:18:504;;14608:35:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;13957:500::-;-1:-1:-1;;;;;14121:29:238;;;14081:7;14121:29;;;:17;:29;;;;;;;;:42;;;;;;;;;;;14081:7;;14121:42;14173:26;14169:104;;-1:-1:-1;;;;;;14224:30:238;;;;;;;:17;:30;;;;;;;;:42;;;;;;;;;;;;14169:104;-1:-1:-1;;;;;14283:26:238;;;14279:174;;14326:12;-1:-1:-1;14319:19:238;;14279:174;14412:2;;:34;;-1:-1:-1;;;14412:34:238;;34777:2:504;14412:34:238;;;34759:21:504;34816:2;34796:18;;;34789:30;-1:-1:-1;;;34835:18:504;;;34828:47;-1:-1:-1;;;;;14412:2:238;;;;:13;;34892:18:504;;14412:34:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14405:41;;;;;13220:733;13325:7;;13340:123;13364:6;:13;13360:1;:17;13340:123;;;13409:19;-1:-1:-1;;;;;13396:32:238;:6;13403:1;13396:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13396:32:238;;13392:64;;;13437:19;13430:26;;;;;13392:64;13379:3;;;;:::i;:::-;;;;13340:123;;;-1:-1:-1;13486:2:238;;:23;;-1:-1:-1;;;13486:23:238;;13468:15;;-1:-1:-1;;;;;13486:2:238;;:13;;:23;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13468:41;;13520:9;13515:99;13539:6;:13;13535:1;:17;13515:99;;;13584:7;-1:-1:-1;;;;;13571:20:238;:6;13578:1;13571:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13571:20:238;;13567:40;;;-1:-1:-1;13600:7:238;-1:-1:-1;13593:14:238;;13567:40;13554:3;;;;:::i;:::-;;;;13515:99;;;-1:-1:-1;13641:2:238;;:28;;-1:-1:-1;;;13641:28:238;;35123:2:504;13641:28:238;;;35105:21:504;35162:2;35142:18;;;35135:30;-1:-1:-1;;;35181:18:504;;;35174:41;13619:19:238;;-1:-1:-1;;;;;13641:2:238;;:13;;35232:18:504;;13641:28:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13619:50;;13680:9;13675:107;13699:6;:13;13695:1;:17;13675:107;;;13744:11;-1:-1:-1;;;;;13731:24:238;:6;13738:1;13731:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13731:24:238;;13727:48;;;-1:-1:-1;13764:11:238;-1:-1:-1;13757:18:238;;-1:-1:-1;13757:18:238;13727:48;13714:3;;;;:::i;:::-;;;;13675:107;;;-1:-1:-1;13802:2:238;;:26;;-1:-1:-1;;;13802:26:238;;35463:2:504;13802:26:238;;;35445:21:504;35502:1;35482:18;;;35475:29;-1:-1:-1;;;35520:18:504;;;35513:39;13787:12:238;;-1:-1:-1;;;;;13802:2:238;;:13;;35569:18:504;;13802:26:238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13787:41;;13839:9;13834:93;13858:6;:13;13854:1;:17;13834:93;;;13903:4;-1:-1:-1;;;;;13890:17:238;:6;13897:1;13890:9;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;13890:17:238;;13886:34;;;-1:-1:-1;13916:4:238;-1:-1:-1;13909:11:238;;-1:-1:-1;;13909:11:238;13886:34;13873:3;;;;:::i;:::-;;;;13834:93;;;;13939:6;13946:1;13939:9;;;;;;;;:::i;:::-;;;;;;;13932:16;;;;;13220:733;;;;:::o;22160:365::-;22234:23;22265:7;22282:126;22307:27;;-1:-1:-1;;;22307:27:238;;22323:10;;;22307:27;;;802:25:504;-1:-1:-1;;;;;22307:15:238;;;;;775:18:504;;22307:27:238;;;;;;;;;;;;;;;;;;-1:-1:-1;22307:27:238;;;;;;;;-1:-1:-1;;22307:27:238;;;;;;;;;;;;:::i;:::-;;;22303:88;;22377:5;;22303:88;22335:25;22398:3;;;;:::i;:::-;;;;22282:126;;;22436:1;22422:16;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22422:16:238;;22413:25;;22449:9;22444:77;22468:1;22464:5;;:1;:5;22444:77;;;22496:18;;-1:-1:-1;;;22496:18:238;;;;;802:25:504;;;-1:-1:-1;;;;;22496:15:238;;;;;775:18:504;;22496::238;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22484:6;22491:1;22484:9;;;;;;;;:::i;:::-;-1:-1:-1;;;;;22484:30:238;;;:9;;;;;;;;;;;:30;22471:3;;;;:::i;:::-;;;;22444:77;;;;22259:266;22160:365;;;:::o;3883:223:466:-;4016:12;4047:52;4069:6;4077:4;4083:1;4086:12;4047:21;:52::i;6638:363:238:-;6721:12;-1:-1:-1;;;;;1476:19:466;;;6741:88:238;;;;-1:-1:-1;;;6741:88:238;;35800:2:504;6741:88:238;;;35782:21:504;35839:2;35819:18;;;35812:30;35878:34;35858:18;;;35851:62;-1:-1:-1;;;35929:18:504;;;35922:36;35975:19;;6741:88:238;35598:402:504;6741:88:238;6836:12;6850:23;6877:6;-1:-1:-1;;;;;6877:19:238;6897:4;6877:25;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6835:67;;;;6915:81;6933:7;6942:10;6915:81;;;;;;;;;;;;;;;;;:17;:81::i;:::-;6908:88;6638:363;-1:-1:-1;;;;;6638:363:238:o;4970:446:466:-;5135:12;5192:5;5167:21;:30;;5159:81;;;;-1:-1:-1;;;5159:81:466;;36486:2:504;5159:81:466;;;36468:21:504;36525:2;36505:18;;;36498:30;36564:34;36544:18;;;36537:62;-1:-1:-1;;;36615:18:504;;;36608:36;36661:19;;5159:81:466;36284:402:504;5159:81:466;5251:12;5265:23;5292:6;-1:-1:-1;;;;;5292:11:466;5311:5;5318:4;5292:31;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5250:73;;;;5340:69;5367:6;5375:7;5384:10;5396:12;5340:26;:69::i;:::-;5333:76;4970:446;-1:-1:-1;;;;;;;4970:446:466:o;7005:437:238:-;7137:12;7161:7;7157:281;;;-1:-1:-1;7185:10:238;7178:17;;7157:281;7220:17;;:21;7216:216;;7303:10;7297:17;7353:15;7340:10;7336:2;7332:19;7325:44;7216:216;7410:12;7403:20;;-1:-1:-1;;;7403:20:238;;;;;;;;:::i;6588:628:466:-;6768:12;6796:7;6792:418;;;6823:17;;6819:286;;-1:-1:-1;;;;;1476:19:466;;;7030:60;;;;-1:-1:-1;;;7030:60:466;;37117:2:504;7030:60:466;;;37099:21:504;37156:2;37136:18;;;37129:30;37195:31;37175:18;;;37168:59;37244:18;;7030:60:466;36915:353:504;7030:60:466;-1:-1:-1;7125:10:466;7118:17;;6792:418;7166:33;7174:10;7186:12;7897:17;;:21;7893:379;;8125:10;8119:17;8181:15;8168:10;8164:2;8160:19;8153:44;7893:379;8248:12;8241:20;;-1:-1:-1;;;8241:20:466;;;;;;;;:::i;14:150:504:-;-1:-1:-1;;;;;108:31:504;;98:42;;88:70;;154:1;151;144:12;169:482;293:6;301;354:2;342:9;333:7;329:23;325:32;322:52;;;370:1;367;360:12;322:52;409:9;396:23;428:50;472:5;428:50;:::i;:::-;497:5;-1:-1:-1;554:2:504;539:18;;526:32;567:52;526:32;567:52;:::i;:::-;638:7;628:17;;;169:482;;;;;:::o;1268:294::-;1355:6;1408:2;1396:9;1387:7;1383:23;1379:32;1376:52;;;1424:1;1421;1414:12;1376:52;1463:9;1450:23;1482:50;1526:5;1482:50;:::i;1567:461::-;1620:3;1658:5;1652:12;1685:6;1680:3;1673:19;1711:4;1740:2;1735:3;1731:12;1724:19;;1777:2;1770:5;1766:14;1798:1;1808:195;1822:6;1819:1;1816:13;1808:195;;;1887:13;;-1:-1:-1;;;;;1883:39:504;1871:52;;1943:12;;;;1978:15;;;;1919:1;1837:9;1808:195;;;-1:-1:-1;2019:3:504;;1567:461;-1:-1:-1;;;;;1567:461:504:o;2033:261::-;2212:2;2201:9;2194:21;2175:4;2232:56;2284:2;2273:9;2269:18;2261:6;2232:56;:::i;2299:550::-;2432:6;2440;2448;2501:2;2489:9;2480:7;2476:23;2472:32;2469:52;;;2517:1;2514;2507:12;2469:52;2556:9;2543:23;2575:50;2619:5;2575:50;:::i;:::-;2644:5;-1:-1:-1;2696:2:504;2681:18;;2668:32;;-1:-1:-1;2752:2:504;2737:18;;2724:32;2765:52;2724:32;2765:52;:::i;:::-;2836:7;2826:17;;;2299:550;;;;;:::o;2854:657::-;3023:2;3075:21;;;3145:13;;3048:18;;;3167:22;;;2994:4;;3023:2;3246:15;;;;3220:2;3205:18;;;2994:4;3289:196;3303:6;3300:1;3297:13;3289:196;;;3368:13;;-1:-1:-1;;;;;;3364:40:504;3352:53;;3460:15;;;;3425:12;;;;3325:1;3318:9;3289:196;;;-1:-1:-1;3502:3:504;;2854:657;-1:-1:-1;;;;;;2854:657:504:o;4197:258::-;4269:1;4279:113;4293:6;4290:1;4287:13;4279:113;;;4369:11;;;4363:18;4350:11;;;4343:39;4315:2;4308:10;4279:113;;;4410:6;4407:1;4404:13;4401:48;;;-1:-1:-1;;4445:1:504;4427:16;;4420:27;4197:258::o;4460:257::-;4501:3;4539:5;4533:12;4566:6;4561:3;4554:19;4582:63;4638:6;4631:4;4626:3;4622:14;4615:4;4608:5;4604:16;4582:63;:::i;:::-;4699:2;4678:15;-1:-1:-1;;4674:29:504;4665:39;;;;4706:4;4661:50;;4460:257;-1:-1:-1;;4460:257:504:o;4722:343::-;-1:-1:-1;;;;;4926:32:504;;4908:51;;4995:2;4990;4975:18;;4968:30;;;-1:-1:-1;;5015:44:504;;5040:18;;5032:6;5015:44;:::i;5070:127::-;5131:10;5126:3;5122:20;5119:1;5112:31;5162:4;5159:1;5152:15;5186:4;5183:1;5176:15;5202:253;5274:2;5268:9;5316:4;5304:17;;5351:18;5336:34;;5372:22;;;5333:62;5330:88;;;5398:18;;:::i;:::-;5434:2;5427:22;5202:253;:::o;5460:275::-;5531:2;5525:9;5596:2;5577:13;;-1:-1:-1;;5573:27:504;5561:40;;5631:18;5616:34;;5652:22;;;5613:62;5610:88;;;5678:18;;:::i;:::-;5714:2;5707:22;5460:275;;-1:-1:-1;5460:275:504:o;5740:764::-;5809:6;5840:2;5883;5871:9;5862:7;5858:23;5854:32;5851:52;;;5899:1;5896;5889:12;5851:52;5939:9;5926:23;5968:18;6009:2;6001:6;5998:14;5995:34;;;6025:1;6022;6015:12;5995:34;6063:6;6052:9;6048:22;6038:32;;6108:7;6101:4;6097:2;6093:13;6089:27;6079:55;;6130:1;6127;6120:12;6079:55;6166:2;6153:16;6188:2;6184;6181:10;6178:36;;;6194:18;;:::i;:::-;6236:53;6279:2;6260:13;;-1:-1:-1;;6256:27:504;6252:36;;6236:53;:::i;:::-;6223:66;;6312:2;6305:5;6298:17;6352:7;6347:2;6342;6338;6334:11;6330:20;6327:33;6324:53;;;6373:1;6370;6363:12;6324:53;6428:2;6423;6419;6415:11;6410:2;6403:5;6399:14;6386:45;6472:1;6451:14;;;6447:23;;;6440:34;;;;-1:-1:-1;6455:5:504;5740:764;-1:-1:-1;;;5740:764:504:o;6509:1363::-;6824:2;6836:21;;;6906:13;;6809:18;;;6928:22;;;6776:4;;7003;;6981:2;6966:18;;;7030:15;;;6776:4;7073:195;7087:6;7084:1;7081:13;7073:195;;;7152:13;;-1:-1:-1;;;;;7148:39:504;7136:52;;7208:12;;;;7243:15;;;;7184:1;7102:9;7073:195;;;-1:-1:-1;;;7304:19:504;;;7284:18;;;7277:47;7374:13;;7396:21;;;7435:12;;;;7487:1;7483:16;;;7474:26;;7470:35;;7530:15;;;7565:1;7575:268;7591:8;7586:3;7583:17;7575:268;;;7686:2;7682:7;7676:3;7668:6;7664:16;7660:30;7653:5;7646:45;7714:41;7748:6;7737:8;7731:15;7714:41;:::i;:::-;7819:14;;;;7704:51;-1:-1:-1;7780:17:504;;;;7619:1;7610:11;7575:268;;;-1:-1:-1;7860:6:504;;6509:1363;-1:-1:-1;;;;;;;;;6509:1363:504:o;9170:127::-;9231:10;9226:3;9222:20;9219:1;9212:31;9262:4;9259:1;9252:15;9286:4;9283:1;9276:15;9302:178;9339:3;9383:4;9376:5;9372:16;9407:7;9397:41;;9418:18;;:::i;:::-;-1:-1:-1;;9454:20:504;;9302:178;-1:-1:-1;;9302:178:504:o;9485:127::-;9546:10;9541:3;9537:20;9534:1;9527:31;9577:4;9574:1;9567:15;9601:4;9598:1;9591:15;10322:270;10392:6;10445:2;10433:9;10424:7;10420:23;10416:32;10413:52;;;10461:1;10458;10451:12;10413:52;10493:9;10487:16;10512:50;10556:5;10512:50;:::i;10942:135::-;10981:3;-1:-1:-1;;11002:17:504;;10999:43;;;11022:18;;:::i;:::-;-1:-1:-1;11069:1:504;11058:13;;10942:135::o;11082:175::-;11119:3;11163:4;11156:5;11152:16;11192:4;11183:7;11180:17;11177:43;;;11200:18;;:::i;:::-;11249:1;11236:15;;11082:175;-1:-1:-1;;11082:175:504:o;11608:184::-;11678:6;11731:2;11719:9;11710:7;11706:23;11702:32;11699:52;;;11747:1;11744;11737:12;11699:52;-1:-1:-1;11770:16:504;;11608:184;-1:-1:-1;11608:184:504:o;11797:168::-;11837:7;11903:1;11899;11895:6;11891:14;11888:1;11885:21;11880:1;11873:9;11866:17;11862:45;11859:71;;;11910:18;;:::i;:::-;-1:-1:-1;11950:9:504;;11797:168::o;11970:125::-;12010:4;12038:1;12035;12032:8;12029:34;;;12043:18;;:::i;:::-;-1:-1:-1;12080:9:504;;11970:125::o;12100:217::-;12140:1;12166;12156:132;;12210:10;12205:3;12201:20;12198:1;12191:31;12245:4;12242:1;12235:15;12273:4;12270:1;12263:15;12156:132;-1:-1:-1;12302:9:504;;12100:217::o;12322:128::-;12362:3;12393:1;12389:6;12386:1;12383:13;12380:39;;;12399:18;;:::i;:::-;-1:-1:-1;12435:9:504;;12322:128::o;13475:276::-;13606:3;13644:6;13638:13;13660:53;13706:6;13701:3;13694:4;13686:6;13682:17;13660:53;:::i;:::-;13729:16;;;;;13475:276;-1:-1:-1;;13475:276:504:o;13756:343::-;13958:2;13940:21;;;13997:2;13977:18;;;13970:30;-1:-1:-1;;;14031:2:504;14016:18;;14009:49;14090:2;14075:18;;13756:343::o;14104:385::-;-1:-1:-1;;;;;14356:15:504;;;14338:34;;14408:15;;;;14403:2;14388:18;;14381:43;14467:14;;14460:22;14455:2;14440:18;;14433:50;14288:2;14273:18;;14104:385::o;14494:277::-;14561:6;14614:2;14602:9;14593:7;14589:23;14585:32;14582:52;;;14630:1;14627;14620:12;14582:52;14662:9;14656:16;14715:5;14708:13;14701:21;14694:5;14691:32;14681:60;;14737:1;14734;14727:12;15181:245;15260:6;15268;15321:2;15309:9;15300:7;15296:23;15292:32;15289:52;;;15337:1;15334;15327:12;15289:52;-1:-1:-1;;15360:16:504;;15416:2;15401:18;;;15395:25;15360:16;;15395:25;;-1:-1:-1;15181:245:504:o;16626:787::-;-1:-1:-1;;;;;16940:15:504;;;16922:34;;16872:2;16975;16993:18;;;16986:30;;;17065:13;;16857:18;;;17087:22;;;16824:4;;17166:15;;;;16894:19;;16975:2;17140;17125:18;;;16824:4;17209:178;17223:6;17220:1;17217:13;17209:178;;;17288:13;;17284:22;;17272:35;;17362:15;;;;17327:12;;;;17245:1;17238:9;17209:178;;;-1:-1:-1;17404:3:504;;16626:787;-1:-1:-1;;;;;;;;16626:787:504:o;20554:562::-;-1:-1:-1;;;;;20839:32:504;;20821:51;;20908:2;20903;20888:18;;20881:30;;;-1:-1:-1;;20934:56:504;;20971:18;;20963:6;20934:56;:::i;:::-;21038:9;21030:6;21026:22;21021:2;21010:9;21006:18;20999:50;21066:44;21103:6;21095;21066:44;:::i;:::-;21058:52;20554:562;-1:-1:-1;;;;;;20554:562:504:o;21469:183::-;21529:4;21562:18;21554:6;21551:30;21548:56;;;21584:18;;:::i;:::-;-1:-1:-1;21629:1:504;21625:14;21641:4;21621:25;;21469:183::o;21657:975::-;21752:6;21783:2;21826;21814:9;21805:7;21801:23;21797:32;21794:52;;;21842:1;21839;21832:12;21794:52;21875:9;21869:16;21908:18;21900:6;21897:30;21894:50;;;21940:1;21937;21930:12;21894:50;21963:22;;22016:4;22008:13;;22004:27;-1:-1:-1;21994:55:504;;22045:1;22042;22035:12;21994:55;22074:2;22068:9;22097:60;22113:43;22153:2;22113:43;:::i;:::-;22097:60;:::i;:::-;22191:15;;;22273:1;22269:10;;;;22261:19;;22257:28;;;22222:12;;;;22297:19;;;22294:39;;;22329:1;22326;22319:12;22294:39;22353:11;;;;22373:229;22389:6;22384:3;22381:15;22373:229;;;22462:3;22456:10;22479:50;22523:5;22479:50;:::i;:::-;22542:18;;22406:12;;;;22580;;;;22373:229;;22637:329;22839:2;22821:21;;;22878:1;22858:18;;;22851:29;-1:-1:-1;;;22911:2:504;22896:18;;22889:36;22957:2;22942:18;;22637:329::o;22971:413::-;-1:-1:-1;;;;;23258:15:504;;;23240:34;;23310:15;;;23305:2;23290:18;;23283:43;23362:15;;;23357:2;23342:18;;23335:43;23190:2;23175:18;;22971:413::o;23389:397::-;23591:2;23573:21;;;23630:2;23610:18;;;23603:30;23669:34;23664:2;23649:18;;23642:62;-1:-1:-1;;;23735:2:504;23720:18;;23713:31;23776:3;23761:19;;23389:397::o;25234:1642::-;25358:6;25389:2;25432;25420:9;25411:7;25407:23;25403:32;25400:52;;;25448:1;25445;25438:12;25400:52;25481:9;25475:16;25514:18;25506:6;25503:30;25500:50;;;25546:1;25543;25536:12;25500:50;25569:22;;25622:4;25614:13;;25610:27;-1:-1:-1;25600:55:504;;25651:1;25648;25641:12;25600:55;25680:2;25674:9;25703:60;25719:43;25759:2;25719:43;:::i;25703:60::-;25797:15;;;25879:1;25875:10;;;;25867:19;;25863:28;;;25828:12;;;;25903:19;;;25900:39;;;25935:1;25932;25925:12;25900:39;25959:11;;;;25979:867;25995:6;25990:3;25987:15;25979:867;;;26077:4;26071:3;26062:7;26058:17;26054:28;26051:118;;;26123:1;26152:2;26148;26141:14;26051:118;26195:22;;:::i;:::-;26251:3;26245:10;26268:52;26312:7;26268:52;:::i;:::-;26333:22;;26389:12;;;26383:19;26415:52;26383:19;26415:52;:::i;:::-;26487:14;;;26480:31;26534:2;26570:12;;;26564:19;26596:52;26564:19;26596:52;:::i;:::-;26668:14;;;26661:31;26715:2;26759:12;;;26753:19;26737:14;;;26730:43;26786:18;;26021:4;26012:14;;;;26824:12;;;;25979:867;;27298:559;-1:-1:-1;;;;;27679:15:504;;;27661:34;;27731:15;;;27726:2;27711:18;;27704:43;27783:15;;;27778:2;27763:18;;27756:43;27835:15;;;27830:2;27815:18;;27808:43;27610:3;27595:19;;27298:559::o;29887:683::-;29945:3;29983:5;29977:12;30010:6;30005:3;29998:19;30036:4;30065:2;30060:3;30056:12;30049:19;;30102:2;30095:5;30091:14;30123:1;30133:412;30147:6;30144:1;30141:13;30133:412;;;30206:13;;30290:9;;-1:-1:-1;;;;;30286:18:504;;;30274:31;;30349:11;;;30343:18;30339:27;30325:12;;;30318:49;30390:4;30448:11;;;30442:18;30435:26;30428:34;30414:12;;;30407:56;30492:4;30483:14;;;;30520:15;;;;30259:1;30162:9;30133:412;;30575:803;-1:-1:-1;;;;;31054:15:504;;;31036:34;;31106:15;;31101:2;31086:18;;31079:43;31158:3;31153:2;31138:18;;31131:31;;;30979:4;;31185:62;;31227:19;;31219:6;31185:62;:::i;:::-;31295:9;31287:6;31283:22;31278:2;31267:9;31263:18;31256:50;31323:49;31365:6;31357;31323:49;:::i;31383:273::-;31451:6;31504:2;31492:9;31483:7;31479:23;31475:32;31472:52;;;31520:1;31517;31510:12;31472:52;31552:9;31546:16;31602:4;31595:5;31591:16;31584:5;31581:27;31571:55;;31622:1;31619;31612:12;31661:422;31750:1;31793:5;31750:1;31807:270;31828:7;31818:8;31815:21;31807:270;;;31887:4;31883:1;31879:6;31875:17;31869:4;31866:27;31863:53;;;31896:18;;:::i;:::-;31946:7;31936:8;31932:22;31929:55;;;31966:16;;;;31929:55;32045:22;;;;32005:15;;;;31807:270;;;31811:3;31661:422;;;;;:::o;32088:806::-;32137:5;32167:8;32157:80;;-1:-1:-1;32208:1:504;32222:5;;32157:80;32256:4;32246:76;;-1:-1:-1;32293:1:504;32307:5;;32246:76;32338:4;32356:1;32351:59;;;;32424:1;32419:130;;;;32331:218;;32351:59;32381:1;32372:10;;32395:5;;;32419:130;32456:3;32446:8;32443:17;32440:43;;;32463:18;;:::i;:::-;-1:-1:-1;;32519:1:504;32505:16;;32534:5;;32331:218;;32633:2;32623:8;32620:16;32614:3;32608:4;32605:13;32601:36;32595:2;32585:8;32582:16;32577:2;32571:4;32568:12;32564:35;32561:77;32558:159;;;-1:-1:-1;32670:19:504;;;32702:5;;32558:159;32749:34;32774:8;32768:4;32749:34;:::i;:::-;32819:6;32815:1;32811:6;32807:19;32798:7;32795:32;32792:58;;;32830:18;;:::i;:::-;32868:20;;32088:806;-1:-1:-1;;;32088:806:504:o;32899:131::-;32959:5;32988:36;33015:8;33009:4;32988:36;:::i;33446:413::-;33706:1;33702;33697:3;33693:11;33689:19;33681:6;33677:32;33666:9;33659:51;33746:6;33741:2;33730:9;33726:18;33719:34;33789:2;33784;33773:9;33769:18;33762:30;33640:4;33809:44;33849:2;33838:9;33834:18;33826:6;33809:44;:::i;33864:359::-;33971:6;33979;34032:2;34020:9;34011:7;34007:23;34003:32;34000:52;;;34048:1;34045;34038:12;34000:52;34080:9;34074:16;34099:50;34143:5;34099:50;:::i;:::-;34213:2;34198:18;;;;34192:25;34168:5;;34192:25;;-1:-1:-1;;;33864:359:504:o;36691:219::-;36840:2;36829:9;36822:21;36803:4;36860:44;36900:2;36889:9;36885:18;36877:6;36860:44;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "MAX_SLIPPAGE()": "f9759518", + "_getExtensionFunctions()": "89f8132e", + "acceptOwnership()": "79ba5097", + "amountOutAndSlippageOfSwap(address,uint256,address)": "f560cebd", + "ap()": "3c4f743c", + "customUniV3Router(address,address)": "c8ff6fee", + "defaultOutputToken(address)": "8db87c27", + "getAllRedemptionStrategies()": "a6fdd2bb", + "getInputTokensByOutputToken(address)": "403de57f", + "getRedemptionStrategies(address,address)": "ed287f3f", + "getRedemptionStrategy(address,address)": "b6b928fd", + "getSlippage(address,address)": "2f53ef2b", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "redemptionStrategiesByName(string)": "dee7fe48", + "redemptionStrategiesByTokens(address,address)": "a700f9e4", + "renounceOwnership()": "715018a6", + "swap(address,uint256,address)": "6d069a67", + "transferOwnership(address)": "f2fde38b", + "uniswapV3Fees(address,address)": "398cd955" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LiquidatorsRegistrySecondExtension.json b/packages/sdk/deployments/bob/LiquidatorsRegistrySecondExtension.json new file mode 100644 index 000000000..dac73d2c8 --- /dev/null +++ b/packages/sdk/deployments/bob/LiquidatorsRegistrySecondExtension.json @@ -0,0 +1,1286 @@ +{ + "address": "0x073D023D2A329067E5617973Ebd526D506F5F492", + "abi": [ + { + "type": "function", + "name": "_getExtensionFunctions", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes4[]", + "internalType": "bytes4[]" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "_removeRedemptionStrategy", + "inputs": [ + { + "name": "strategyToRemove", + "type": "address", + "internalType": "contract IRedemptionStrategy" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_resetRedemptionStrategies", + "inputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IRedemptionStrategy[]" + }, + { + "name": "inputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "outputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setDefaultOutputToken", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setRedemptionStrategies", + "inputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IRedemptionStrategy[]" + }, + { + "name": "inputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "outputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setRedemptionStrategy", + "inputs": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract IRedemptionStrategy" + }, + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setSlippages", + "inputs": [ + { + "name": "inputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "outputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "slippages", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setUniswapV3Fees", + "inputs": [ + { + "name": "inputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "outputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "fees", + "type": "uint24[]", + "internalType": "uint24[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setUniswapV3Routers", + "inputs": [ + { + "name": "inputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "outputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "routers", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "acceptOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "ap", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract AddressesProvider" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "customUniV3Router", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultOutputToken", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAllPairsStrategies", + "inputs": [], + "outputs": [ + { + "name": "strategies", + "type": "address[]", + "internalType": "contract IRedemptionStrategy[]" + }, + { + "name": "inputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "outputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pairsStrategiesMatch", + "inputs": [ + { + "name": "configStrategies", + "type": "address[]", + "internalType": "contract IRedemptionStrategy[]" + }, + { + "name": "configInputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "configOutputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redemptionStrategiesByName", + "inputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IRedemptionStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "redemptionStrategiesByTokens", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IRedemptionStrategy" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "uniswapPairsFeesMatch", + "inputs": [ + { + "name": "configInputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "configOutputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "configFees", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uniswapPairsRoutersMatch", + "inputs": [ + { + "name": "configInputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "configOutputTokens", + "type": "address[]", + "internalType": "contract IERC20Upgradeable[]" + }, + { + "name": "configRouters", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "uniswapV3Fees", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "", + "type": "address", + "internalType": "contract IERC20Upgradeable" + } + ], + "outputs": [ + { + "name": "", + "type": "uint24", + "internalType": "uint24" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "OwnershipTransferStarted", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x706f0864c92b913f8c0e71cffd6ed590e7e7e7b6a77fc01e3e1ea46b456685d2", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x073D023D2A329067E5617973Ebd526D506F5F492", + "transactionIndex": 1, + "gasUsed": "2101768", + "logsBloom": "0x00000000000000000000000000000000000000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000020000000000000000001800000000000000000000000000002000440000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x59437b978d3005196191efaf29ae13b9b9add614c03837a5a617002c06425886", + "transactionHash": "0x706f0864c92b913f8c0e71cffd6ed590e7e7e7b6a77fc01e3e1ea46b456685d2", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777950, + "transactionHash": "0x706f0864c92b913f8c0e71cffd6ed590e7e7e7b6a77fc01e3e1ea46b456685d2", + "address": "0x073D023D2A329067E5617973Ebd526D506F5F492", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x59437b978d3005196191efaf29ae13b9b9add614c03837a5a617002c06425886" + } + ], + "blockNumber": 3777950, + "cumulativeGasUsed": "2145607", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferStarted", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "_getExtensionFunctions", + "outputs": [ + { + "internalType": "bytes4[]", + "name": "", + "type": "bytes4[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategyToRemove", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_removeRedemptionStrategy" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_resetRedemptionStrategies" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setDefaultOutputToken" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setRedemptionStrategies" + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "strategy", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setRedemptionStrategy" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "slippages", + "type": "uint256[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setSlippages" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "uint24[]", + "name": "fees", + "type": "uint24[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setUniswapV3Fees" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "routers", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setUniswapV3Routers" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "acceptOwnership" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "ap", + "outputs": [ + { + "internalType": "contract AddressesProvider", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "customUniV3Router", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "defaultOutputToken", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllPairsStrategies", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "strategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "inputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "outputTokens", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IRedemptionStrategy[]", + "name": "configStrategies", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "pairsStrategiesMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByName", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "redemptionStrategiesByTokens", + "outputs": [ + { + "internalType": "contract IRedemptionStrategy", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "configFees", + "type": "uint256[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapPairsFeesMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configInputTokens", + "type": "address[]" + }, + { + "internalType": "contract IERC20Upgradeable[]", + "name": "configOutputTokens", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "configRouters", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapPairsRoutersMatch", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + }, + { + "internalType": "contract IERC20Upgradeable", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "uniswapV3Fees", + "outputs": [ + { + "internalType": "uint24", + "name": "", + "type": "uint24" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_getExtensionFunctions()": { + "returns": { + "_0": "a list of all the function selectors that this logic extension exposes" + } + }, + "acceptOwnership()": { + "details": "The new owner accepts the ownership transfer." + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "pendingOwner()": { + "details": "Returns the address of the pending owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Starts the ownership transfer of the contract to a new account. Replaces the pending transfer if there is one. Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/liquidators/registry/LiquidatorsRegistrySecondExtension.sol": "LiquidatorsRegistrySecondExtension" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/ionic/AddressesProvider.sol": { + "keccak256": "0xf48e9e8b2150408c1c6b68dd957226c342ba47396da792fdaa0922f539a7e163", + "urls": [ + "bzz-raw://43c0a6c40861da4c19b67da9faee7df21572020e2d863611080a9181acc3ba3a", + "dweb:/ipfs/QmQpPDVAYTba8R9N1fGggzkG7JhUFVbAhxdfNw9xofVi4m" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/ILiquidatorsRegistry.sol": { + "keccak256": "0x4fe6a2db7d5ca2855ff683baa4e394498d3b97ee8b23b42ff0e005d0113975f4", + "urls": [ + "bzz-raw://4fffc5bd0d5de35fa378afc465f200e17f322901dbca33d0e49c21a3e5409506", + "dweb:/ipfs/QmRYbZb5rttDM1sboRwhNpCD8GkLzgCEmPeJTdGvb52ZtC" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/registry/LiquidatorsRegistrySecondExtension.sol": { + "keccak256": "0x8473f080499ad93ee4fe23a08c8f2e23f0ad708daffa1deb5e9725e70c80dd09", + "urls": [ + "bzz-raw://fa1248bbc7a419e17c0ce5be2909e62721a3fb6bb5b33582ed91e0a3bc160d1a", + "dweb:/ipfs/QmXWLjsDtidFazsdZgoauGJ1r7eokSSMJhiUj5QpwjEh4q" + ], + "license": "GPL-3.0" + }, + "contracts/liquidators/registry/LiquidatorsRegistryStorage.sol": { + "keccak256": "0x95840e79c504ab6ee1d0cf9ff5fcec2424a64dc6ed57f0bf4831f65c89fc9109", + "urls": [ + "bzz-raw://29825087d3eeaca7516168043f1b046b280816195ed31f13cbdb7444ecb3b012", + "dweb:/ipfs/QmVa9kZx9gRvvUr8RbLRZKWseEMntoQ2CZmQ3TraSF9pa1" + ], + "license": "GPL-3.0" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x60806040523480156200001157600080fd5b506200001d3362000023565b6200009d565b600180546001600160a01b03191690556200004a816200004d602090811b62001c9317901c565b50565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b61248980620000ad6000396000f3fe608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063d7341acf1161007c578063d7341acf1461035d578063dee7fe4814610370578063e187a7dd146103a4578063e30c3978146103b7578063eb29d9f8146103c8578063f2fde38b146103db57600080fd5b80638da5cb5b146102955780638db87c27146102a6578063a1bb91e3146102cf578063a700f9e4146102e2578063aeabb62114610316578063c8ff6fee1461032957600080fd5b8063514b49d911610115578063514b49d9146102375780635495a6d71461024a578063715018a61461025d57806372c9889c1461026557806379ba50971461027857806389f8132e1461028057600080fd5b80630d856eef1461015d5780632434cb7f1461017d5780633322d87714610192578063366eda2e146101b5578063398cd955146101c85780633c4f743c1461020c575b600080fd5b6101656103ee565b60405161017493929190611f82565b60405180910390f35b61019061018b366004612002565b6106da565b005b6101a56101a0366004612087565b610710565b6040519015158152602001610174565b6101906101c3366004612087565b610a0e565b6101f86101d6366004612002565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff9091168152602001610174565b60025461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610174565b610190610245366004612121565b610ae7565b610190610258366004612087565b610da0565b610190610e96565b610190610273366004612087565b610ee6565b610190611001565b61028861107b565b604051610174919061213e565b6000546001600160a01b031661021f565b61021f6102b4366004612121565b6007602052600090815260409020546001600160a01b031681565b6101906102dd366004612087565b611408565b61021f6102f0366004612002565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6101a5610324366004612087565b61178a565b61021f610337366004612002565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b61019061036b36600461218c565b611886565b61021f61037e366004612246565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6101906103b2366004612087565b611a30565b6001546001600160a01b031661021f565b6101a56103d6366004612087565b611b49565b6101906103e9366004612121565b611c22565b606080606060006103ff6009611ce3565b90506000805b8251811015610481576000838281518110610422576104226122c6565b60200260200101519050600061045b60086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905080518461046a91906122f2565b9350505080806104799061230a565b915050610405565b508067ffffffffffffffff81111561049b5761049b6121d7565b6040519080825280602002602001820160405280156104c4578160200160208202803683370190505b5094508067ffffffffffffffff8111156104e0576104e06121d7565b604051908082528060200260200182016040528015610509578160200160208202803683370190505b5093508067ffffffffffffffff811115610525576105256121d7565b60405190808252806020026020018201604052801561054e578160200160208202803683370190505b5092506000905060005b82518110156106d2576000838281518110610575576105756122c6565b6020026020010151905060006105ae60086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b81518110156106bc5760008282815181106105d0576105d06122c6565b6020908102919091018101516001600160a01b038082166000908152600684526040808220898416835290945292909220548c51919350909116908b908890811061061d5761061d6122c6565b60200260200101906001600160a01b031690816001600160a01b03168152505080898781518110610650576106506122c6565b60200260200101906001600160a01b031690816001600160a01b03168152505083888781518110610683576106836122c6565b6001600160a01b0390921660209283029190910190910152856106a58161230a565b9650505080806106b49061230a565b9150506105b3565b50505080806106ca9061230a565b915050610558565b505050909192565b6106e2611cf7565b6001600160a01b03918216600090815260076020526040902080546001600160a01b03191691909216179055565b60008060008061071e6103ee565b92509250925060005b8981101561088f576000805b8551811015610868578c8c8481811061074e5761074e6122c6565b90506020020160208101906107639190612121565b6001600160a01b031686828151811061077e5761077e6122c6565b60200260200101516001600160a01b03161480156107ec57508a8a848181106107a9576107a96122c6565b90506020020160208101906107be9190612121565b6001600160a01b03168582815181106107d9576107d96122c6565b60200260200101516001600160a01b0316145b80156108485750888884818110610805576108056122c6565b905060200201602081019061081a9190612121565b6001600160a01b0316848281518110610835576108356122c6565b60200260200101516001600160a01b0316145b156108565760019150610868565b806108608161230a565b915050610733565b508061087c57600095505050505050610a04565b50806108878161230a565b915050610727565b5060005b83518110156109fb576000805b8b8110156109d4578c8c828181106108ba576108ba6122c6565b90506020020160208101906108cf9190612121565b6001600160a01b03168684815181106108ea576108ea6122c6565b60200260200101516001600160a01b031614801561095857508a8a82818110610915576109156122c6565b905060200201602081019061092a9190612121565b6001600160a01b0316858481518110610945576109456122c6565b60200260200101516001600160a01b0316145b80156109b45750888882818110610971576109716122c6565b90506020020160208101906109869190612121565b6001600160a01b03168484815181106109a1576109a16122c6565b60200260200101516001600160a01b0316145b156109c257600191506109d4565b806109cc8161230a565b9150506108a0565b50806109e857600095505050505050610a04565b50806109f38161230a565b915050610893565b50600193505050505b9695505050505050565b610a16611cf7565b8483148015610a2457508281145b610a495760405162461bcd60e51b8152600401610a4090612325565b60405180910390fd5b60005b85811015610ade57610acc878783818110610a6957610a696122c6565b9050602002016020810190610a7e9190612121565b868684818110610a9057610a906122c6565b9050602002016020810190610aa59190612121565b858585818110610ab757610ab76122c6565b905060200201602081019061036b9190612121565b80610ad68161230a565b915050610a4c565b50505050505050565b610aef611cf7565b6000610afb6009611ce3565b905060005b8151811015610ce9576000828281518110610b1d57610b1d6122c6565b602002602001015190506000610b5660086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b8151811015610ca1576000828281518110610b7857610b786122c6565b6020908102919091018101516001600160a01b038082166000908152600684526040808220898416835290945292909220549092508116908816811415610c8c576001600160a01b03808316600090815260066020908152604080832093891683529290522080546001600160a01b03191690558351610c3f90859085908110610c0457610c046122c6565b602002602001015160086000886001600160a01b03166001600160a01b03168152602001908152602001600020611d5390919063ffffffff16565b506001600160a01b0382811660009081526007602052604090205481169086161415610c8c576001600160a01b038216600090815260076020526040902080546001600160a01b03191690555b50508080610c999061230a565b915050610b5b565b506001600160a01b0382166000908152600860205260409020610cc390611d68565b610cd457610cd2600983611d53565b505b50508080610ce19061230a565b915050610b00565b5060006005836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d54919081019061237a565b604051610d6191906123f1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055610d9b600383611d53565b505050565b610da8611cf7565b8085148015610db657508483145b610dd25760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110610def57610def6122c6565b90506020020135600b6000898985818110610e0c57610e0c6122c6565b9050602002016020810190610e219190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110610e5557610e556122c6565b9050602002016020810190610e6a9190612121565b6001600160a01b0316815260208101919091526040016000205580610e8e8161230a565b915050610dd5565b610e9e611cf7565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f77656400006044820152606401610a40565b610eee611cf7565b8085148015610efc57508483145b610f185760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110610f3557610f356122c6565b9050602002016020810190610f4a9190612121565b600e6000898985818110610f6057610f606122c6565b9050602002016020810190610f759190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110610fa957610fa96122c6565b9050602002016020810190610fbe9190612121565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b0319169290911691909117905580610ff98161230a565b915050610f1b565b60015433906001600160a01b0316811461106f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a40565b61107881611d72565b50565b60408051600c8082526101a0820190925260609190600090826020820161018080368337019050509050630d856eef60e01b816110b78461240d565b93508360ff16815181106110cd576110cd6122c6565b6001600160e01b031990921660209283029190910190910152633322d87760e01b816110f88461240d565b93508360ff168151811061110e5761110e6122c6565b6001600160e01b031990921660209283029190910190910152631d653b3f60e31b816111398461240d565b93508360ff168151811061114f5761114f6122c6565b6001600160e01b03199092166020928302919091019091015263aeabb62160e01b8161117a8461240d565b93508360ff1681518110611190576111906122c6565b6001600160e01b031990921660209283029190910190910152635495a6d760e01b816111bb8461240d565b93508360ff16815181106111d1576111d16122c6565b6001600160e01b03199092166020928302919091019091015263e187a7dd60e01b816111fc8461240d565b93508360ff1681518110611212576112126122c6565b6001600160e01b031990921660209283029190910190910152631cb2622760e21b8161123d8461240d565b93508360ff1681518110611253576112536122c6565b6001600160e01b031990921660209283029190910190910152632434cb7f60e01b8161127e8461240d565b93508360ff1681518110611294576112946122c6565b6001600160e01b03199092166020928302919091019091015263d7341acf60e01b816112bf8461240d565b93508360ff16815181106112d5576112d56122c6565b6001600160e01b031990921660209283029190910190910152631b376d1760e11b816113008461240d565b93508360ff1681518110611316576113166122c6565b6001600160e01b03199092166020928302919091019091015263514b49d960e01b816113418461240d565b93508360ff1681518110611357576113576122c6565b6001600160e01b03199092166020928302919091019091015263a1bb91e360e01b816113828461240d565b93508360ff1681518110611398576113986122c6565b6001600160e01b03199092166020928302919091019091015260ff8216156114025760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610a40565b92915050565b611410611cf7565b848314801561141e57508281145b61143a5760405162461bcd60e51b8152600401610a4090612325565b60006114466009611ce3565b905060005b81518110156115d4576000828281518110611468576114686122c6565b6020026020010151905060006114a160086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b81518110156115905760008282815181106114c3576114c36122c6565b6020908102919091018101516001600160a01b03808216600090815260068452604080822092891682529190935290912080546001600160a01b031916905583519091506115589084908490811061151d5761151d6122c6565b602002602001015160086000876001600160a01b03166001600160a01b03168152602001908152602001600020611d5390919063ffffffff16565b506001600160a01b0316600090815260076020526040902080546001600160a01b0319169055806115888161230a565b9150506114a6565b506115be8484815181106115a6576115a66122c6565b60200260200101516009611d5390919063ffffffff16565b50505080806115cc9061230a565b91505061144b565b5060006115e16003611ce3565b905060005b81518110156116fe576000828281518110611603576116036122c6565b602002602001015190506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611675919081019061237a565b9050600060058260405161168991906123f1565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506116e88484815181106116d0576116d06122c6565b60200260200101516003611d5390919063ffffffff16565b50505080806116f69061230a565b9150506115e6565b5060005b8781101561177f5761176d89898381811061171f5761171f6122c6565b90506020020160208101906117349190612121565b888884818110611746576117466122c6565b905060200201602081019061175b9190612121565b878785818110610ab757610ab76122c6565b806117778161230a565b915050611702565b505050505050505050565b6000805b82811015611878578383828181106117a8576117a86122c6565b90506020020160208101906117bd9190612121565b6001600160a01b0316600e60008a8a858181106117dc576117dc6122c6565b90506020020160208101906117f19190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611825576118256122c6565b905060200201602081019061183a9190612121565b6001600160a01b0390811682526020820192909252604001600020541614611866576000915050610a04565b806118708161230a565b91505061178e565b506001979650505050505050565b61188e611cf7565b6000836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156118ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f6919081019061237a565b9050600060058260405161190a91906123f1565b9081526040805160209281900383018120546001600160a01b0388811660009081526006865284812089831682529095529290932080546001600160a01b0319168984161790559116915085906005906119659085906123f1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905561199f600382611d53565b506119ab600386611d8b565b506001600160a01b03848116600090815260076020526040902054166119fa576001600160a01b03848116600090815260076020526040902080546001600160a01b0319169185169190911790555b6001600160a01b0383166000908152600860205260409020611a1c9085611d8b565b50611a28600984611d8b565b505050505050565b611a38611cf7565b8085148015611a4657508483145b611a625760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110611a7f57611a7f6122c6565b9050602002016020810190611a94919061242a565b600d6000898985818110611aaa57611aaa6122c6565b9050602002016020810190611abf9190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110611af357611af36122c6565b9050602002016020810190611b089190612121565b6001600160a01b031681526020810191909152604001600020805462ffffff191662ffffff9290921691909117905580611b418161230a565b915050611a65565b6000805b8281101561187857838382818110611b6757611b676122c6565b90506020020135600d60008a8a85818110611b8457611b846122c6565b9050602002016020810190611b999190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611bcd57611bcd6122c6565b9050602002016020810190611be29190612121565b6001600160a01b0316815260208101919091526040016000205462ffffff1614611c10576000915050610a04565b80611c1a8161230a565b915050611b4d565b611c2a611cf7565b600180546001600160a01b0383166001600160a01b03199091168117909155611c5b6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60606000611cf083611da0565b9392505050565b6000546001600160a01b03163314611d515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a40565b565b6000611cf0836001600160a01b038416611dfc565b6000611402825490565b600180546001600160a01b031916905561107881611c93565b6000611cf0836001600160a01b038416611eef565b606081600001805480602002602001604051908101604052809291908181526020018280548015611df057602002820191906000526020600020905b815481526020019060010190808311611ddc575b50505050509050919050565b60008181526001830160205260408120548015611ee5576000611e2060018361244f565b8554909150600090611e349060019061244f565b9050818114611e99576000866000018281548110611e5457611e546122c6565b9060005260206000200154905080876000018481548110611e7757611e776122c6565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611eaa57611eaa612466565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611402565b6000915050611402565b6000818152600183016020526040812054611f3657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611402565b506000611402565b600081518084526020808501945080840160005b83811015611f775781516001600160a01b031687529582019590820190600101611f52565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b82811015611fc45781516001600160a01b031684529284019290840190600101611f9f565b50505083810382850152611fd88187611f3e565b9150508281036040840152610a048185611f3e565b6001600160a01b038116811461107857600080fd5b6000806040838503121561201557600080fd5b823561202081611fed565b9150602083013561203081611fed565b809150509250929050565b60008083601f84011261204d57600080fd5b50813567ffffffffffffffff81111561206557600080fd5b6020830191508360208260051b850101111561208057600080fd5b9250929050565b600080600080600080606087890312156120a057600080fd5b863567ffffffffffffffff808211156120b857600080fd5b6120c48a838b0161203b565b909850965060208901359150808211156120dd57600080fd5b6120e98a838b0161203b565b9096509450604089013591508082111561210257600080fd5b5061210f89828a0161203b565b979a9699509497509295939492505050565b60006020828403121561213357600080fd5b8135611cf081611fed565b6020808252825182820181905260009190848201906040850190845b818110156121805783516001600160e01b0319168352928401929184019160010161215a565b50909695505050505050565b6000806000606084860312156121a157600080fd5b83356121ac81611fed565b925060208401356121bc81611fed565b915060408401356121cc81611fed565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612216576122166121d7565b604052919050565b600067ffffffffffffffff821115612238576122386121d7565b50601f01601f191660200190565b60006020828403121561225857600080fd5b813567ffffffffffffffff81111561226f57600080fd5b8201601f8101841361228057600080fd5b803561229361228e8261221e565b6121ed565b8181528560208385010111156122a857600080fd5b81602084016020830137600091810160200191909152949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612305576123056122dc565b500190565b600060001982141561231e5761231e6122dc565b5060010190565b6020808252600b908201526a10b0b93930bcb9903632b760a91b604082015260600190565b60005b8381101561236557818101518382015260200161234d565b83811115612374576000848401525b50505050565b60006020828403121561238c57600080fd5b815167ffffffffffffffff8111156123a357600080fd5b8201601f810184136123b457600080fd5b80516123c261228e8261221e565b8181528560208385010111156123d757600080fd5b6123e882602083016020860161234a565b95945050505050565b6000825161240381846020870161234a565b9190910192915050565b600060ff821680612420576124206122dc565b6000190192915050565b60006020828403121561243c57600080fd5b813562ffffff81168114611cf057600080fd5b600082821015612461576124616122dc565b500390565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080a000a", + "sourceMap": "187:10940:239:-:0;;;;;;;;;;;;-1:-1:-1;936:32:470;719:10:484;936:18:470;:32::i;:::-;187:10940:239;;1496:153:471;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;;;;;;;:34;;:::i;:::-;1496:153;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;187:10940:239:-;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101585760003560e01c80638da5cb5b116100c3578063d7341acf1161007c578063d7341acf1461035d578063dee7fe4814610370578063e187a7dd146103a4578063e30c3978146103b7578063eb29d9f8146103c8578063f2fde38b146103db57600080fd5b80638da5cb5b146102955780638db87c27146102a6578063a1bb91e3146102cf578063a700f9e4146102e2578063aeabb62114610316578063c8ff6fee1461032957600080fd5b8063514b49d911610115578063514b49d9146102375780635495a6d71461024a578063715018a61461025d57806372c9889c1461026557806379ba50971461027857806389f8132e1461028057600080fd5b80630d856eef1461015d5780632434cb7f1461017d5780633322d87714610192578063366eda2e146101b5578063398cd955146101c85780633c4f743c1461020c575b600080fd5b6101656103ee565b60405161017493929190611f82565b60405180910390f35b61019061018b366004612002565b6106da565b005b6101a56101a0366004612087565b610710565b6040519015158152602001610174565b6101906101c3366004612087565b610a0e565b6101f86101d6366004612002565b600d60209081526000928352604080842090915290825290205462ffffff1681565b60405162ffffff9091168152602001610174565b60025461021f906001600160a01b031681565b6040516001600160a01b039091168152602001610174565b610190610245366004612121565b610ae7565b610190610258366004612087565b610da0565b610190610e96565b610190610273366004612087565b610ee6565b610190611001565b61028861107b565b604051610174919061213e565b6000546001600160a01b031661021f565b61021f6102b4366004612121565b6007602052600090815260409020546001600160a01b031681565b6101906102dd366004612087565b611408565b61021f6102f0366004612002565b60066020908152600092835260408084209091529082529020546001600160a01b031681565b6101a5610324366004612087565b61178a565b61021f610337366004612002565b600e6020908152600092835260408084209091529082529020546001600160a01b031681565b61019061036b36600461218c565b611886565b61021f61037e366004612246565b80516020818301810180516005825292820191909301209152546001600160a01b031681565b6101906103b2366004612087565b611a30565b6001546001600160a01b031661021f565b6101a56103d6366004612087565b611b49565b6101906103e9366004612121565b611c22565b606080606060006103ff6009611ce3565b90506000805b8251811015610481576000838281518110610422576104226122c6565b60200260200101519050600061045b60086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905080518461046a91906122f2565b9350505080806104799061230a565b915050610405565b508067ffffffffffffffff81111561049b5761049b6121d7565b6040519080825280602002602001820160405280156104c4578160200160208202803683370190505b5094508067ffffffffffffffff8111156104e0576104e06121d7565b604051908082528060200260200182016040528015610509578160200160208202803683370190505b5093508067ffffffffffffffff811115610525576105256121d7565b60405190808252806020026020018201604052801561054e578160200160208202803683370190505b5092506000905060005b82518110156106d2576000838281518110610575576105756122c6565b6020026020010151905060006105ae60086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b81518110156106bc5760008282815181106105d0576105d06122c6565b6020908102919091018101516001600160a01b038082166000908152600684526040808220898416835290945292909220548c51919350909116908b908890811061061d5761061d6122c6565b60200260200101906001600160a01b031690816001600160a01b03168152505080898781518110610650576106506122c6565b60200260200101906001600160a01b031690816001600160a01b03168152505083888781518110610683576106836122c6565b6001600160a01b0390921660209283029190910190910152856106a58161230a565b9650505080806106b49061230a565b9150506105b3565b50505080806106ca9061230a565b915050610558565b505050909192565b6106e2611cf7565b6001600160a01b03918216600090815260076020526040902080546001600160a01b03191691909216179055565b60008060008061071e6103ee565b92509250925060005b8981101561088f576000805b8551811015610868578c8c8481811061074e5761074e6122c6565b90506020020160208101906107639190612121565b6001600160a01b031686828151811061077e5761077e6122c6565b60200260200101516001600160a01b03161480156107ec57508a8a848181106107a9576107a96122c6565b90506020020160208101906107be9190612121565b6001600160a01b03168582815181106107d9576107d96122c6565b60200260200101516001600160a01b0316145b80156108485750888884818110610805576108056122c6565b905060200201602081019061081a9190612121565b6001600160a01b0316848281518110610835576108356122c6565b60200260200101516001600160a01b0316145b156108565760019150610868565b806108608161230a565b915050610733565b508061087c57600095505050505050610a04565b50806108878161230a565b915050610727565b5060005b83518110156109fb576000805b8b8110156109d4578c8c828181106108ba576108ba6122c6565b90506020020160208101906108cf9190612121565b6001600160a01b03168684815181106108ea576108ea6122c6565b60200260200101516001600160a01b031614801561095857508a8a82818110610915576109156122c6565b905060200201602081019061092a9190612121565b6001600160a01b0316858481518110610945576109456122c6565b60200260200101516001600160a01b0316145b80156109b45750888882818110610971576109716122c6565b90506020020160208101906109869190612121565b6001600160a01b03168484815181106109a1576109a16122c6565b60200260200101516001600160a01b0316145b156109c257600191506109d4565b806109cc8161230a565b9150506108a0565b50806109e857600095505050505050610a04565b50806109f38161230a565b915050610893565b50600193505050505b9695505050505050565b610a16611cf7565b8483148015610a2457508281145b610a495760405162461bcd60e51b8152600401610a4090612325565b60405180910390fd5b60005b85811015610ade57610acc878783818110610a6957610a696122c6565b9050602002016020810190610a7e9190612121565b868684818110610a9057610a906122c6565b9050602002016020810190610aa59190612121565b858585818110610ab757610ab76122c6565b905060200201602081019061036b9190612121565b80610ad68161230a565b915050610a4c565b50505050505050565b610aef611cf7565b6000610afb6009611ce3565b905060005b8151811015610ce9576000828281518110610b1d57610b1d6122c6565b602002602001015190506000610b5660086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b8151811015610ca1576000828281518110610b7857610b786122c6565b6020908102919091018101516001600160a01b038082166000908152600684526040808220898416835290945292909220549092508116908816811415610c8c576001600160a01b03808316600090815260066020908152604080832093891683529290522080546001600160a01b03191690558351610c3f90859085908110610c0457610c046122c6565b602002602001015160086000886001600160a01b03166001600160a01b03168152602001908152602001600020611d5390919063ffffffff16565b506001600160a01b0382811660009081526007602052604090205481169086161415610c8c576001600160a01b038216600090815260076020526040902080546001600160a01b03191690555b50508080610c999061230a565b915050610b5b565b506001600160a01b0382166000908152600860205260409020610cc390611d68565b610cd457610cd2600983611d53565b505b50508080610ce19061230a565b915050610b00565b5060006005836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa158015610d2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d54919081019061237a565b604051610d6191906123f1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b0319909216919091179055610d9b600383611d53565b505050565b610da8611cf7565b8085148015610db657508483145b610dd25760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110610def57610def6122c6565b90506020020135600b6000898985818110610e0c57610e0c6122c6565b9050602002016020810190610e219190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110610e5557610e556122c6565b9050602002016020810190610e6a9190612121565b6001600160a01b0316815260208101919091526040016000205580610e8e8161230a565b915050610dd5565b610e9e611cf7565b60405162461bcd60e51b815260206004820152601e60248201527f72656e6f756e6365206f776e657273686970206e6f7420616c6c6f77656400006044820152606401610a40565b610eee611cf7565b8085148015610efc57508483145b610f185760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110610f3557610f356122c6565b9050602002016020810190610f4a9190612121565b600e6000898985818110610f6057610f606122c6565b9050602002016020810190610f759190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110610fa957610fa96122c6565b9050602002016020810190610fbe9190612121565b6001600160a01b039081168252602082019290925260400160002080546001600160a01b0319169290911691909117905580610ff98161230a565b915050610f1b565b60015433906001600160a01b0316811461106f5760405162461bcd60e51b815260206004820152602960248201527f4f776e61626c6532537465703a2063616c6c6572206973206e6f7420746865206044820152683732bb9037bbb732b960b91b6064820152608401610a40565b61107881611d72565b50565b60408051600c8082526101a0820190925260609190600090826020820161018080368337019050509050630d856eef60e01b816110b78461240d565b93508360ff16815181106110cd576110cd6122c6565b6001600160e01b031990921660209283029190910190910152633322d87760e01b816110f88461240d565b93508360ff168151811061110e5761110e6122c6565b6001600160e01b031990921660209283029190910190910152631d653b3f60e31b816111398461240d565b93508360ff168151811061114f5761114f6122c6565b6001600160e01b03199092166020928302919091019091015263aeabb62160e01b8161117a8461240d565b93508360ff1681518110611190576111906122c6565b6001600160e01b031990921660209283029190910190910152635495a6d760e01b816111bb8461240d565b93508360ff16815181106111d1576111d16122c6565b6001600160e01b03199092166020928302919091019091015263e187a7dd60e01b816111fc8461240d565b93508360ff1681518110611212576112126122c6565b6001600160e01b031990921660209283029190910190910152631cb2622760e21b8161123d8461240d565b93508360ff1681518110611253576112536122c6565b6001600160e01b031990921660209283029190910190910152632434cb7f60e01b8161127e8461240d565b93508360ff1681518110611294576112946122c6565b6001600160e01b03199092166020928302919091019091015263d7341acf60e01b816112bf8461240d565b93508360ff16815181106112d5576112d56122c6565b6001600160e01b031990921660209283029190910190910152631b376d1760e11b816113008461240d565b93508360ff1681518110611316576113166122c6565b6001600160e01b03199092166020928302919091019091015263514b49d960e01b816113418461240d565b93508360ff1681518110611357576113576122c6565b6001600160e01b03199092166020928302919091019091015263a1bb91e360e01b816113828461240d565b93508360ff1681518110611398576113986122c6565b6001600160e01b03199092166020928302919091019091015260ff8216156114025760405162461bcd60e51b815260206004820152601c60248201527f7573652074686520636f7272656374206172726179206c656e677468000000006044820152606401610a40565b92915050565b611410611cf7565b848314801561141e57508281145b61143a5760405162461bcd60e51b8152600401610a4090612325565b60006114466009611ce3565b905060005b81518110156115d4576000828281518110611468576114686122c6565b6020026020010151905060006114a160086000846001600160a01b03166001600160a01b03168152602001908152602001600020611ce3565b905060005b81518110156115905760008282815181106114c3576114c36122c6565b6020908102919091018101516001600160a01b03808216600090815260068452604080822092891682529190935290912080546001600160a01b031916905583519091506115589084908490811061151d5761151d6122c6565b602002602001015160086000876001600160a01b03166001600160a01b03168152602001908152602001600020611d5390919063ffffffff16565b506001600160a01b0316600090815260076020526040902080546001600160a01b0319169055806115888161230a565b9150506114a6565b506115be8484815181106115a6576115a66122c6565b60200260200101516009611d5390919063ffffffff16565b50505080806115cc9061230a565b91505061144b565b5060006115e16003611ce3565b905060005b81518110156116fe576000828281518110611603576116036122c6565b602002602001015190506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561164d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611675919081019061237a565b9050600060058260405161168991906123f1565b908152602001604051809103902060006101000a8154816001600160a01b0302191690836001600160a01b031602179055506116e88484815181106116d0576116d06122c6565b60200260200101516003611d5390919063ffffffff16565b50505080806116f69061230a565b9150506115e6565b5060005b8781101561177f5761176d89898381811061171f5761171f6122c6565b90506020020160208101906117349190612121565b888884818110611746576117466122c6565b905060200201602081019061175b9190612121565b878785818110610ab757610ab76122c6565b806117778161230a565b915050611702565b505050505050505050565b6000805b82811015611878578383828181106117a8576117a86122c6565b90506020020160208101906117bd9190612121565b6001600160a01b0316600e60008a8a858181106117dc576117dc6122c6565b90506020020160208101906117f19190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611825576118256122c6565b905060200201602081019061183a9190612121565b6001600160a01b0390811682526020820192909252604001600020541614611866576000915050610a04565b806118708161230a565b91505061178e565b506001979650505050505050565b61188e611cf7565b6000836001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156118ce573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526118f6919081019061237a565b9050600060058260405161190a91906123f1565b9081526040805160209281900383018120546001600160a01b0388811660009081526006865284812089831682529095529290932080546001600160a01b0319168984161790559116915085906005906119659085906123f1565b90815260405190819003602001902080546001600160a01b03929092166001600160a01b031990921691909117905561199f600382611d53565b506119ab600386611d8b565b506001600160a01b03848116600090815260076020526040902054166119fa576001600160a01b03848116600090815260076020526040902080546001600160a01b0319169185169190911790555b6001600160a01b0383166000908152600860205260409020611a1c9085611d8b565b50611a28600984611d8b565b505050505050565b611a38611cf7565b8085148015611a4657508483145b611a625760405162461bcd60e51b8152600401610a4090612325565b60005b81811015610ade57828282818110611a7f57611a7f6122c6565b9050602002016020810190611a94919061242a565b600d6000898985818110611aaa57611aaa6122c6565b9050602002016020810190611abf9190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000878785818110611af357611af36122c6565b9050602002016020810190611b089190612121565b6001600160a01b031681526020810191909152604001600020805462ffffff191662ffffff9290921691909117905580611b418161230a565b915050611a65565b6000805b8281101561187857838382818110611b6757611b676122c6565b90506020020135600d60008a8a85818110611b8457611b846122c6565b9050602002016020810190611b999190612121565b6001600160a01b03166001600160a01b031681526020019081526020016000206000888885818110611bcd57611bcd6122c6565b9050602002016020810190611be29190612121565b6001600160a01b0316815260208101919091526040016000205462ffffff1614611c10576000915050610a04565b80611c1a8161230a565b915050611b4d565b611c2a611cf7565b600180546001600160a01b0383166001600160a01b03199091168117909155611c5b6000546001600160a01b031690565b6001600160a01b03167f38d16b8cac22d99fc7c124b9cd0de2d3fa1faef420bfe791d8c362d765e2270060405160405180910390a350565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b60606000611cf083611da0565b9392505050565b6000546001600160a01b03163314611d515760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401610a40565b565b6000611cf0836001600160a01b038416611dfc565b6000611402825490565b600180546001600160a01b031916905561107881611c93565b6000611cf0836001600160a01b038416611eef565b606081600001805480602002602001604051908101604052809291908181526020018280548015611df057602002820191906000526020600020905b815481526020019060010190808311611ddc575b50505050509050919050565b60008181526001830160205260408120548015611ee5576000611e2060018361244f565b8554909150600090611e349060019061244f565b9050818114611e99576000866000018281548110611e5457611e546122c6565b9060005260206000200154905080876000018481548110611e7757611e776122c6565b6000918252602080832090910192909255918252600188019052604090208390555b8554869080611eaa57611eaa612466565b600190038181906000526020600020016000905590558560010160008681526020019081526020016000206000905560019350505050611402565b6000915050611402565b6000818152600183016020526040812054611f3657508154600181810184556000848152602080822090930184905584548482528286019093526040902091909155611402565b506000611402565b600081518084526020808501945080840160005b83811015611f775781516001600160a01b031687529582019590820190600101611f52565b509495945050505050565b606080825284519082018190526000906020906080840190828801845b82811015611fc45781516001600160a01b031684529284019290840190600101611f9f565b50505083810382850152611fd88187611f3e565b9150508281036040840152610a048185611f3e565b6001600160a01b038116811461107857600080fd5b6000806040838503121561201557600080fd5b823561202081611fed565b9150602083013561203081611fed565b809150509250929050565b60008083601f84011261204d57600080fd5b50813567ffffffffffffffff81111561206557600080fd5b6020830191508360208260051b850101111561208057600080fd5b9250929050565b600080600080600080606087890312156120a057600080fd5b863567ffffffffffffffff808211156120b857600080fd5b6120c48a838b0161203b565b909850965060208901359150808211156120dd57600080fd5b6120e98a838b0161203b565b9096509450604089013591508082111561210257600080fd5b5061210f89828a0161203b565b979a9699509497509295939492505050565b60006020828403121561213357600080fd5b8135611cf081611fed565b6020808252825182820181905260009190848201906040850190845b818110156121805783516001600160e01b0319168352928401929184019160010161215a565b50909695505050505050565b6000806000606084860312156121a157600080fd5b83356121ac81611fed565b925060208401356121bc81611fed565b915060408401356121cc81611fed565b809150509250925092565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612216576122166121d7565b604052919050565b600067ffffffffffffffff821115612238576122386121d7565b50601f01601f191660200190565b60006020828403121561225857600080fd5b813567ffffffffffffffff81111561226f57600080fd5b8201601f8101841361228057600080fd5b803561229361228e8261221e565b6121ed565b8181528560208385010111156122a857600080fd5b81602084016020830137600091810160200191909152949350505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60008219821115612305576123056122dc565b500190565b600060001982141561231e5761231e6122dc565b5060010190565b6020808252600b908201526a10b0b93930bcb9903632b760a91b604082015260600190565b60005b8381101561236557818101518382015260200161234d565b83811115612374576000848401525b50505050565b60006020828403121561238c57600080fd5b815167ffffffffffffffff8111156123a357600080fd5b8201601f810184136123b457600080fd5b80516123c261228e8261221e565b8181528560208385010111156123d757600080fd5b6123e882602083016020860161234a565b95945050505050565b6000825161240381846020870161234a565b9190910192915050565b600060ff821680612420576124206122dc565b6000190192915050565b60006020828403121561243c57600080fd5b813562ffffff81168114611cf057600080fd5b600082821015612461576124616122dc565b500390565b634e487b7160e01b600052603160045260246000fdfea164736f6c634300080a000a", + "sourceMap": "187:10940:239:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9734:1391;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;2792:167;;;;;;:::i;:::-;;:::i;:::-;;8274:1456;;;;;;:::i;:::-;;:::i;:::-;;;4105:14:504;;4098:22;4080:41;;4068:2;4053:18;8274:1456:239;3940:187:504;3716:454:239;;;;;;:::i;:::-;;:::i;1164:87:240:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4306:8:504;4294:21;;;4276:40;;4264:2;4249:18;1164:87:240;4132:190:504;450:27:240;;;;;-1:-1:-1;;;;;450:27:240;;;;;;-1:-1:-1;;;;;4518:32:504;;;4500:51;;4488:2;4473:18;450:27:240;4327:230:504;5925:1462:239;;;;;;:::i;:::-;;:::i;1529:425::-;;;;;;:::i;:::-;;:::i;174:106:139:-;;;:::i;2365:423:239:-;;;;;;:::i;:::-;;:::i;1729:206:471:-;;;:::i;379:1146:239:-;;;:::i;:::-;;;;;;;:::i;1201:85:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;1201:85;;735:73:240;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;735:73:240;;;4174:1747:239;;;;;;:::i;:::-;;:::i;616:115:240:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;616:115:240;;;7823:447:239;;;;;;:::i;:::-;;:::i;1255:92:240:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1255:92:240;;;2963:749:239;;;;;;:::i;:::-;;:::i;540:72:240:-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:72:240;;;1958:403:239;;;;;;:::i;:::-;;:::i;842:99:471:-;921:13;;-1:-1:-1;;;;;921:13:471;842:99;;7391:428:239;;;;;;:::i;:::-;;:::i;1134:178:471:-;;;;;;:::i;:::-;;:::i;9734:1391:239:-;9807:39;9854:38;9900:39;9954:30;9987:24;:15;:22;:24::i;:::-;9954:57;;10017:20;10061:9;10056:272;10080:13;:20;10076:1;:24;10056:272;;;10117:30;10168:13;10182:1;10168:16;;;;;;;;:::i;:::-;;;;;;;10117:68;;10195:29;10227:47;:24;:38;10252:12;-1:-1:-1;;;;;10227:38:239;-1:-1:-1;;;;;10227:38:239;;;;;;;;;;;;:45;:47::i;:::-;10195:79;;10300:12;:19;10284:35;;;;;:::i;:::-;;;10107:221;;10102:3;;;;;:::i;:::-;;;;10056:272;;;;10375:12;10349:39;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10349:39:239;;10336:52;;10434:12;10410:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10410:37:239;;10396:51;;10494:12;10470:37;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10470:37:239;;10455:52;;10535:1;10520:16;;10547:9;10542:579;10566:13;:20;10562:1;:24;10542:579;;;10601:30;10652:13;10666:1;10652:16;;;;;;;;:::i;:::-;;;;;;;10601:68;;10677:29;10709:47;:24;:38;10734:12;-1:-1:-1;;;;;10709:38:239;-1:-1:-1;;;;;10709:38:239;;;;;;;;;;;;:45;:47::i;:::-;10677:79;;10769:9;10764:351;10788:12;:19;10784:1;:23;10764:351;;;10824:29;10874:12;10887:1;10874:15;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;10927:41:239;;;;;;;:28;:41;;;;;;:55;;;;;;;;;;;;;10900:24;;10874:15;;-1:-1:-1;10927:55:239;;;;10900:10;;10911:12;;10900:24;;;;;;:::i;:::-;;;;;;:82;-1:-1:-1;;;;;10900:82:239;;;-1:-1:-1;;;;;10900:82:239;;;;;11020:11;10992;11004:12;10992:25;;;;;;;;:::i;:::-;;;;;;:39;-1:-1:-1;;;;;10992:39:239;;;-1:-1:-1;;;;;10992:39:239;;;;;11070:12;11041;11054;11041:26;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11041:41:239;;;:26;;;;;;;;;;;:41;11092:14;;;;:::i;:::-;;;;10814:301;10809:3;;;;;:::i;:::-;;;;10764:351;;;;10593:528;;10588:3;;;;;:::i;:::-;;;;10542:579;;;;9948:1177;;9734:1391;;;:::o;2792:167::-;1094:13:470;:11;:13::i;:::-;-1:-1:-1;;;;;2910:30:239;;::::1;;::::0;;;:18:::1;:30;::::0;;;;:44;;-1:-1:-1;;;;;;2910:44:239::1;::::0;;;::::1;;::::0;;2792:167::o;8274:1456::-;8489:4;8509:46;8563:45;8616:46;8671:23;:21;:23::i;:::-;8501:193;;;;;;8750:9;8745:455;8765:27;;;8745:455;;;8807:15;8843:9;8838:319;8862:17;:24;8858:1;:28;8838:319;;;8942:16;;8959:1;8942:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8918:43:239;:17;8936:1;8918:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8918:43:239;;:102;;;;;9000:17;;9018:1;9000:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8975:45:239;:18;8994:1;8975:21;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;8975:45:239;;8918:102;:163;;;;;9060:18;;9079:1;9060:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9034:47:239;:19;9054:1;9034:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9034:47:239;;8918:163;8903:246;;;9117:4;9104:17;;9133:5;;8903:246;8888:3;;;;:::i;:::-;;;;8838:319;;;;9169:10;9164:29;;9188:5;9181:12;;;;;;;;;9164:29;-1:-1:-1;8794:3:239;;;;:::i;:::-;;;;8745:455;;;;9258:9;9253:455;9277:17;:24;9273:1;:28;9253:455;;;9316:15;9352:9;9347:318;9367:27;;;9347:318;;;9450:16;;9467:1;9450:19;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9426:43:239;:17;9444:1;9426:20;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9426:43:239;;:102;;;;;9508:17;;9526:1;9508:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9483:45:239;:18;9502:1;9483:21;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9483:45:239;;9426:102;:163;;;;;9568:18;;9587:1;9568:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;9542:47:239;:19;9562:1;9542:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;9542:47:239;;9426:163;9411:246;;;9625:4;9612:17;;9641:5;;9411:246;9396:3;;;;:::i;:::-;;;;9347:318;;;;9677:10;9672:29;;9696:5;9689:12;;;;;;;;;9672:29;-1:-1:-1;9303:3:239;;;;:::i;:::-;;;;9253:455;;;;9721:4;9714:11;;;;;8274:1456;;;;;;;;;:::o;3716:454::-;1094:13:470;:11;:13::i;:::-;3927:39:239;;::::1;:84:::0;::::1;;;-1:-1:-1::0;3970:41:239;;::::1;3927:84;3919:108;;;;-1:-1:-1::0;;;3919:108:239::1;;;;;;;:::i;:::-;;;;;;;;;4038:9;4033:133;4053:21:::0;;::::1;4033:133;;;4089:70;4112:10;;4123:1;4112:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4127:11;;4139:1;4127:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;4143:12;;4156:1;4143:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;4089:70::-;4076:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4033:133;;;;3716:454:::0;;;;;;:::o;5925:1462::-;1094:13:470;:11;:13::i;:::-;6101:30:239::1;6134:24;:15;:22;:24::i;:::-;6101:57;;6169:9;6164:1067;6188:13;:20;6184:1;:24;6164:1067;;;6223:30;6274:13;6288:1;6274:16;;;;;;;;:::i;:::-;;;;;;;6223:68;;6299:29;6331:47;:24;:38;6356:12;-1:-1:-1::0;;;;;6331:38:239::1;-1:-1:-1::0;;;;;6331:38:239::1;;;;;;;;;;;;:45;:47::i;:::-;6299:79;;6391:9;6386:710;6410:12;:19;6406:1;:23;6386:710;;;6446:29;6496:12;6509:1;6496:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;6561:41:239;;::::1;6522:36;6561:41:::0;;;:28:::1;:41:::0;;;;;;:55;;::::1;::::0;;;;;;;;;;6496:15;;-1:-1:-1;6561:55:239;::::1;::::0;6710:36;::::1;::::0;::::1;6706:382;;;-1:-1:-1::0;;;;;6760:41:239;;::::1;6846:1;6760:41:::0;;;:28:::1;:41;::::0;;;;;;;:55;;::::1;::::0;;;;;;:89;;-1:-1:-1;;;;;;6760:89:239::1;::::0;;6907:15;;6861:62:::1;::::0;6907:12;;6920:1;;6907:15;::::1;;;;;:::i;:::-;;;;;;;6861:24;:38;6886:12;-1:-1:-1::0;;;;;6861:38:239::1;-1:-1:-1::0;;;;;6861:38:239::1;;;;;;;;;;;;:45;;:62;;;;:::i;:::-;-1:-1:-1::0;;;;;;6939:31:239;;::::1;;::::0;;;:18:::1;:31;::::0;;;;;;::::1;:47:::0;;::::1;;6935:143;;;-1:-1:-1::0;;;;;7002:31:239;::::1;7062:1;7002:31:::0;;;:18:::1;:31;::::0;;;;:63;;-1:-1:-1;;;;;;7002:63:239::1;::::0;;6935:143:::1;6436:660;;6431:3;;;;;:::i;:::-;;;;6386:710;;;-1:-1:-1::0;;;;;;7107:38:239;::::1;;::::0;;;:24:::1;:38;::::0;;;;:47:::1;::::0;:45:::1;:47::i;:::-;7103:122;;7171:45;:15;7202:12:::0;7171:22:::1;:45::i;:::-;;7103:122;6215:1016;;6210:3;;;;;:::i;:::-;;;;6164:1067;;;;7319:1;7237:26;7264:16;-1:-1:-1::0;;;;;7264:21:239::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;7264:23:239::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;7237:51;;;;;;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:85;;-1:-1:-1;;;;;7237:85:239;;;::::1;-1:-1:-1::0;;;;;;7237:85:239;;::::1;::::0;;;::::1;::::0;;7328:54:::1;:20;7364:16:::0;7328:27:::1;:54::i;:::-;;6017:1370;5925:1462:::0;:::o;1529:425::-;1094:13:470;:11;:13::i;:::-;1716:38:239;;::::1;:83:::0;::::1;;;-1:-1:-1::0;1758:41:239;;::::1;1716:83;1708:107;;;;-1:-1:-1::0;;;1708:107:239::1;;;;;;;:::i;:::-;1827:9;1822:128;1842:20:::0;;::::1;1822:128;;;1931:9;;1941:1;1931:12;;;;;;;:::i;:::-;;;;;;;1877:18;:34;1896:11;;1908:1;1896:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1877:34:239::1;-1:-1:-1::0;;;;;1877:34:239::1;;;;;;;;;;;;:51;1912:12;;1925:1;1912:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1877:51:239::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;1877:51:239;:66;1864:3;::::1;::::0;::::1;:::i;:::-;;;;1822:128;;174:106:139::0;1094:13:470;:11;:13::i;:::-;235:40:139::1;::::0;-1:-1:-1;;;235:40:139;;14632:2:504;235:40:139::1;::::0;::::1;14614:21:504::0;14671:2;14651:18;;;14644:30;14710:32;14690:18;;;14683:60;14760:18;;235:40:139::1;14430:354:504::0;2365:423:239;1094:13:470;:11;:13::i;:::-;2557:36:239;;::::1;:81:::0;::::1;;;-1:-1:-1::0;2597:41:239;;::::1;2557:81;2549:105;;;;-1:-1:-1::0;;;2549:105:239::1;;;;;;;:::i;:::-;2666:9;2661:123;2681:18:::0;;::::1;2661:123;;;2767:7;;2775:1;2767:10;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2714:17;:33;2732:11;;2744:1;2732:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2714:33:239::1;-1:-1:-1::0;;;;;2714:33:239::1;;;;;;;;;;;;:50;2748:12;;2761:1;2748:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2714:50:239;;::::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2714:50:239;:63;;-1:-1:-1;;;;;;2714:63:239::1;::::0;;;::::1;::::0;;;::::1;::::0;;2701:3;::::1;::::0;::::1;:::i;:::-;;;;2661:123;;1729:206:471::0;921:13;;719:10:484;;-1:-1:-1;;;;;921:13:471;1822:24;;1814:78;;;;-1:-1:-1;;;1814:78:471;;14991:2:504;1814:78:471;;;14973:21:504;15030:2;15010:18;;;15003:30;15069:34;15049:18;;;15042:62;-1:-1:-1;;;15120:18:504;;;15113:39;15169:19;;1814:78:471;14789:405:504;1814:78:471;1902:26;1921:6;1902:18;:26::i;:::-;1765:170;1729:206::o;379:1146:239:-;529:22;;;485:2;529:22;;;;;;;;;445:15;;485:2;468:14;;485:2;529:22;;;;;;;;;;-1:-1:-1;;493:58:239;-1:-1:-1;;;;493:58:239;575:10;;;:::i;:::-;;;;557:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;557:67:239;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;630:17:239;648:10;;;:::i;:::-;;;;630:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;630:66:239;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;702:17:239;720:10;;;:::i;:::-;;;;702:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;702:67:239;;;:29;;;;;;;;;;;:67;-1:-1:-1;;;775:17:239;793:10;;;:::i;:::-;;;;775:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;775:70:239;;;:29;;;;;;;;;;;:70;-1:-1:-1;;;851:17:239;869:10;;;:::i;:::-;;;;851:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;851:59:239;;;:29;;;;;;;;;;;:59;-1:-1:-1;;;916:17:239;934:10;;;:::i;:::-;;;;916:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;916:63:239;;;:29;;;;;;;;;;;:63;-1:-1:-1;;;985:17:239;1003:10;;;:::i;:::-;;;;985:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;985:66:239;;;:29;;;;;;;;;;;:66;-1:-1:-1;;;1057:17:239;1075:10;;;:::i;:::-;;;;1057:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1057:68:239;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;1131:17:239;1149:10;;;:::i;:::-;;;;1131:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1131:68:239;;;:29;;;;;;;;;;;:68;-1:-1:-1;;;1205:17:239;1223:10;;;:::i;:::-;;;;1205:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1205:70:239;;;:29;;;;;;;;;;;:70;-1:-1:-1;;;1281:17:239;1299:10;;;:::i;:::-;;;;1281:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1281:71:239;;;:29;;;;;;;;;;;:71;-1:-1:-1;;;1358:17:239;1376:10;;;:::i;:::-;;;;1358:29;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;;1358:72:239;;;:29;;;;;;;;;;;:72;1444:13;;;;1436:54;;;;-1:-1:-1;;;1436:54:239;;15584:2:504;1436:54:239;;;15566:21:504;15623:2;15603:18;;;15596:30;15662;15642:18;;;15635:58;15710:18;;1436:54:239;15382:352:504;1436:54:239;1503:17;379:1146;-1:-1:-1;;379:1146:239:o;4174:1747::-;1094:13:470;:11;:13::i;:::-;4387:39:239;;::::1;:84:::0;::::1;;;-1:-1:-1::0;4430:41:239;;::::1;4387:84;4379:108;;;;-1:-1:-1::0;;;4379:108:239::1;;;;;;;:::i;:::-;4544:30;4577:24;:15;:22;:24::i;:::-;4544:57;;4612:9;4607:655;4631:13;:20;4627:1;:24;4607:655;;;4666:30;4717:13;4731:1;4717:16;;;;;;;;:::i;:::-;;;;;;;4666:68;;4742:29;4774:47;:24;:38;4799:12;-1:-1:-1::0;;;;;4774:38:239::1;-1:-1:-1::0;;;;;4774:38:239::1;;;;;;;;;;;;:45;:47::i;:::-;4742:79;;4834:9;4829:379;4853:12;:19;4849:1;:23;4829:379;;;4889:29;4939:12;4952:1;4939:15;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;4965:41:239;;::::1;5051:1;4965:41:::0;;;:28:::1;:41:::0;;;;;;:55;;::::1;::::0;;;;;;;;;:89;;-1:-1:-1;;;;;;4965:89:239::1;::::0;;5110:15;;4939;;-1:-1:-1;5064:62:239::1;::::0;5110:12;;5123:1;;5110:15;::::1;;;;;:::i;:::-;;;;;;;5064:24;:38;5089:12;-1:-1:-1::0;;;;;5064:38:239::1;-1:-1:-1::0;;;;;5064:38:239::1;;;;;;;;;;;;:45;;:62;;;;:::i;:::-;-1:-1:-1::0;;;;;;5136:31:239::1;5196:1;5136:31:::0;;;:18:::1;:31;::::0;;;;:63;;-1:-1:-1;;;;;;5136:63:239::1;::::0;;4874:3;::::1;::::0;::::1;:::i;:::-;;;;4829:379;;;;5215:40;5238:13;5252:1;5238:16;;;;;;;;:::i;:::-;;;;;;;5215:15;:22;;:40;;;;:::i;:::-;;4658:604;;4653:3;;;;;:::i;:::-;;;;4607:655;;;;5310:35;5348:29;:20;:27;:29::i;:::-;5310:67;;5388:9;5383:338;5407:18;:25;5403:1;:29;5383:338;;;5447:36;5506:18;5525:1;5506:21;;;;;;;;:::i;:::-;;;;;;;5447:81;;5536:19;5558:16;-1:-1:-1::0;;;;;5558:21:239::1;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;5558:23:239::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;5536:45;;5653:1;5589:26;5616:5;5589:33;;;;;;:::i;:::-;;;;;;;;;;;;;;:67;;;;;-1:-1:-1::0;;;;;5589:67:239::1;;;;;-1:-1:-1::0;;;;;5589:67:239::1;;;;;;5664:50;5692:18;5711:1;5692:21;;;;;;;;:::i;:::-;;;;;;;5664:20;:27;;:50;;;;:::i;:::-;;5439:282;;5434:3;;;;;:::i;:::-;;;;5383:338;;;;5789:9;5784:133;5804:21:::0;;::::1;5784:133;;;5840:70;5863:10;;5874:1;5863:13;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5878:11;;5890:1;5878:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;5894:12;;5907:1;5894:15;;;;;;;:::i;5840:70::-;5827:3:::0;::::1;::::0;::::1;:::i;:::-;;;;5784:133;;;;4373:1548;;4174:1747:::0;;;;;;:::o;7823:447::-;8027:4;;8082:166;8102:24;;;8082:166;;;8211:13;;8225:1;8211:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:82:239;:17;:39;8163:17;;8181:1;8163:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:39:239;-1:-1:-1;;;;;8145:39:239;;;;;;;;;;;;:62;8185:18;;8204:1;8185:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;8145:62:239;;;;;;;;;;;;;;-1:-1:-1;8145:62:239;;;:82;8141:100;;8236:5;8229:12;;;;;8141:100;8128:3;;;;:::i;:::-;;;;8082:166;;;-1:-1:-1;8261:4:239;;7823:447;-1:-1:-1;;;;;;;7823:447:239:o;2963:749::-;1094:13:470;:11;:13::i;:::-;3125:18:239::1;3146:8;-1:-1:-1::0;;;;;3146:13:239::1;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;::::0;;::::1;-1:-1:-1::0;;3146:15:239::1;::::0;::::1;;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;3125:36;;3167:31;3201:26;3228:4;3201:32;;;;;;:::i;:::-;::::0;;;::::1;::::0;;::::1;::::0;;;;;;;;;-1:-1:-1;;;;;3240:40:239;;::::1;3201:32;3240:40:::0;;;:28:::1;:40:::0;;;;;:53;;::::1;::::0;;;;;;;;;:64;;-1:-1:-1;;;;;;3240:64:239::1;::::0;;::::1;;::::0;;3201:32;::::1;::::0;-1:-1:-1;3240:64:239;;3310:26:::1;::::0;:32:::1;::::0;3337:4;;3310:32:::1;:::i;:::-;::::0;;;::::1;::::0;;;;;::::1;::::0;;;:43;;-1:-1:-1;;;;;3310:43:239;;;::::1;-1:-1:-1::0;;;;;;3310:43:239;;::::1;::::0;;;::::1;::::0;;3360:49:::1;:20;3396:11:::0;3360:27:::1;:49::i;:::-;-1:-1:-1::0;3415:43:239::1;:20;3448:8:::0;3415:24:::1;:43::i;:::-;-1:-1:-1::0;;;;;;3469:30:239;;::::1;3529:1;3469:30:::0;;;:18:::1;:30;::::0;;;;;::::1;3465:128;;-1:-1:-1::0;;;;;3542:30:239;;::::1;;::::0;;;:18:::1;:30;::::0;;;;:44;;-1:-1:-1;;;;;;3542:44:239::1;::::0;;::::1;::::0;;;::::1;::::0;;3465:128:::1;-1:-1:-1::0;;;;;3598:37:239;::::1;;::::0;;;:24:::1;:37;::::0;;;;:62:::1;::::0;3648:10;3598:41:::1;:62::i;:::-;-1:-1:-1::0;3666:41:239::1;:15;3694:11:::0;3666:19:::1;:41::i;:::-;;3119:593;;2963:749:::0;;;:::o;1958:403::-;1094:13:470;:11;:13::i;:::-;2143:33:239;;::::1;:78:::0;::::1;;;-1:-1:-1::0;2180:41:239;;::::1;2143:78;2135:102;;;;-1:-1:-1::0;;;2135:102:239::1;;;;;;;:::i;:::-;2249:9;2244:113;2264:15:::0;;::::1;2244:113;;;2343:4;;2348:1;2343:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;2294:13;:29;2308:11;;2320:1;2308:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2294:29:239::1;-1:-1:-1::0;;;;;2294:29:239::1;;;;;;;;;;;;:46;2324:12;;2337:1;2324:15;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2294:46:239::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2294:46:239;:56;;-1:-1:-1;;2294:56:239::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2281:3;::::1;::::0;::::1;:::i;:::-;;;;2244:113;;7391:428:::0;7589:4;;7641:156;7661:21;;;7641:156;;;7763:10;;7774:1;7763:13;;;;;;;:::i;:::-;;;;;;;7701;:35;7715:17;;7733:1;7715:20;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7701:35:239;-1:-1:-1;;;;;7701:35:239;;;;;;;;;;;;:58;7737:18;;7756:1;7737:21;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7701:58:239;;;;;;;;;;;;-1:-1:-1;7701:58:239;;;;:75;7697:93;;7785:5;7778:12;;;;;7697:93;7684:3;;;;:::i;:::-;;;;7641:156;;1134:178:471;1094:13:470;:11;:13::i;:::-;1223::471::1;:24:::0;;-1:-1:-1;;;;;1223:24:471;::::1;-1:-1:-1::0;;;;;;1223:24:471;;::::1;::::0;::::1;::::0;;;1287:7:::1;1247::470::0;1273:6;-1:-1:-1;;;;;1273:6:470;;1201:85;1287:7:471::1;-1:-1:-1::0;;;;;1262:43:471::1;;;;;;;;;;;1134:178:::0;:::o;2433:187:470:-;2506:16;2525:6;;-1:-1:-1;;;;;2541:17:470;;;-1:-1:-1;;;;;;2541:17:470;;;;;;2573:40;;2525:6;;;;;;;2573:40;;2506:16;2573:40;2496:124;2433:187;:::o;10251:300:487:-;10314:16;10342:22;10367:19;10375:3;10367:7;:19::i;:::-;10342:44;10251:300;-1:-1:-1;;;10251:300:487:o;1359:130:470:-;1247:7;1273:6;-1:-1:-1;;;;;1273:6:470;719:10:484;1422:23:470;1414:68;;;;-1:-1:-1;;;1414:68:470;;16220:2:504;1414:68:470;;;16202:21:504;;;16239:18;;;16232:30;16298:34;16278:18;;;16271:62;16350:18;;1414:68:470;16018:356:504;1414:68:470;1359:130::o;8615:156:487:-;8688:4;8711:53;8719:3;-1:-1:-1;;;;;8739:23:487;;8711:7;:53::i;9098:115::-;9161:7;9187:19;9195:3;4537:18;;4455:107;1496:153:471;1585:13;1578:20;;-1:-1:-1;;;;;;1578:20:471;;;1608:34;1633:8;1608:24;:34::i;8297:150:487:-;8367:4;8390:50;8395:3;-1:-1:-1;;;;;8415:23:487;;8390:4;:50::i;5562:109::-;5618:16;5653:3;:11;;5646:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5562:109;;;:::o;2778:1388::-;2844:4;2981:19;;;:12;;;:19;;;;;;3015:15;;3011:1149;;3384:21;3408:14;3421:1;3408:10;:14;:::i;:::-;3456:18;;3384:38;;-1:-1:-1;3436:17:487;;3456:22;;3477:1;;3456:22;:::i;:::-;3436:42;;3510:13;3497:9;:26;3493:398;;3543:17;3563:3;:11;;3575:9;3563:22;;;;;;;;:::i;:::-;;;;;;;;;3543:42;;3714:9;3685:3;:11;;3697:13;3685:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;;3797:23;;;:12;;;:23;;;;;:36;;;3493:398;3969:17;;:3;;:17;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4061:3;:12;;:19;4074:5;4061:19;;;;;;;;;;;4054:26;;;4102:4;4095:11;;;;;;;3011:1149;4144:5;4137:12;;;;;2206:404;2269:4;4343:19;;;:12;;;:19;;;;;;2285:319;;-1:-1:-1;2327:23:487;;;;;;;;:11;:23;;;;;;;;;;;;;2507:18;;2485:19;;;:12;;;:19;;;;;;:40;;;;2539:11;;2285:319;-1:-1:-1;2588:5:487;2581:12;;14:480:504;86:3;124:5;118:12;151:6;146:3;139:19;177:4;206:2;201:3;197:12;190:19;;243:2;236:5;232:14;264:1;274:195;288:6;285:1;282:13;274:195;;;353:13;;-1:-1:-1;;;;;349:39:504;337:52;;409:12;;;;444:15;;;;385:1;303:9;274:195;;;-1:-1:-1;485:3:504;;14:480;-1:-1:-1;;;;;14:480:504:o;499:1160::-;930:2;942:21;;;1012:13;;915:18;;;1034:22;;;882:4;;1110;;1087:3;1072:19;;;1137:15;;;882:4;1180:195;1194:6;1191:1;1188:13;1180:195;;;1259:13;;-1:-1:-1;;;;;1255:39:504;1243:52;;1315:12;;;;1350:15;;;;1291:1;1209:9;1180:195;;;1184:3;;;1420:9;1415:3;1411:19;1406:2;1395:9;1391:18;1384:47;1454:60;1510:3;1502:6;1454:60;:::i;:::-;1440:74;;;1562:9;1554:6;1550:22;1545:2;1534:9;1530:18;1523:50;1590:63;1646:6;1638;1590:63;:::i;1664:150::-;-1:-1:-1;;;;;1758:31:504;;1748:42;;1738:70;;1804:1;1801;1794:12;1819:482;1943:6;1951;2004:2;1992:9;1983:7;1979:23;1975:32;1972:52;;;2020:1;2017;2010:12;1972:52;2059:9;2046:23;2078:50;2122:5;2078:50;:::i;:::-;2147:5;-1:-1:-1;2204:2:504;2189:18;;2176:32;2217:52;2176:32;2217:52;:::i;:::-;2288:7;2278:17;;;1819:482;;;;;:::o;2306:388::-;2390:8;2400:6;2454:3;2447:4;2439:6;2435:17;2431:27;2421:55;;2472:1;2469;2462:12;2421:55;-1:-1:-1;2495:20:504;;2538:18;2527:30;;2524:50;;;2570:1;2567;2560:12;2524:50;2607:4;2599:6;2595:17;2583:29;;2667:3;2660:4;2650:6;2647:1;2643:14;2635:6;2631:27;2627:38;2624:47;2621:67;;;2684:1;2681;2674:12;2621:67;2306:388;;;;;:::o;2699:1236::-;2942:6;2950;2958;2966;2974;2982;3035:2;3023:9;3014:7;3010:23;3006:32;3003:52;;;3051:1;3048;3041:12;3003:52;3091:9;3078:23;3120:18;3161:2;3153:6;3150:14;3147:34;;;3177:1;3174;3167:12;3147:34;3216:91;3299:7;3290:6;3279:9;3275:22;3216:91;:::i;:::-;3326:8;;-1:-1:-1;3190:117:504;-1:-1:-1;3414:2:504;3399:18;;3386:32;;-1:-1:-1;3430:16:504;;;3427:36;;;3459:1;3456;3449:12;3427:36;3498:93;3583:7;3572:8;3561:9;3557:24;3498:93;:::i;:::-;3610:8;;-1:-1:-1;3472:119:504;-1:-1:-1;3698:2:504;3683:18;;3670:32;;-1:-1:-1;3714:16:504;;;3711:36;;;3743:1;3740;3733:12;3711:36;;3782:93;3867:7;3856:8;3845:9;3841:24;3782:93;:::i;:::-;2699:1236;;;;-1:-1:-1;2699:1236:504;;-1:-1:-1;2699:1236:504;;3894:8;;2699:1236;-1:-1:-1;;;2699:1236:504:o;4562:295::-;4650:6;4703:2;4691:9;4682:7;4678:23;4674:32;4671:52;;;4719:1;4716;4709:12;4671:52;4758:9;4745:23;4777:50;4821:5;4777:50;:::i;7286:657::-;7455:2;7507:21;;;7577:13;;7480:18;;;7599:22;;;7426:4;;7455:2;7678:15;;;;7652:2;7637:18;;;7426:4;7721:196;7735:6;7732:1;7729:13;7721:196;;;7800:13;;-1:-1:-1;;;;;;7796:40:504;7784:53;;7892:15;;;;7857:12;;;;7757:1;7750:9;7721:196;;;-1:-1:-1;7934:3:504;;7286:657;-1:-1:-1;;;;;;7286:657:504:o;8928:671::-;9090:6;9098;9106;9159:2;9147:9;9138:7;9134:23;9130:32;9127:52;;;9175:1;9172;9165:12;9127:52;9214:9;9201:23;9233:50;9277:5;9233:50;:::i;:::-;9302:5;-1:-1:-1;9359:2:504;9344:18;;9331:32;9372:52;9331:32;9372:52;:::i;:::-;9443:7;-1:-1:-1;9502:2:504;9487:18;;9474:32;9515:52;9474:32;9515:52;:::i;:::-;9586:7;9576:17;;;8928:671;;;;;:::o;9604:127::-;9665:10;9660:3;9656:20;9653:1;9646:31;9696:4;9693:1;9686:15;9720:4;9717:1;9710:15;9736:275;9807:2;9801:9;9872:2;9853:13;;-1:-1:-1;;9849:27:504;9837:40;;9907:18;9892:34;;9928:22;;;9889:62;9886:88;;;9954:18;;:::i;:::-;9990:2;9983:22;9736:275;;-1:-1:-1;9736:275:504:o;10016:187::-;10065:4;10098:18;10090:6;10087:30;10084:56;;;10120:18;;:::i;:::-;-1:-1:-1;10186:2:504;10165:15;-1:-1:-1;;10161:29:504;10192:4;10157:40;;10016:187::o;10208:673::-;10277:6;10330:2;10318:9;10309:7;10305:23;10301:32;10298:52;;;10346:1;10343;10336:12;10298:52;10386:9;10373:23;10419:18;10411:6;10408:30;10405:50;;;10451:1;10448;10441:12;10405:50;10474:22;;10527:4;10519:13;;10515:27;-1:-1:-1;10505:55:504;;10556:1;10553;10546:12;10505:55;10592:2;10579:16;10617:49;10633:32;10662:2;10633:32;:::i;:::-;10617:49;:::i;:::-;10689:2;10682:5;10675:17;10729:7;10724:2;10719;10715;10711:11;10707:20;10704:33;10701:53;;;10750:1;10747;10740:12;10701:53;10805:2;10800;10796;10792:11;10787:2;10780:5;10776:14;10763:45;10849:1;10828:14;;;10844:2;10824:23;10817:34;;;;10832:5;10208:673;-1:-1:-1;;;;10208:673:504:o;12368:127::-;12429:10;12424:3;12420:20;12417:1;12410:31;12460:4;12457:1;12450:15;12484:4;12481:1;12474:15;12500:127;12561:10;12556:3;12552:20;12549:1;12542:31;12592:4;12589:1;12582:15;12616:4;12613:1;12606:15;12632:128;12672:3;12703:1;12699:6;12696:1;12693:13;12690:39;;;12709:18;;:::i;:::-;-1:-1:-1;12745:9:504;;12632:128::o;12765:135::-;12804:3;-1:-1:-1;;12825:17:504;;12822:43;;;12845:18;;:::i;:::-;-1:-1:-1;12892:1:504;12881:13;;12765:135::o;12905:335::-;13107:2;13089:21;;;13146:2;13126:18;;;13119:30;-1:-1:-1;;;13180:2:504;13165:18;;13158:41;13231:2;13216:18;;12905:335::o;13245:258::-;13317:1;13327:113;13341:6;13338:1;13335:13;13327:113;;;13417:11;;;13411:18;13398:11;;;13391:39;13363:2;13356:10;13327:113;;;13458:6;13455:1;13452:13;13449:48;;;13493:1;13484:6;13479:3;13475:16;13468:27;13449:48;;13245:258;;;:::o;13508:636::-;13588:6;13641:2;13629:9;13620:7;13616:23;13612:32;13609:52;;;13657:1;13654;13647:12;13609:52;13690:9;13684:16;13723:18;13715:6;13712:30;13709:50;;;13755:1;13752;13745:12;13709:50;13778:22;;13831:4;13823:13;;13819:27;-1:-1:-1;13809:55:504;;13860:1;13857;13850:12;13809:55;13889:2;13883:9;13914:49;13930:32;13959:2;13930:32;:::i;13914:49::-;13986:2;13979:5;13972:17;14026:7;14021:2;14016;14012;14008:11;14004:20;14001:33;13998:53;;;14047:1;14044;14037:12;13998:53;14060:54;14111:2;14106;14099:5;14095:14;14090:2;14086;14082:11;14060:54;:::i;:::-;14133:5;13508:636;-1:-1:-1;;;;;13508:636:504:o;14149:276::-;14280:3;14318:6;14312:13;14334:53;14380:6;14375:3;14368:4;14360:6;14356:17;14334:53;:::i;:::-;14403:16;;;;;14149:276;-1:-1:-1;;14149:276:504:o;15199:178::-;15236:3;15280:4;15273:5;15269:16;15304:7;15294:41;;15315:18;;:::i;:::-;-1:-1:-1;;15351:20:504;;15199:178;-1:-1:-1;;15199:178:504:o;15739:274::-;15797:6;15850:2;15838:9;15829:7;15825:23;15821:32;15818:52;;;15866:1;15863;15856:12;15818:52;15905:9;15892:23;15955:8;15948:5;15944:20;15937:5;15934:31;15924:59;;15979:1;15976;15969:12;16379:125;16419:4;16447:1;16444;16441:8;16438:34;;;16452:18;;:::i;:::-;-1:-1:-1;16489:9:504;;16379:125::o;16509:127::-;16570:10;16565:3;16561:20;16558:1;16551:31;16601:4;16598:1;16591:15;16625:4;16622:1;16615:15", + "linkReferences": {} + }, + "methodIdentifiers": { + "_getExtensionFunctions()": "89f8132e", + "_removeRedemptionStrategy(address)": "514b49d9", + "_resetRedemptionStrategies(address[],address[],address[])": "a1bb91e3", + "_setDefaultOutputToken(address,address)": "2434cb7f", + "_setRedemptionStrategies(address[],address[],address[])": "366eda2e", + "_setRedemptionStrategy(address,address,address)": "d7341acf", + "_setSlippages(address[],address[],uint256[])": "5495a6d7", + "_setUniswapV3Fees(address[],address[],uint24[])": "e187a7dd", + "_setUniswapV3Routers(address[],address[],address[])": "72c9889c", + "acceptOwnership()": "79ba5097", + "ap()": "3c4f743c", + "customUniV3Router(address,address)": "c8ff6fee", + "defaultOutputToken(address)": "8db87c27", + "getAllPairsStrategies()": "0d856eef", + "owner()": "8da5cb5b", + "pairsStrategiesMatch(address[],address[],address[])": "3322d877", + "pendingOwner()": "e30c3978", + "redemptionStrategiesByName(string)": "dee7fe48", + "redemptionStrategiesByTokens(address,address)": "a700f9e4", + "renounceOwnership()": "715018a6", + "transferOwnership(address)": "f2fde38b", + "uniswapPairsFeesMatch(address[],address[],uint256[])": "eb29d9f8", + "uniswapPairsRoutersMatch(address[],address[],address[])": "aeabb621", + "uniswapV3Fees(address,address)": "398cd955" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/LooplessFlywheelBooster.json b/packages/sdk/deployments/bob/LooplessFlywheelBooster.json new file mode 100644 index 000000000..d6097f7fc --- /dev/null +++ b/packages/sdk/deployments/bob/LooplessFlywheelBooster.json @@ -0,0 +1,445 @@ +{ + "address": "0x431C87E08e2636733a945D742d25Ba77577ED480", + "abi": [ + { + "type": "function", + "name": "BOOSTER_TYPE", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "boostedBalanceOf", + "inputs": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract ERC20" + }, + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "boostedTotalSupply", + "inputs": [ + { + "name": "strategy", + "type": "address", + "internalType": "contract ERC20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + } + ], + "transactionHash": "0xad1cdf2ac95ae401d4a9400301a08cc038e3da961334b5a5caf377c832dd69d8", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x431C87E08e2636733a945D742d25Ba77577ED480", + "transactionIndex": 1, + "gasUsed": "278567", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x87ad0469d1adc87c688f7b7eb6bda7b41010fcd1b1ef798e07ca2e163ab4963f", + "transactionHash": "0xad1cdf2ac95ae401d4a9400301a08cc038e3da961334b5a5caf377c832dd69d8", + "logs": [], + "blockNumber": 3777856, + "cumulativeGasUsed": "322406", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "BOOSTER_TYPE", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "strategy", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "boostedBalanceOf", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ERC20", + "name": "strategy", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "boostedTotalSupply", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "boostedBalanceOf(address,address)": { + "params": { + "strategy": "the strategy to calculate boosted balance of", + "user": "the user to calculate boosted balance of" + }, + "returns": { + "_0": "the boosted balance" + } + }, + "boostedTotalSupply(address)": { + "params": { + "strategy": "the strategy to calculate boosted supply of" + }, + "returns": { + "_0": "the boosted supply" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "boostedBalanceOf(address,address)": { + "notice": "calculate the boosted balance of a user in a given strategy." + }, + "boostedTotalSupply(address)": { + "notice": "calculate the boosted supply of a strategy." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/strategies/flywheel/LooplessFlywheelBooster.sol": "LooplessFlywheelBooster" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/LooplessFlywheelBooster.sol": { + "keccak256": "0x244094ce9fa1f4e793232af4d4510040db7a214142a2d785625245bd3845d147", + "urls": [ + "bzz-raw://924629f717e6672fdbf1a7b5279902dcef142cbc198e82623a6f2ec700d8fb27", + "dweb:/ipfs/QmZcsavEUjHcrQpJB67PE5E3P5QRFZZyDMmdnTs5XRLdFx" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50610414806100206000396000f3fe608060405234801561001057600080fd5b50600436106100415760003560e01c80631a50ef2f146100465780631e1932fb1461006c5780639a8cca551461007f575b600080fd5b6100596100543660046102ce565b6100c8565b6040519081526020015b60405180910390f35b61005961007a366004610307565b61024c565b6100bb6040518060400160405280601781526020017f4c6f6f706c657373466c79776865656c426f6f7374657200000000000000000081525081565b604051610063919061032b565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182918516906370a0823190602401602060405180830381865afa158015610113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101379190610380565b905060008490506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a29190610380565b6040516305eff7ef60e21b81526001600160a01b0387811660048301528416906317bfdfbc90602401602060405180830381865afa1580156101e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020c9190610380565b61021e90670de0b6b3a76400006103af565b61022891906103ce565b9050808311610238576000610242565b61024281846103f0565b9695505050505050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610380565b92915050565b6001600160a01b03811681146102cb57600080fd5b50565b600080604083850312156102e157600080fd5b82356102ec816102b6565b915060208301356102fc816102b6565b809150509250929050565b60006020828403121561031957600080fd5b8135610324816102b6565b9392505050565b600060208083528351808285015260005b818110156103585785810183015185820160400152820161033c565b8181111561036a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561039257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156103c9576103c9610399565b500290565b6000826103eb57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561040257610402610399565b50039056fea164736f6c634300080a000a", + "sourceMap": "188:1055:180:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100415760003560e01c80631a50ef2f146100465780631e1932fb1461006c5780639a8cca551461007f575b600080fd5b6100596100543660046102ce565b6100c8565b6040519081526020015b60405180910390f35b61005961007a366004610307565b61024c565b6100bb6040518060400160405280601781526020017f4c6f6f706c657373466c79776865656c426f6f7374657200000000000000000081525081565b604051610063919061032b565b6040516370a0823160e01b81526001600160a01b03828116600483015260009182918516906370a0823190602401602060405180830381865afa158015610113573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101379190610380565b905060008490506000816001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561017e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a29190610380565b6040516305eff7ef60e21b81526001600160a01b0387811660048301528416906317bfdfbc90602401602060405180830381865afa1580156101e8573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061020c9190610380565b61021e90670de0b6b3a76400006103af565b61022891906103ce565b9050808311610238576000610242565b61024281846103f0565b9695505050505050565b6000816001600160a01b03166318160ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561028c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102b09190610380565b92915050565b6001600160a01b03811681146102cb57600080fd5b50565b600080604083850312156102e157600080fd5b82356102ec816102b6565b915060208301356102fc816102b6565b809150509250929050565b60006020828403121561031957600080fd5b8135610324816102b6565b9392505050565b600060208083528351808285015260005b818110156103585785810183015185820160400152820161033c565b8181111561036a576000604083870101525b50601f01601f1916929092016040019392505050565b60006020828403121561039257600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008160001904831182151516156103c9576103c9610399565b500290565b6000826103eb57634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561040257610402610399565b50039056fea164736f6c634300080a000a", + "sourceMap": "188:1055:180:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;853:388;;;;;;:::i;:::-;;:::i;:::-;;;726:25:504;;;714:2;699:18;853:388:180;;;;;;;;484:116;;;;;;:::i;:::-;;:::i;245:63::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;853:388::-;972:24;;-1:-1:-1;;;972:24:180;;-1:-1:-1;;;;;1803:32:504;;;972:24:180;;;1785:51:504;932:7:180;;;;972:18;;;;;1758::504;;972:24:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;947:49;;1002:16;1037:8;1002:45;;1053:21;1124:8;-1:-1:-1;;;;;1124:28:180;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1078:35;;-1:-1:-1;;;1078:35:180;;-1:-1:-1;;;;;1803:32:504;;;1078:35:180;;;1785:51:504;1078:29:180;;;;;1758:18:504;;1078:35:180;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:42;;1116:4;1078:42;:::i;:::-;1077:77;;;;:::i;:::-;1053:101;;1185:13;1168:14;:30;1167:69;;1235:1;1167:69;;;1202:30;1219:13;1202:14;:30;:::i;:::-;1160:76;853:388;-1:-1:-1;;;;;;853:388:180:o;484:116::-;551:7;573:8;-1:-1:-1;;;;;573:20:180;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;566:29;484:116;-1:-1:-1;;484:116:180:o;14:138:504:-;-1:-1:-1;;;;;96:31:504;;86:42;;76:70;;142:1;139;132:12;76:70;14:138;:::o;157:418::-;241:6;249;302:2;290:9;281:7;277:23;273:32;270:52;;;318:1;315;308:12;270:52;357:9;344:23;376:38;408:5;376:38;:::i;:::-;433:5;-1:-1:-1;490:2:504;475:18;;462:32;503:40;462:32;503:40;:::i;:::-;562:7;552:17;;;157:418;;;;;:::o;762:270::-;837:6;890:2;878:9;869:7;865:23;861:32;858:52;;;906:1;903;896:12;858:52;945:9;932:23;964:38;996:5;964:38;:::i;:::-;1021:5;762:270;-1:-1:-1;;;762:270:504:o;1037:597::-;1149:4;1178:2;1207;1196:9;1189:21;1239:6;1233:13;1282:6;1277:2;1266:9;1262:18;1255:34;1307:1;1317:140;1331:6;1328:1;1325:13;1317:140;;;1426:14;;;1422:23;;1416:30;1392:17;;;1411:2;1388:26;1381:66;1346:10;;1317:140;;;1475:6;1472:1;1469:13;1466:91;;;1545:1;1540:2;1531:6;1520:9;1516:22;1512:31;1505:42;1466:91;-1:-1:-1;1618:2:504;1597:15;-1:-1:-1;;1593:29:504;1578:45;;;;1625:2;1574:54;;1037:597;-1:-1:-1;;;1037:597:504:o;1847:184::-;1917:6;1970:2;1958:9;1949:7;1945:23;1941:32;1938:52;;;1986:1;1983;1976:12;1938:52;-1:-1:-1;2009:16:504;;1847:184;-1:-1:-1;1847:184:504:o;2036:127::-;2097:10;2092:3;2088:20;2085:1;2078:31;2128:4;2125:1;2118:15;2152:4;2149:1;2142:15;2168:168;2208:7;2274:1;2270;2266:6;2262:14;2259:1;2256:21;2251:1;2244:9;2237:17;2233:45;2230:71;;;2281:18;;:::i;:::-;-1:-1:-1;2321:9:504;;2168:168::o;2341:217::-;2381:1;2407;2397:132;;2451:10;2446:3;2442:20;2439:1;2432:31;2486:4;2483:1;2476:15;2514:4;2511:1;2504:15;2397:132;-1:-1:-1;2543:9:504;;2341:217::o;2563:125::-;2603:4;2631:1;2628;2625:8;2622:34;;;2636:18;;:::i;:::-;-1:-1:-1;2673:9:504;;2563:125::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "BOOSTER_TYPE()": "9a8cca55", + "boostedBalanceOf(address,address)": "1a50ef2f", + "boostedTotalSupply(address)": "1e1932fb" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/MasterPriceOracle.json b/packages/sdk/deployments/bob/MasterPriceOracle.json new file mode 100644 index 000000000..a752c77da --- /dev/null +++ b/packages/sdk/deployments/bob/MasterPriceOracle.json @@ -0,0 +1,567 @@ +{ + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "add", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "_oracles", + "type": "address[]", + "internalType": "contract BasePriceOracle[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addFallbacks", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "_oracles", + "type": "address[]", + "internalType": "contract BasePriceOracle[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "canAdminOverwrite", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "defaultOracle", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "fallbackOracles", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "_oracles", + "type": "address[]", + "internalType": "contract BasePriceOracle[]" + }, + { + "name": "_defaultOracle", + "type": "address", + "internalType": "contract BasePriceOracle" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_canAdminOverwrite", + "type": "bool", + "internalType": "bool" + }, + { + "name": "_wtoken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "oracles", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setDefaultOracle", + "inputs": [ + { + "name": "newOracle", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "wtoken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAdmin", + "inputs": [ + { + "name": "oldAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewDefaultOracle", + "inputs": [ + { + "name": "oldOracle", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOracle", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOracle", + "inputs": [ + { + "name": "underlying", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "oldOracle", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOracle", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "transactionIndex": 2, + "gasUsed": "846862", + "logsBloom": "0x00000000000000000000000000000400400000008000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000008000000000000000002000000000000000000000000000000000000000000000000000000000000000000000800800000000000000000000000000000000000000000000000000000000000400000000080000000000000800008000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000000000000000000080000000000000000000000100000000000000000000000000000", + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac", + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000987f3103c976caf5087087bbf99a7e389f22311c" + ], + "data": "0x", + "logIndex": 7, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + }, + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0x10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8d2d1195a548fe2ff69c31c4c90e54b263771c7", + "logIndex": 8, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + }, + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0x10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126" + ], + "data": "0x00000000000000000000000042000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8d2d1195a548fe2ff69c31c4c90e54b263771c7", + "logIndex": 9, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + }, + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 10, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + }, + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 11, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + } + ], + "blockNumber": 3777877, + "cumulativeGasUsed": "1031167", + "status": 1, + "byzantium": true + }, + "args": [ + "0x987F3103c976CAF5087087bbF99A7E389F22311c", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0x882b92a700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7000000000000000000000000000000000000000000000000000000000000000100000000000000000000000042000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d8d2d1195a548fe2ff69c31c4c90e54b263771c7000000000000000000000000d8d2d1195a548fe2ff69c31c4c90e54b263771c7" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + [ + "0x0000000000000000000000000000000000000000", + "0x4200000000000000000000000000000000000006" + ], + [ + "0xd8d2D1195a548FE2ff69C31c4C90e54b263771c7", + "0xd8d2D1195a548FE2ff69C31c4C90e54b263771c7" + ], + "0x0000000000000000000000000000000000000000", + "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + true, + "0x4200000000000000000000000000000000000006" + ] + }, + "implementation": "0x987F3103c976CAF5087087bbF99A7E389F22311c", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/MasterPriceOracle_Implementation.json b/packages/sdk/deployments/bob/MasterPriceOracle_Implementation.json new file mode 100644 index 000000000..beb7a6dcc --- /dev/null +++ b/packages/sdk/deployments/bob/MasterPriceOracle_Implementation.json @@ -0,0 +1,945 @@ +{ + "address": "0x987F3103c976CAF5087087bbF99A7E389F22311c", + "abi": [ + { + "type": "function", + "name": "add", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "_oracles", + "type": "address[]", + "internalType": "contract BasePriceOracle[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addFallbacks", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "_oracles", + "type": "address[]", + "internalType": "contract BasePriceOracle[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "admin", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "canAdminOverwrite", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "changeAdmin", + "inputs": [ + { + "name": "newAdmin", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "defaultOracle", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "fallbackOracles", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "_oracles", + "type": "address[]", + "internalType": "contract BasePriceOracle[]" + }, + { + "name": "_defaultOracle", + "type": "address", + "internalType": "contract BasePriceOracle" + }, + { + "name": "_admin", + "type": "address", + "internalType": "address" + }, + { + "name": "_canAdminOverwrite", + "type": "bool", + "internalType": "bool" + }, + { + "name": "_wtoken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "oracles", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "setDefaultOracle", + "inputs": [ + { + "name": "newOracle", + "type": "address", + "internalType": "contract BasePriceOracle" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "wtoken", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewAdmin", + "inputs": [ + { + "name": "oldAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newAdmin", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewDefaultOracle", + "inputs": [ + { + "name": "oldOracle", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOracle", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOracle", + "inputs": [ + { + "name": "underlying", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "oldOracle", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOracle", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x22dfa8bf58a4a3d9676555e888cf3916a0de1b6cc1e78b4683c2a16567ebb622", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x987F3103c976CAF5087087bbF99A7E389F22311c", + "transactionIndex": 3, + "gasUsed": "1054450", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xc9af593e77caa77c6f8f4639da2361faa0843824418fe664066065dc6b58ed1a", + "transactionHash": "0x22dfa8bf58a4a3d9676555e888cf3916a0de1b6cc1e78b4683c2a16567ebb622", + "logs": [], + "blockNumber": 3777873, + "cumulativeGasUsed": "1276922", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldAdmin", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newAdmin", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewAdmin", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOracle", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOracle", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewDefaultOracle", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "oldOracle", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOracle", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOracle", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "add" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addFallbacks" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "canAdminOverwrite", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "changeAdmin" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "defaultOracle", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "fallbackOracles", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle[]", + "name": "_oracles", + "type": "address[]" + }, + { + "internalType": "contract BasePriceOracle", + "name": "_defaultOracle", + "type": "address" + }, + { + "internalType": "address", + "name": "_admin", + "type": "address" + }, + { + "internalType": "bool", + "name": "_canAdminOverwrite", + "type": "bool" + }, + { + "internalType": "address", + "name": "_wtoken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "oracles", + "outputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract BasePriceOracle", + "name": "newOracle", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setDefaultOracle" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "wtoken", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "add(address[],address[])": { + "details": "Sets `_oracles` for `underlyings`." + }, + "addFallbacks(address[],address[])": { + "details": "Sets `_oracles` for `underlyings`." + }, + "canAdminOverwrite()": { + "details": "Returns a boolean indicating if `admin` can overwrite existing assignments of oracles to underlying tokens." + }, + "changeAdmin(address)": { + "details": "Changes the admin and emits an event." + }, + "getUnderlyingPrice(address)": { + "details": "Implements the `PriceOracle` interface for Ionic pools (and Compound v2).", + "returns": { + "_0": "Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`." + } + }, + "initialize(address[],address[],address,address,bool,address)": { + "details": "Initialize state variables.", + "params": { + "_admin": "The admin who can assign oracles to underlying tokens.", + "_canAdminOverwrite": "Controls if `admin` can overwrite existing assignments of oracles to underlying tokens.", + "_defaultOracle": "The default `PriceOracle` contract to use.", + "_oracles": "The `PriceOracle` contracts to be assigned to `underlyings`.", + "_wtoken": "The Wrapped native asset address", + "underlyings": "The underlying ERC20 token addresses to link to `_oracles`." + } + }, + "price(address)": { + "details": "Attempts to return the price in ETH of `underlying` (implements `BasePriceOracle`)." + }, + "setDefaultOracle(address)": { + "details": "Changes the default price oracle" + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "getUnderlyingPrice(address)": { + "notice": "Returns the price in ETH of the token underlying `cToken`." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/MasterPriceOracle.sol": "MasterPriceOracle" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x8748b7e74b8f789617f0b387cd2e2259a0fa3639d54234d7e6c99cb3eae6fc9a", + "urls": [ + "bzz-raw://a4e46033c3a440f48bfe45adb3b06db2b5870e3179f5170cd708c3030d240f39", + "dweb:/ipfs/QmPQZwCprBqi8BASL8nJpP63BpFGUS48ioyhS29GSAWp2r" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b5061121b806100206000396000f3fe608060405234801561001057600080fd5b50600436106100cf5760003560e01c80639c0591c81161008c578063aea9107811610066578063aea91078146101d5578063c44014d2146101f6578063f851a44014610209578063fc57d4df1461021c57600080fd5b80639c0591c8146101865780639c9192c614610199578063addd5099146101ac57600080fd5b8063656b0fd1146100d4578063727a259b146100f757806380dce16914610138578063882b92a71461014b5780638f283970146101605780639a5471fc14610173575b600080fd5b600354600160a01b900460ff161560405190151581526020015b60405180910390f35b610120610105366004610dc5565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100ee565b600254610120906001600160a01b031681565b61015e610159366004610ed8565b61022f565b005b61015e61016e366004610dc5565b6104ba565b61015e610181366004611027565b610546565b600454610120906001600160a01b031681565b61015e6101a7366004611027565b6106e0565b6101206101ba366004610dc5565b6001602052600090815260409020546001600160a01b031681565b6101e86101e3366004610dc5565b610873565b6040519081526020016100ee565b61015e610204366004610dc5565b610af2565b600354610120906001600160a01b031681565b6101e861022a366004610dc5565b610b76565b600054610100900460ff161580801561024f5750600054600160ff909116105b806102695750303b158015610269575060005460ff166001145b6102d15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156102f4576000805461ff0019166101001790555b85518751146103535760405162461bcd60e51b815260206004820152602560248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201526438bab0b61760d91b60648201526084016102c8565b60005b875181101561041b57600088828151811061037357610373611093565b60200260200101519050600088838151811061039157610391611093565b6020908102919091018101516001600160a01b03848116600081815260018552604080822080546001600160a01b03191694861694851790558051928352948201529283015291507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a150508080610413906110a9565b915050610356565b50600280546001600160a01b038088166001600160a01b03199283161790925560038054600160a01b8715026001600160a81b031990911688851617179055600480549285169290911691909117905580156104b1576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6003546001600160a01b031633146104e45760405162461bcd60e51b81526004016102c8906110d2565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91015b60405180910390a15050565b6003546001600160a01b031633146105705760405162461bcd60e51b81526004016102c8906110d2565b821580159061057e57508281145b61059a5760405162461bcd60e51b81526004016102c890611109565b60005b838110156106d95760008585838181106105b9576105b9611093565b90506020020160208101906105ce9190610dc5565b6001600160a01b038181166000908152600560205260409020546003549293501690600160a01b900460ff1615610626576001600160a01b038116156106265760405162461bcd60e51b81526004016102c890611166565b600085858581811061063a5761063a611093565b905060200201602081019061064f9190610dc5565b6001600160a01b0384811660008181526005602090815260409182902080546001600160a01b0319168686169081179091558251938452938716908301528101919091529091507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a150505080806106d1906110a9565b91505061059d565b5050505050565b6003546001600160a01b0316331461070a5760405162461bcd60e51b81526004016102c8906110d2565b821580159061071857508281145b6107345760405162461bcd60e51b81526004016102c890611109565b60005b838110156106d957600085858381811061075357610753611093565b90506020020160208101906107689190610dc5565b6001600160a01b038181166000908152600160205260409020546003549293501690600160a01b900460ff16156107c0576001600160a01b038116156107c05760405162461bcd60e51b81526004016102c890611166565b60008585858181106107d4576107d4611093565b90506020020160208101906107e99190610dc5565b6001600160a01b0384811660008181526001602090815260409182902080546001600160a01b0319168686169081179091558251938452938716908301528101919091529091507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a1505050808061086b906110a9565b915050610737565b6004546000906001600160a01b038381169116141561089b5750670de0b6b3a7640000919050565b6001600160a01b0380831660009081526001602090815260408083205460059092529091205490821691168115610a47576040516315d5220f60e31b81526001600160a01b03858116600483015283169063aea9107890602401602060405180830381865afa92505050801561092e575060408051601f3d908101601f1916820190925261092b918101906111d8565b60015b6109b9576001600160a01b038116156109b4576040516315d5220f60e31b81526001600160a01b03858116600483015282169063aea91078906024015b602060405180830381865afa158015610988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ac91906111d8565b949350505050565b610a84565b806109ac576001600160a01b03821615610a41576040516315d5220f60e31b81526001600160a01b03868116600483015283169063aea91078906024015b602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906111d8565b95945050505050565b50610a84565b6001600160a01b03811615610a84576040516315d5220f60e31b81526001600160a01b03858116600483015282169063aea910789060240161096b565b60405162461bcd60e51b815260206004820152603960248201527f5072696365206f7261636c65206e6f7420666f756e6420666f7220746869732060448201527f756e6465726c79696e6720746f6b656e20616464726573732e0000000000000060648201526084016102c8565b6003546001600160a01b03163314610b1c5760405162461bcd60e51b81526004016102c8906110d2565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f0df2d61fdd201e9633368dca495e2c469e36c48039263448dd8a2a954c19ef1a910161053a565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb91906111f1565b6004549091506001600160a01b0380831691161415610c045750670de0b6b3a764000092915050565b6001600160a01b0380821660009081526001602090815260408083205460059092529091205490821691168115610d605760405163fc57d4df60e01b81526001600160a01b03868116600483015283169063fc57d4df90602401602060405180830381865afa925050508015610c97575060408051601f3d908101601f19168201909252610c94918101906111d8565b60015b610cd8576001600160a01b038116156109b45760405163fc57d4df60e01b81526001600160a01b03868116600483015282169063fc57d4df906024016109f7565b80610a38576001600160a01b03821615610a415760405163fc57d4df60e01b81526001600160a01b03878116600483015283169063fc57d4df90602401602060405180830381865afa158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5691906111d8565b9695505050505050565b6001600160a01b03811615610a845760405163fc57d4df60e01b81526001600160a01b03868116600483015282169063fc57d4df906024016109f7565b6001600160a01b0381168114610db257600080fd5b50565b8035610dc081610d9d565b919050565b600060208284031215610dd757600080fd5b8135610de281610d9d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e2857610e28610de9565b604052919050565b600067ffffffffffffffff821115610e4a57610e4a610de9565b5060051b60200190565b600082601f830112610e6557600080fd5b81356020610e7a610e7583610e30565b610dff565b82815260059290921b84018101918181019086841115610e9957600080fd5b8286015b84811015610ebd578035610eb081610d9d565b8352918301918301610e9d565b509695505050505050565b80358015158114610dc057600080fd5b60008060008060008060c08789031215610ef157600080fd5b863567ffffffffffffffff80821115610f0957600080fd5b818901915089601f830112610f1d57600080fd5b81356020610f2d610e7583610e30565b82815260059290921b8401810191818101908d841115610f4c57600080fd5b948201945b83861015610f73578535610f6481610d9d565b82529482019490820190610f51565b9a50508a013592505080821115610f8957600080fd5b50610f9689828a01610e54565b955050610fa560408801610db5565b9350610fb360608801610db5565b9250610fc160808801610ec8565b9150610fcf60a08801610db5565b90509295509295509295565b60008083601f840112610fed57600080fd5b50813567ffffffffffffffff81111561100557600080fd5b6020830191508360208260051b850101111561102057600080fd5b9250929050565b6000806000806040858703121561103d57600080fd5b843567ffffffffffffffff8082111561105557600080fd5b61106188838901610fdb565b9096509450602087013591508082111561107a57600080fd5b5061108787828801610fdb565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156110cb57634e487b7160e01b600052601160045260246000fd5b5060010190565b60208082526018908201527f53656e646572206973206e6f74207468652061646d696e2e0000000000000000604082015260600190565b60208082526038908201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560408201527f7175616c20616e642067726561746572207468616e20302e0000000000000000606082015260800190565b6020808252604c908201527f41646d696e2063616e6e6f74206f7665727772697465206578697374696e672060408201527f61737369676e6d656e7473206f66206f7261636c657320746f20756e6465726c60608201526b3cb4b733903a37b5b2b7399760a11b608082015260a00190565b6000602082840312156111ea57600080fd5b5051919050565b60006020828403121561120357600080fd5b8151610de281610d9d56fea164736f6c634300080a000a", + "sourceMap": "463:7545:244:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100cf5760003560e01c80639c0591c81161008c578063aea9107811610066578063aea91078146101d5578063c44014d2146101f6578063f851a44014610209578063fc57d4df1461021c57600080fd5b80639c0591c8146101865780639c9192c614610199578063addd5099146101ac57600080fd5b8063656b0fd1146100d4578063727a259b146100f757806380dce16914610138578063882b92a71461014b5780638f283970146101605780639a5471fc14610173575b600080fd5b600354600160a01b900460ff161560405190151581526020015b60405180910390f35b610120610105366004610dc5565b6005602052600090815260409020546001600160a01b031681565b6040516001600160a01b0390911681526020016100ee565b600254610120906001600160a01b031681565b61015e610159366004610ed8565b61022f565b005b61015e61016e366004610dc5565b6104ba565b61015e610181366004611027565b610546565b600454610120906001600160a01b031681565b61015e6101a7366004611027565b6106e0565b6101206101ba366004610dc5565b6001602052600090815260409020546001600160a01b031681565b6101e86101e3366004610dc5565b610873565b6040519081526020016100ee565b61015e610204366004610dc5565b610af2565b600354610120906001600160a01b031681565b6101e861022a366004610dc5565b610b76565b600054610100900460ff161580801561024f5750600054600160ff909116105b806102695750303b158015610269575060005460ff166001145b6102d15760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff1916600117905580156102f4576000805461ff0019166101001790555b85518751146103535760405162461bcd60e51b815260206004820152602560248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201526438bab0b61760d91b60648201526084016102c8565b60005b875181101561041b57600088828151811061037357610373611093565b60200260200101519050600088838151811061039157610391611093565b6020908102919091018101516001600160a01b03848116600081815260018552604080822080546001600160a01b03191694861694851790558051928352948201529283015291507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a150508080610413906110a9565b915050610356565b50600280546001600160a01b038088166001600160a01b03199283161790925560038054600160a01b8715026001600160a81b031990911688851617179055600480549285169290911691909117905580156104b1576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050565b6003546001600160a01b031633146104e45760405162461bcd60e51b81526004016102c8906110d2565b600380546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc91015b60405180910390a15050565b6003546001600160a01b031633146105705760405162461bcd60e51b81526004016102c8906110d2565b821580159061057e57508281145b61059a5760405162461bcd60e51b81526004016102c890611109565b60005b838110156106d95760008585838181106105b9576105b9611093565b90506020020160208101906105ce9190610dc5565b6001600160a01b038181166000908152600560205260409020546003549293501690600160a01b900460ff1615610626576001600160a01b038116156106265760405162461bcd60e51b81526004016102c890611166565b600085858581811061063a5761063a611093565b905060200201602081019061064f9190610dc5565b6001600160a01b0384811660008181526005602090815260409182902080546001600160a01b0319168686169081179091558251938452938716908301528101919091529091507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a150505080806106d1906110a9565b91505061059d565b5050505050565b6003546001600160a01b0316331461070a5760405162461bcd60e51b81526004016102c8906110d2565b821580159061071857508281145b6107345760405162461bcd60e51b81526004016102c890611109565b60005b838110156106d957600085858381811061075357610753611093565b90506020020160208101906107689190610dc5565b6001600160a01b038181166000908152600160205260409020546003549293501690600160a01b900460ff16156107c0576001600160a01b038116156107c05760405162461bcd60e51b81526004016102c890611166565b60008585858181106107d4576107d4611093565b90506020020160208101906107e99190610dc5565b6001600160a01b0384811660008181526001602090815260409182902080546001600160a01b0319168686169081179091558251938452938716908301528101919091529091507f10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d31269060600160405180910390a1505050808061086b906110a9565b915050610737565b6004546000906001600160a01b038381169116141561089b5750670de0b6b3a7640000919050565b6001600160a01b0380831660009081526001602090815260408083205460059092529091205490821691168115610a47576040516315d5220f60e31b81526001600160a01b03858116600483015283169063aea9107890602401602060405180830381865afa92505050801561092e575060408051601f3d908101601f1916820190925261092b918101906111d8565b60015b6109b9576001600160a01b038116156109b4576040516315d5220f60e31b81526001600160a01b03858116600483015282169063aea91078906024015b602060405180830381865afa158015610988573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ac91906111d8565b949350505050565b610a84565b806109ac576001600160a01b03821615610a41576040516315d5220f60e31b81526001600160a01b03868116600483015283169063aea91078906024015b602060405180830381865afa158015610a14573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3891906111d8565b95945050505050565b50610a84565b6001600160a01b03811615610a84576040516315d5220f60e31b81526001600160a01b03858116600483015282169063aea910789060240161096b565b60405162461bcd60e51b815260206004820152603960248201527f5072696365206f7261636c65206e6f7420666f756e6420666f7220746869732060448201527f756e6465726c79696e6720746f6b656e20616464726573732e0000000000000060648201526084016102c8565b6003546001600160a01b03163314610b1c5760405162461bcd60e51b81526004016102c8906110d2565b600280546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527f0df2d61fdd201e9633368dca495e2c469e36c48039263448dd8a2a954c19ef1a910161053a565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610bb7573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bdb91906111f1565b6004549091506001600160a01b0380831691161415610c045750670de0b6b3a764000092915050565b6001600160a01b0380821660009081526001602090815260408083205460059092529091205490821691168115610d605760405163fc57d4df60e01b81526001600160a01b03868116600483015283169063fc57d4df90602401602060405180830381865afa925050508015610c97575060408051601f3d908101601f19168201909252610c94918101906111d8565b60015b610cd8576001600160a01b038116156109b45760405163fc57d4df60e01b81526001600160a01b03868116600483015282169063fc57d4df906024016109f7565b80610a38576001600160a01b03821615610a415760405163fc57d4df60e01b81526001600160a01b03878116600483015283169063fc57d4df90602401602060405180830381865afa158015610d32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d5691906111d8565b9695505050505050565b6001600160a01b03811615610a845760405163fc57d4df60e01b81526001600160a01b03868116600483015282169063fc57d4df906024016109f7565b6001600160a01b0381168114610db257600080fd5b50565b8035610dc081610d9d565b919050565b600060208284031215610dd757600080fd5b8135610de281610d9d565b9392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610e2857610e28610de9565b604052919050565b600067ffffffffffffffff821115610e4a57610e4a610de9565b5060051b60200190565b600082601f830112610e6557600080fd5b81356020610e7a610e7583610e30565b610dff565b82815260059290921b84018101918181019086841115610e9957600080fd5b8286015b84811015610ebd578035610eb081610d9d565b8352918301918301610e9d565b509695505050505050565b80358015158114610dc057600080fd5b60008060008060008060c08789031215610ef157600080fd5b863567ffffffffffffffff80821115610f0957600080fd5b818901915089601f830112610f1d57600080fd5b81356020610f2d610e7583610e30565b82815260059290921b8401810191818101908d841115610f4c57600080fd5b948201945b83861015610f73578535610f6481610d9d565b82529482019490820190610f51565b9a50508a013592505080821115610f8957600080fd5b50610f9689828a01610e54565b955050610fa560408801610db5565b9350610fb360608801610db5565b9250610fc160808801610ec8565b9150610fcf60a08801610db5565b90509295509295509295565b60008083601f840112610fed57600080fd5b50813567ffffffffffffffff81111561100557600080fd5b6020830191508360208260051b850101111561102057600080fd5b9250929050565b6000806000806040858703121561103d57600080fd5b843567ffffffffffffffff8082111561105557600080fd5b61106188838901610fdb565b9096509450602087013591508082111561107a57600080fd5b5061108787828801610fdb565b95989497509550505050565b634e487b7160e01b600052603260045260246000fd5b60006000198214156110cb57634e487b7160e01b600052601160045260246000fd5b5060010190565b60208082526018908201527f53656e646572206973206e6f74207468652061646d696e2e0000000000000000604082015260600190565b60208082526038908201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560408201527f7175616c20616e642067726561746572207468616e20302e0000000000000000606082015260800190565b6020808252604c908201527f41646d696e2063616e6e6f74206f7665727772697465206578697374696e672060408201527f61737369676e6d656e7473206f66206f7261636c657320746f20756e6465726c60608201526b3cb4b733903a37b5b2b7399760a11b608082015260a00190565b6000602082840312156111ea57600080fd5b5051919050565b60006020828403121561120357600080fd5b8151610de281610d9d56fea164736f6c634300080a000a", + "sourceMap": "463:7545:244:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1438:93;1510:16;;-1:-1:-1;;;1510:16:244;;;;1509:17;1438:93;;179:14:504;;172:22;154:41;;142:2;127:18;1438:93:244;;;;;;;;1245:58;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;1245:58:244;;;;;;-1:-1:-1;;;;;922:32:504;;;904:51;;892:2;877:18;1245:58:244;733:228:504;760:36:244;;;;;-1:-1:-1;;;;;760:36:244;;;2481:760;;;;;;:::i;:::-;;:::i;:::-;;5375:154;;;;;;:::i;:::-;;:::i;4184:846::-;;;;;;:::i;:::-;;:::i;1096:21::-;;;;;-1:-1:-1;;;;;1096:21:244;;;3302:821;;;;;;:::i;:::-;;:::i;651:50::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;651:50:244;;;7088:918;;;;;;:::i;:::-;;:::i;:::-;;;5599:25:504;;;5587:2;5572:18;7088:918:244;5453:177:504;5089:222:244;;;;;;:::i;:::-;;:::i;870:20::-;;;;;-1:-1:-1;;;;;870:20:244;;;5974:1004;;;;;;:::i;:::-;;:::i;2481:760::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;6383:2:504;3314:201:457;;;6365:21:504;6422:2;6402:18;;;6395:30;6461:34;6441:18;;;6434:62;-1:-1:-1;;;6512:18:504;;;6505:44;6566:19;;3314:201:457;;;;;;;;;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;2765:8:244::1;:15;2743:11;:18;:37;2735:87;;;::::0;-1:-1:-1;;;2735:87:244;;6798:2:504;2735:87:244::1;::::0;::::1;6780:21:504::0;6837:2;6817:18;;;6810:30;6876:34;6856:18;;;6849:62;-1:-1:-1;;;6927:18:504;;;6920:35;6972:19;;2735:87:244::1;6596:401:504::0;2735:87:244::1;2868:9;2863:251;2887:11;:18;2883:1;:22;2863:251;;;2920:18;2941:11;2953:1;2941:14;;;;;;;;:::i;:::-;;;;;;;2920:35;;2963:25;2991:8;3000:1;2991:11;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;3010:19:244;;::::1;;::::0;;;:7:::1;:19:::0;;;;;;:31;;-1:-1:-1;;;;;;3010:31:244::1;::::0;;::::1;::::0;;::::1;::::0;;3054:53;;7374:34:504;;;7424:18;;;7417:43;7476:18;;;7469:43;2991:11:244;-1:-1:-1;3054:53:244::1;::::0;7324:2:504;7309:18;3054:53:244::1;;;;;;;2912:202;;2907:3;;;;;:::i;:::-;;;;2863:251;;;-1:-1:-1::0;3120:13:244::1;:30:::0;;-1:-1:-1;;;;;3120:30:244;;::::1;-1:-1:-1::0;;;;;;3120:30:244;;::::1;;::::0;;;3156:5:::1;:14:::0;;-1:-1:-1;;;3195:19:244;::::1;3176:38;-1:-1:-1::0;;;;;;3176:38:244;;;3156:14;;::::1;3176:38:::0;::::1;::::0;;3220:6:::1;:16:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3636:99:457;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;7912:36:504;;3710:14:457;;7900:2:504;7885:18;3710:14:457;;;;;;;3636:99;3258:483;2481:760:244;;;;;;:::o;5375:154::-;5651:5;;-1:-1:-1;;;;;5651:5:244;5637:10;:19;5629:56;;;;-1:-1:-1;;;5629:56:244;;;;;;;:::i;:::-;5458:5:::1;::::0;;-1:-1:-1;;;;;5469:16:244;;::::1;-1:-1:-1::0;;;;;;5469:16:244;::::1;::::0;::::1;::::0;;;5496:28:::1;::::0;;5458:5;;;::::1;8524:34:504::0;;;8589:2;8574:18;;8567:43;;;;5496:28:244::1;::::0;8459:18:504;5496:28:244::1;;;;;;;;5433:96;5375:154:::0;:::o;4184:846::-;5651:5;;-1:-1:-1;;;;;5651:5:244;5637:10;:19;5629:56;;;;-1:-1:-1;;;5629:56:244;;;;;;;:::i;:::-;4339:22;;;;;:63:::1;;-1:-1:-1::0;4365:37:244;;::::1;4339:63;4324:150;;;;-1:-1:-1::0;;;4324:150:244::1;;;;;;;:::i;:::-;4529:9;4524:502;4544:22:::0;;::::1;4524:502;;;4581:18;4602:11;;4614:1;4602:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4652:27:244;;::::1;4624:17;4652:27:::0;;;:15:::1;:27;::::0;;;;;4692:16:::1;::::0;4652:27;;-1:-1:-1;4652:27:244::1;::::0;-1:-1:-1;;;4692:16:244;::::1;;;4688:172;;;-1:-1:-1::0;;;;;4737:23:244;::::1;::::0;4718:142:::1;;;;-1:-1:-1::0;;;4718:142:244::1;;;;;;;:::i;:::-;4868:25;4896:8;;4905:1;4896:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4915:27:244;;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;;;:39;;-1:-1:-1;;;;;;4915:39:244::1;::::0;;::::1;::::0;;::::1;::::0;;;4967:52;;7374:34:504;;;7444:15;;;7424:18;;;7417:43;7476:18;;7469:43;;;;4915:39:244;;-1:-1:-1;4967:52:244::1;::::0;7324:2:504;7309:18;4967:52:244::1;;;;;;;4573:453;;;4568:3;;;;;:::i;:::-;;;;4524:502;;;;4184:846:::0;;;;:::o;3302:821::-;5651:5;;-1:-1:-1;;;;;5651:5:244;5637:10;:19;5629:56;;;;-1:-1:-1;;;5629:56:244;;;;;;;:::i;:::-;3448:22;;;;;:63:::1;;-1:-1:-1::0;3474:37:244;;::::1;3448:63;3433:150;;;;-1:-1:-1::0;;;3433:150:244::1;;;;;;;:::i;:::-;3638:9;3633:486;3653:22:::0;;::::1;3633:486;;;3690:18;3711:11;;3723:1;3711:14;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;3761:19:244;;::::1;3733:17;3761:19:::0;;;:7:::1;:19;::::0;;;;;3793:16:::1;::::0;3761:19;;-1:-1:-1;3761:19:244::1;::::0;-1:-1:-1;;;3793:16:244;::::1;;;3789:172;;;-1:-1:-1::0;;;;;3838:23:244;::::1;::::0;3819:142:::1;;;;-1:-1:-1::0;;;3819:142:244::1;;;;;;;:::i;:::-;3969:25;3997:8;;4006:1;3997:11;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;4016:19:244;;::::1;;::::0;;;:7:::1;:19;::::0;;;;;;;;:31;;-1:-1:-1;;;;;;4016:31:244::1;::::0;;::::1;::::0;;::::1;::::0;;;4060:52;;7374:34:504;;;7444:15;;;7424:18;;;7417:43;7476:18;;7469:43;;;;4016:31:244;;-1:-1:-1;4060:52:244::1;::::0;7324:2:504;7309:18;4060:52:244::1;;;;;;;3682:437;;;3677:3;;;;;:::i;:::-;;;;3633:486;;7088:918:::0;7214:6;;7153:7;;-1:-1:-1;;;;;7200:20:244;;;7214:6;;7200:20;7196:37;;;-1:-1:-1;7229:4:244;;7088:918;-1:-1:-1;7088:918:244:o;7196:37::-;-1:-1:-1;;;;;7314:19:244;;;7289:22;7314:19;;;:7;:19;;;;;;;;;7372:15;:27;;;;;;;7314:19;;;;7372:27;7410:29;;7406:523;;7453:24;;-1:-1:-1;;;7453:24:244;;-1:-1:-1;;;;;922:32:504;;;7453:24:244;;;904:51:504;7453:12:244;;;;;877:18:504;;7453:24:244;;;;;;;;;;;;;;;;;;-1:-1:-1;7453:24:244;;;;;;;;-1:-1:-1;;7453:24:244;;;;;;;;;;;;:::i;:::-;;;7449:371;;-1:-1:-1;;;;;7733:37:244;;;7729:82;;7779:32;;-1:-1:-1;;;7779:32:244;;-1:-1:-1;;;;;922:32:504;;;7779::244;;;904:51:504;7779:20:244;;;;;877:18:504;;7779:32:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7772:39;7088:918;-1:-1:-1;;;;7088:918:244:o;7729:82::-;7406:523;;7449:371;7526:20;7522:182;;-1:-1:-1;;;;;7564:37:244;;;7560:82;;7610:32;;-1:-1:-1;;;7610:32:244;;-1:-1:-1;;;;;922:32:504;;;7610::244;;;904:51:504;7610:20:244;;;;;877:18:504;;7610:32:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7603:39;7088:918;-1:-1:-1;;;;;7088:918:244:o;7560:82::-;7478:234;7406:523;;;-1:-1:-1;;;;;7844:37:244;;;7840:82;;7890:32;;-1:-1:-1;;;7890:32:244;;-1:-1:-1;;;;;922:32:504;;;7890::244;;;904:51:504;7890:20:244;;;;;877:18:504;;7890:32:244;733:228:504;7840:82:244;7934:67;;-1:-1:-1;;;7934:67:244;;9922:2:504;7934:67:244;;;9904:21:504;9961:2;9941:18;;;9934:30;10000:34;9980:18;;;9973:62;10071:27;10051:18;;;10044:55;10116:19;;7934:67:244;9720:421:504;5089:222:244;5651:5;;-1:-1:-1;;;;;5651:5:244;5637:10;:19;5629:56;;;;-1:-1:-1;;;5629:56:244;;;;;;;:::i;:::-;5195:13:::1;::::0;;-1:-1:-1;;;;;5214:25:244;;::::1;-1:-1:-1::0;;;;;;5214:25:244;::::1;::::0;::::1;::::0;;;5250:56:::1;::::0;;5195:13;;;::::1;8524:34:504::0;;;8589:2;8574:18;;8567:43;;;;5250:56:244::1;::::0;8459:18:504;5250:56:244::1;8312:304:504::0;5974:1004:244;6050:7;6107:18;6152:6;-1:-1:-1;;;;;6136:35:244;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6199:6;;6107:67;;-1:-1:-1;;;;;;6185:20:244;;;6199:6;;6185:20;6181:37;;;-1:-1:-1;6214:4:244;;5974:1004;-1:-1:-1;;5974:1004:244:o;6181:37::-;-1:-1:-1;;;;;6250:19:244;;;6225:22;6250:19;;;:7;:19;;;;;;;;;6308:15;:27;;;;;;;6250:19;;;;6308:27;6346:29;;6342:559;;6389:33;;-1:-1:-1;;;6389:33:244;;-1:-1:-1;;;;;922:32:504;;;6389:33:244;;;904:51:504;6389:25:244;;;;;877:18:504;;6389:33:244;;;;;;;;;;;;;;;;;;-1:-1:-1;6389:33:244;;;;;;;;-1:-1:-1;;6389:33:244;;;;;;;;;;;;:::i;:::-;;;6385:398;;-1:-1:-1;;;;;6687:37:244;;;6683:91;;6733:41;;-1:-1:-1;;;6733:41:244;;-1:-1:-1;;;;;922:32:504;;;6733:41:244;;;904:51:504;6733:33:244;;;;;877:18:504;;6733:41:244;733:228:504;6385:398:244;6471:20;6467:191;;-1:-1:-1;;;;;6509:37:244;;;6505:91;;6555:41;;-1:-1:-1;;;6555:41:244;;-1:-1:-1;;;;;922:32:504;;;6555:41:244;;;904:51:504;6555:33:244;;;;;877:18:504;;6555:41:244;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;6548:48;5974:1004;-1:-1:-1;;;;;;5974:1004:244:o;6342:559::-;-1:-1:-1;;;;;6807:37:244;;;6803:91;;6853:41;;-1:-1:-1;;;6853:41:244;;-1:-1:-1;;;;;922:32:504;;;6853:41:244;;;904:51:504;6853:33:244;;;;;877:18:504;;6853:41:244;733:228:504;206:131;-1:-1:-1;;;;;281:31:504;;271:42;;261:70;;327:1;324;317:12;261:70;206:131;:::o;342:134::-;410:20;;439:31;410:20;439:31;:::i;:::-;342:134;;;:::o;481:247::-;540:6;593:2;581:9;572:7;568:23;564:32;561:52;;;609:1;606;599:12;561:52;648:9;635:23;667:31;692:5;667:31;:::i;:::-;717:5;481:247;-1:-1:-1;;;481:247:504:o;966:127::-;1027:10;1022:3;1018:20;1015:1;1008:31;1058:4;1055:1;1048:15;1082:4;1079:1;1072:15;1098:275;1169:2;1163:9;1234:2;1215:13;;-1:-1:-1;;1211:27:504;1199:40;;1269:18;1254:34;;1290:22;;;1251:62;1248:88;;;1316:18;;:::i;:::-;1352:2;1345:22;1098:275;;-1:-1:-1;1098:275:504:o;1378:183::-;1438:4;1471:18;1463:6;1460:30;1457:56;;;1493:18;;:::i;:::-;-1:-1:-1;1538:1:504;1534:14;1550:4;1530:25;;1378:183::o;1566:754::-;1637:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:55;;1708:1;1705;1698:12;1657:55;1744:6;1731:20;1770:4;1794:60;1810:43;1850:2;1810:43;:::i;:::-;1794:60;:::i;:::-;1888:15;;;1974:1;1970:10;;;;1958:23;;1954:32;;;1919:12;;;;1998:15;;;1995:35;;;2026:1;2023;2016:12;1995:35;2062:2;2054:6;2050:15;2074:217;2090:6;2085:3;2082:15;2074:217;;;2170:3;2157:17;2187:31;2212:5;2187:31;:::i;:::-;2231:18;;2269:12;;;;2107;;2074:217;;;-1:-1:-1;2309:5:504;1566:754;-1:-1:-1;;;;;;1566:754:504:o;2325:160::-;2390:20;;2446:13;;2439:21;2429:32;;2419:60;;2475:1;2472;2465:12;2490:1575;2691:6;2699;2707;2715;2723;2731;2784:3;2772:9;2763:7;2759:23;2755:33;2752:53;;;2801:1;2798;2791:12;2752:53;2841:9;2828:23;2870:18;2911:2;2903:6;2900:14;2897:34;;;2927:1;2924;2917:12;2897:34;2965:6;2954:9;2950:22;2940:32;;3010:7;3003:4;2999:2;2995:13;2991:27;2981:55;;3032:1;3029;3022:12;2981:55;3068:2;3055:16;3090:4;3114:60;3130:43;3170:2;3130:43;:::i;3114:60::-;3208:15;;;3290:1;3286:10;;;;3278:19;;3274:28;;;3239:12;;;;3314:19;;;3311:39;;;3346:1;3343;3336:12;3311:39;3370:11;;;;3390:217;3406:6;3401:3;3398:15;3390:217;;;3486:3;3473:17;3503:31;3528:5;3503:31;:::i;:::-;3547:18;;3423:12;;;;3585;;;;3390:217;;;3626:5;-1:-1:-1;;3669:18:504;;3656:32;;-1:-1:-1;;3700:16:504;;;3697:36;;;3729:1;3726;3719:12;3697:36;;3752:80;3824:7;3813:8;3802:9;3798:24;3752:80;:::i;:::-;3742:90;;;3851:38;3885:2;3874:9;3870:18;3851:38;:::i;:::-;3841:48;;3908:38;3942:2;3931:9;3927:18;3908:38;:::i;:::-;3898:48;;3965:36;3996:3;3985:9;3981:19;3965:36;:::i;:::-;3955:46;;4020:39;4054:3;4043:9;4039:19;4020:39;:::i;:::-;4010:49;;2490:1575;;;;;;;;:::o;4070:367::-;4133:8;4143:6;4197:3;4190:4;4182:6;4178:17;4174:27;4164:55;;4215:1;4212;4205:12;4164:55;-1:-1:-1;4238:20:504;;4281:18;4270:30;;4267:50;;;4313:1;4310;4303:12;4267:50;4350:4;4342:6;4338:17;4326:29;;4410:3;4403:4;4393:6;4390:1;4386:14;4378:6;4374:27;4370:38;4367:47;4364:67;;;4427:1;4424;4417:12;4364:67;4070:367;;;;;:::o;4442:798::-;4589:6;4597;4605;4613;4666:2;4654:9;4645:7;4641:23;4637:32;4634:52;;;4682:1;4679;4672:12;4634:52;4722:9;4709:23;4751:18;4792:2;4784:6;4781:14;4778:34;;;4808:1;4805;4798:12;4778:34;4847:70;4909:7;4900:6;4889:9;4885:22;4847:70;:::i;:::-;4936:8;;-1:-1:-1;4821:96:504;-1:-1:-1;5024:2:504;5009:18;;4996:32;;-1:-1:-1;5040:16:504;;;5037:36;;;5069:1;5066;5059:12;5037:36;;5108:72;5172:7;5161:8;5150:9;5146:24;5108:72;:::i;:::-;4442:798;;;;-1:-1:-1;5199:8:504;-1:-1:-1;;;;4442:798:504:o;7002:127::-;7063:10;7058:3;7054:20;7051:1;7044:31;7094:4;7091:1;7084:15;7118:4;7115:1;7108:15;7523:232;7562:3;-1:-1:-1;;7583:17:504;;7580:140;;;7642:10;7637:3;7633:20;7630:1;7623:31;7677:4;7674:1;7667:15;7705:4;7702:1;7695:15;7580:140;-1:-1:-1;7747:1:504;7736:13;;7523:232::o;7959:348::-;8161:2;8143:21;;;8200:2;8180:18;;;8173:30;8239:26;8234:2;8219:18;;8212:54;8298:2;8283:18;;7959:348::o;8621:420::-;8823:2;8805:21;;;8862:2;8842:18;;;8835:30;8901:34;8896:2;8881:18;;8874:62;8972:26;8967:2;8952:18;;8945:54;9031:3;9016:19;;8621:420::o;9046:480::-;9248:2;9230:21;;;9287:2;9267:18;;;9260:30;9326:34;9321:2;9306:18;;9299:62;9397:34;9392:2;9377:18;;9370:62;-1:-1:-1;;;9463:3:504;9448:19;;9441:43;9516:3;9501:19;;9046:480::o;9531:184::-;9601:6;9654:2;9642:9;9633:7;9629:23;9625:32;9622:52;;;9670:1;9667;9660:12;9622:52;-1:-1:-1;9693:16:504;;9531:184;-1:-1:-1;9531:184:504:o;10146:251::-;10216:6;10269:2;10257:9;10248:7;10244:23;10240:32;10237:52;;;10285:1;10282;10275:12;10237:52;10317:9;10311:16;10336:31;10361:5;10336:31;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "add(address[],address[])": "9c9192c6", + "addFallbacks(address[],address[])": "9a5471fc", + "admin()": "f851a440", + "canAdminOverwrite()": "656b0fd1", + "changeAdmin(address)": "8f283970", + "defaultOracle()": "80dce169", + "fallbackOracles(address)": "727a259b", + "getUnderlyingPrice(address)": "fc57d4df", + "initialize(address[],address[],address,address,bool,address)": "882b92a7", + "oracles(address)": "addd5099", + "price(address)": "aea91078", + "setDefaultOracle(address)": "c44014d2", + "wtoken()": "9c0591c8" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/MasterPriceOracle_Proxy.json b/packages/sdk/deployments/bob/MasterPriceOracle_Proxy.json new file mode 100644 index 000000000..4e77a359e --- /dev/null +++ b/packages/sdk/deployments/bob/MasterPriceOracle_Proxy.json @@ -0,0 +1,271 @@ +{ + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "transactionIndex": 2, + "gasUsed": "846862", + "logsBloom": "0x00000000000000000000000000000400400000008000000000000000000000000000000000000080000000000000000000000000000000000000000000000000000000000008000000000000000002000000000000000000000000000000000000000000000000000000000000000000000800800000000000000000000000000000000000000000000000000000000000400000000080000000000000800008000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000000000000000000080000000000000000000000100000000000000000000000000000", + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac", + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "logs": [ + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000987f3103c976caf5087087bbf99a7e389f22311c" + ], + "data": "0x", + "logIndex": 7, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + }, + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0x10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126" + ], + "data": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8d2d1195a548fe2ff69c31c4c90e54b263771c7", + "logIndex": 8, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + }, + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0x10e7c87bebf274db4de1b5f9fc731d6f83096e550bd871b681314578404d3126" + ], + "data": "0x00000000000000000000000042000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000000000000000000000000000000d8d2d1195a548fe2ff69c31c4c90e54b263771c7", + "logIndex": 9, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + }, + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 10, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + }, + { + "transactionIndex": 2, + "blockNumber": 3777877, + "transactionHash": "0xcf0a85b276fa70975b1283edc7997ade650f56d79130f4f376764a1d8b5d5f29", + "address": "0x7Ea7BB80F3bBEE9b52e6Ed3775bA06C9C80D4154", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 11, + "blockHash": "0xc6df1e67a14bee3f8adf740d73956672958d6689765950d4240ccc68290692ac" + } + ], + "blockNumber": 3777877, + "cumulativeGasUsed": "1031167", + "status": 1, + "byzantium": true + }, + "args": [ + "0x987F3103c976CAF5087087bbF99A7E389F22311c", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0x882b92a700000000000000000000000000000000000000000000000000000000000000c0000000000000000000000000000000000000000000000000000000000000012000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7000000000000000000000000000000000000000000000000000000000000000100000000000000000000000042000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000000000000000000000000000000042000000000000000000000000000000000000060000000000000000000000000000000000000000000000000000000000000002000000000000000000000000d8d2d1195a548fe2ff69c31c4c90e54b263771c7000000000000000000000000d8d2d1195a548fe2ff69c31c4c90e54b263771c7" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/OptimizedVaultsRegistry.json b/packages/sdk/deployments/bob/OptimizedVaultsRegistry.json new file mode 100644 index 000000000..21225c518 --- /dev/null +++ b/packages/sdk/deployments/bob/OptimizedVaultsRegistry.json @@ -0,0 +1,695 @@ +{ + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addVault", + "inputs": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getAllVaults", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract OptimizedAPRVaultBase[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getClaimableRewards", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardsData", + "type": "tuple[]", + "internalType": "struct OptimizedVaultsRegistry.ClaimableRewardsInfo[]", + "components": [ + { + "name": "flywheel", + "type": "address", + "internalType": "address" + }, + { + "name": "vault", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardToken", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardTokenName", + "type": "string", + "internalType": "string" + }, + { + "name": "rewardTokenSymbol", + "type": "string", + "internalType": "string" + }, + { + "name": "rewardTokenDecimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "rewards", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getLatestVaultExtensions", + "inputs": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract OptimizedAPRVaultExtension[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVaultsData", + "inputs": [], + "outputs": [ + { + "name": "vaultsData", + "type": "tuple[]", + "internalType": "struct OptimizedVaultsRegistry.VaultInfo[]", + "components": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + }, + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "assetSymbol", + "type": "string", + "internalType": "string" + }, + { + "name": "assetDecimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "estimatedTotalAssets", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "apr", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adaptersCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "isEmergencyStopped", + "type": "bool", + "internalType": "bool" + }, + { + "name": "performanceFee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "depositFee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "withdrawalFee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "managementFee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "adaptersData", + "type": "tuple[]", + "internalType": "struct OptimizedVaultsRegistry.AdapterInfo[]", + "components": [ + { + "name": "adapter", + "type": "address", + "internalType": "address" + }, + { + "name": "allocation", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "market", + "type": "address", + "internalType": "address" + }, + { + "name": "pool", + "type": "address", + "internalType": "address" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeVault", + "inputs": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setEmergencyExit", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setLatestVaultExtensions", + "inputs": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + }, + { + "name": "extensions", + "type": "address[]", + "internalType": "contract OptimizedAPRVaultExtension[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "vaults", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract OptimizedAPRVaultBase" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "transactionIndex": 1, + "gasUsed": "772008", + "logsBloom": "0x00000000000000000000000010000000400000000000800000800000000200000000000000000000000000000000008000000000100000000000004000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000800000001000000000000000400000000000000000000000000000000000000000004080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d", + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000013fd2701c3017bcc375ad14dd8433c6d7a441794" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + } + ], + "blockNumber": 3777937, + "cumulativeGasUsed": "824235", + "status": 1, + "byzantium": true + }, + "args": [ + "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0x8129fc1c" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [] + }, + "implementation": "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/OptimizedVaultsRegistry_Implementation.json b/packages/sdk/deployments/bob/OptimizedVaultsRegistry_Implementation.json new file mode 100644 index 000000000..e2bfeee6a --- /dev/null +++ b/packages/sdk/deployments/bob/OptimizedVaultsRegistry_Implementation.json @@ -0,0 +1,1453 @@ +{ + "address": "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "abi": [ + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "addVault", + "inputs": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getAllVaults", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract OptimizedAPRVaultBase[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getClaimableRewards", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "rewardsData", + "type": "tuple[]", + "internalType": "struct OptimizedVaultsRegistry.ClaimableRewardsInfo[]", + "components": [ + { + "name": "flywheel", + "type": "address", + "internalType": "address" + }, + { + "name": "vault", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardToken", + "type": "address", + "internalType": "address" + }, + { + "name": "rewardTokenName", + "type": "string", + "internalType": "string" + }, + { + "name": "rewardTokenSymbol", + "type": "string", + "internalType": "string" + }, + { + "name": "rewardTokenDecimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "rewards", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getLatestVaultExtensions", + "inputs": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract OptimizedAPRVaultExtension[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVaultsData", + "inputs": [], + "outputs": [ + { + "name": "vaultsData", + "type": "tuple[]", + "internalType": "struct OptimizedVaultsRegistry.VaultInfo[]", + "components": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + }, + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "assetSymbol", + "type": "string", + "internalType": "string" + }, + { + "name": "assetDecimals", + "type": "uint8", + "internalType": "uint8" + }, + { + "name": "estimatedTotalAssets", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "apr", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adaptersCount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "isEmergencyStopped", + "type": "bool", + "internalType": "bool" + }, + { + "name": "performanceFee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "depositFee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "withdrawalFee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "managementFee", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "adaptersData", + "type": "tuple[]", + "internalType": "struct OptimizedVaultsRegistry.AdapterInfo[]", + "components": [ + { + "name": "adapter", + "type": "address", + "internalType": "address" + }, + { + "name": "allocation", + "type": "uint64", + "internalType": "uint64" + }, + { + "name": "market", + "type": "address", + "internalType": "address" + }, + { + "name": "pool", + "type": "address", + "internalType": "address" + } + ] + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "removeVault", + "inputs": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setEmergencyExit", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setLatestVaultExtensions", + "inputs": [ + { + "name": "vault", + "type": "address", + "internalType": "address" + }, + { + "name": "extensions", + "type": "address[]", + "internalType": "contract OptimizedAPRVaultExtension[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "vaults", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract OptimizedAPRVaultBase" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xc8f3df6a78aaecd94695ed3611dc3af6c77ef46a6b6d3e8e03e027810cbd8bc8", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "transactionIndex": 2, + "gasUsed": "2017739", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x7489039091f6825345015746c2fe5cb8d04ccb0546be778cb27ea8c2c7d6f338", + "transactionHash": "0xc8f3df6a78aaecd94695ed3611dc3af6c77ef46a6b6d3e8e03e027810cbd8bc8", + "logs": [], + "blockNumber": 3777933, + "cumulativeGasUsed": "2473742", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "addVault", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllVaults", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultBase[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getClaimableRewards", + "outputs": [ + { + "internalType": "struct OptimizedVaultsRegistry.ClaimableRewardsInfo[]", + "name": "rewardsData", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "flywheel", + "type": "address" + }, + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "rewardToken", + "type": "address" + }, + { + "internalType": "string", + "name": "rewardTokenName", + "type": "string" + }, + { + "internalType": "string", + "name": "rewardTokenSymbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "rewardTokenDecimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "rewards", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getLatestVaultExtensions", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultExtension[]", + "name": "", + "type": "address[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getVaultsData", + "outputs": [ + { + "internalType": "struct OptimizedVaultsRegistry.VaultInfo[]", + "name": "vaultsData", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "string", + "name": "assetSymbol", + "type": "string" + }, + { + "internalType": "uint8", + "name": "assetDecimals", + "type": "uint8" + }, + { + "internalType": "uint256", + "name": "estimatedTotalAssets", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "apr", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adaptersCount", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "isEmergencyStopped", + "type": "bool" + }, + { + "internalType": "uint64", + "name": "performanceFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "depositFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "withdrawalFee", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "managementFee", + "type": "uint64" + }, + { + "internalType": "struct OptimizedVaultsRegistry.AdapterInfo[]", + "name": "adaptersData", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "adapter", + "type": "address" + }, + { + "internalType": "uint64", + "name": "allocation", + "type": "uint64" + }, + { + "internalType": "address", + "name": "market", + "type": "address" + }, + { + "internalType": "address", + "name": "pool", + "type": "address" + } + ] + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "removeVault", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "setEmergencyExit" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "vault", + "type": "address" + }, + { + "internalType": "contract OptimizedAPRVaultExtension[]", + "name": "extensions", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setLatestVaultExtensions" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "vaults", + "outputs": [ + { + "internalType": "contract OptimizedAPRVaultBase", + "name": "", + "type": "address" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/ionic/vault/OptimizedVaultsRegistry.sol": "OptimizedVaultsRegistry" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/external/angle/IGenericLender.sol": { + "keccak256": "0xf6dbe403993aa3d7815ef521a81c7b62eab0df3dba1ff811c52ea4f8fb9b3523", + "urls": [ + "bzz-raw://2a9bd82fc998b881bf280565daaf0555ad2e273d3834bd65cb1b1518eef3bf45", + "dweb:/ipfs/QmPkwLXGeno5jgqTdq6SRxE72RwUbFcokT4B9t5P5AFZQQ" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnable.sol": { + "keccak256": "0x197d918d773af5d2d6b0235539ede726a9dd5f5153e4c0356a5700f2d85c836f", + "urls": [ + "bzz-raw://3aae81df51f443634c5d324010012cdda17d860d78a5e0bca3d1768faf1bb0f7", + "dweb:/ipfs/QmbiwXzimCjBXMT6zZsUR9MTjqb6bfJjrsL2KXbqYRTKNt" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/CompoundMarketERC4626.sol": { + "keccak256": "0xd87ceedd3a7eb53ec1ecd0401a277fdc788e1513adaf7c6bde09e98866dfe49d", + "urls": [ + "bzz-raw://df95e6f5b2f8ae56de60868a447a71ec5ddabe319fd03f527f9c453243e7210d", + "dweb:/ipfs/Qmd9RLgLTSXszS36oXPgQVmwV16uvAtC5NaAMsp5x1u68T" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/IonicERC4626.sol": { + "keccak256": "0x58e5f427d74cca82c405d61bab2a109eb335f8ee76c24f05290252fffd787689", + "urls": [ + "bzz-raw://9d30d6e58c749625e69a9f75b5d57538b881aa4c912d0088356f3f8fd68c8c7d", + "dweb:/ipfs/QmVh7p77JMFaExWEvTRNrH72bLMAqWVGf37c1rpuxoZwKA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheel.sol": { + "keccak256": "0x8d4dc0e54619cbf9d7a503c9664163c55dbfbd43dc4ec6c5156711a5fd6bee34", + "urls": [ + "bzz-raw://90e2282f7bc72e65c084f40eee44e77f5a59a0702b66222595c417d078094cd5", + "dweb:/ipfs/QmY6jo9jnqeQsD8S6vSSWWT7NJdsXpVQZQh6Vaq6ZZo5QA" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/strategies/flywheel/IonicFlywheelCore.sol": { + "keccak256": "0x29992151f4cdf6b87474eee691cbd1208a3fc3a990c187e3f91beddf267e7eca", + "urls": [ + "bzz-raw://9b14dc41c5fb00309968e6f9adca394eed60cf8a2ef3343d48699ea2c4f5f35b", + "dweb:/ipfs/QmTPLEHvzjZgH2vFBuJWLjkJqx2ARjzJeddgXvqyuS3hj7" + ], + "license": "AGPL-3.0-only" + }, + "contracts/ionic/vault/IVault.sol": { + "keccak256": "0xebd52464c8c17da0dff573bd79369adb53fa58a332ea618f6969344cbeb01a2d", + "urls": [ + "bzz-raw://7da9fdad665fc69ff408c37f80ef1d7aa648ca01b78c77639558a722b567ede6", + "dweb:/ipfs/QmYhXGtpDXKZ4yhSWDGna7F3JZTTYA6BJZDyWnFZoHWQn1" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultBase.sol": { + "keccak256": "0x20d3308297d0156d451fd754e275c44490ce5dd92a96983f52e5cc026319e45b", + "urls": [ + "bzz-raw://45ba1924afeb328961df974702ec762a6dfdcbdd9ab68c9ed1d020e54d1a00aa", + "dweb:/ipfs/QmdhoDfGjPgPPCdFX494gT3T6G1h8Ss93aj1MJS4wA4mfs" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultExtension.sol": { + "keccak256": "0x2f5d71c6f5c12a377f92c7a6c745f0d2186cf790bfcc3331038b90c6f2165045", + "urls": [ + "bzz-raw://8f9b7a034982e4d38740c12ea46f1df40f8e9d2fe7cc9469117390aae6b48222", + "dweb:/ipfs/QmW157vVFGVeJ3eCyZxac2oUXi5yiNoQTzCakEZcxJjRPv" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultFirstExtension.sol": { + "keccak256": "0x4aab91cd3821d059dd4a22026720f61e1653e1fcdfa4e0c9ba7145aaf2c0e551", + "urls": [ + "bzz-raw://62a627b35e1efb71963e7e250f1338bc566d69d5e0a96ccbe983bfa8e9f5bc60", + "dweb:/ipfs/QmZjDo5CQ256uFKRNjm2GPSbo4RWJtc5LDscKbmME8QU11" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultSecondExtension.sol": { + "keccak256": "0x0e344758fe17a59a39c4ff482b54ff1132b2cec445ecdc9f42eaabb49a75762b", + "urls": [ + "bzz-raw://9003ad6c7fd20b3a18655e4958fdeba7a73b2c1cb5a4a34ee5f1fa69b7df3b18", + "dweb:/ipfs/QmWPKhTdKksqpHKWLiwL192C5MGkSqKPGfieVjCdX6dt8a" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedAPRVaultStorage.sol": { + "keccak256": "0x340d0c48515f5ba15552bca8b9cdecaf7ca1459124bdd30e853dfb8c34413fe3", + "urls": [ + "bzz-raw://770a3f53cb365924957995fc993bbdbdd8442b8743ce788e743a114bf7cbf99d", + "dweb:/ipfs/QmV9qLTmZcVRnPN9CDWyCDK9rCXjQhzXVGjBd7Z2hSFRSn" + ], + "license": "GPL-3.0" + }, + "contracts/ionic/vault/OptimizedVaultsRegistry.sol": { + "keccak256": "0xbf823e701e83fb0f6038d08fe51f3a8dff3ba82ceaf384c4c862553ee6021853", + "urls": [ + "bzz-raw://246122dab59fdbf7620abdb1a29dfc5f452204627947c556749e0fd16eb3f172", + "dweb:/ipfs/QmNm7E4eE2Ev5F4AizDNcxYBnAqyWcU7Sbf9kdMBZ8kboo" + ], + "license": null + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/flywheel-v2/src/FlywheelCore.sol": { + "keccak256": "0x4b8d71408e2a1c5c1d1800d63d1dc5eb8dc51298a8633753d0188e43c0103a00", + "urls": [ + "bzz-raw://5010891d2d0434605b901a44e200fa93e7a530f8dffa3ebbc8e2188e6aec9e88", + "dweb:/ipfs/QmR7VbWWZ7zpcKfBoJboR2uqRBpHwkYQ5zsL2hVUfcizs2" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelBooster.sol": { + "keccak256": "0x37dd3fce4e213452f8483c6647f5eaa862087af6673828b16e844a1be40a8b39", + "urls": [ + "bzz-raw://23164e5512573e53d24174c4115babab94cd85ad91125fc1ee2d05e20dcffc96", + "dweb:/ipfs/QmXn7Ucmb7iZR2iz1jxf2nPg4Kx5KPZSg3KGhefXDo6scn" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/interfaces/IFlywheelRewards.sol": { + "keccak256": "0xed4398787395ee45cd48f73d236c610c9bcb7b997c4c44dc2e36bcef3d03f74c", + "urls": [ + "bzz-raw://c3ef1fce0e7bc3c0a2a20ef2305458a419bd51f4af5c354ea42467636ee324a7", + "dweb:/ipfs/QmUkSxcEf4F9QR4QVEt6rrKjQ9gtufSCLtCwP1iRxmJshk" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/rewards/BaseFlywheelRewards.sol": { + "keccak256": "0xfc327d6197eefeb73d09de1091d510415de4b326d4059149c20bd1b762d300f7", + "urls": [ + "bzz-raw://3ef5c4b546fd9a7880677fe34654008a501b03ea50f66558aeaeee2c456aec31", + "dweb:/ipfs/QmQajrWGJPso48b55GE8ASXdCBXbAQGmdfXjWbEa9ZDztA" + ], + "license": "AGPL-3.0-only" + }, + "lib/flywheel-v2/src/rewards/FlywheelDynamicRewards.sol": { + "keccak256": "0xd926ed316540e5fa7b78549119ce0349d317dcbe0d5ea319455828c67901f254", + "urls": [ + "bzz-raw://81d2252b0bd131ceb2f10cd8262840853fe6cc8202f56de1a040b32922993dc7", + "dweb:/ipfs/QmYDejAsPQnLoGH5djUbhcbCT2BHqtGBwULPJB2gsNNqEr" + ], + "license": "AGPL-3.0-only" + }, + "lib/fuse-flywheel/src/rewards/FuseFlywheelDynamicRewards.sol": { + "keccak256": "0xefe1448525f2c0420e5a7733a759f045090da4f4e826dc997249e0276f2a399d", + "urls": [ + "bzz-raw://2a78fe582474df4181ed0e1870dcfe088e9ddf69bf349bf3d4095dc99ea7ac77", + "dweb:/ipfs/QmVJWDYwLA5vRsJiLam7eWCxbJ1JRwaGkohL5KK9tsN7b8" + ], + "license": "AGPL-3.0-only" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/interfaces/IERC4626Upgradeable.sol": { + "keccak256": "0xe3d54e1a1a10fbc86fdfaf9100ba99c9c808588fd20d0c919457b903b5cae61a", + "urls": [ + "bzz-raw://7e2f616c3ebcf6db05b9242b870f69bf902533cc3248e352b0e1e1a04d6da8b8", + "dweb:/ipfs/QmbNV3EejvPoLWVXTjLRyHyFnaxdQoxpFkXMbZbPvDf7eq" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/security/PausableUpgradeable.sol": { + "keccak256": "0x40c636b4572ff5f1dc50cf22097e93c0723ee14eff87e99ac2b02636eeca1250", + "urls": [ + "bzz-raw://9c7d1f5e15633ab912b74c2f57e24559e66b03232300d4b27ff0f25bc452ecad", + "dweb:/ipfs/QmYTJkc1cntYkKQ1Tu11nBcJLakiy93Tjytc4XHELo4GmR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/security/ReentrancyGuardUpgradeable.sol": { + "keccak256": "0xefe5b03cf4147c27e7e38a1b8ddb3e0dc7f0ba8f6be71627d962fa91c98943dd", + "urls": [ + "bzz-raw://d41b6359e78c5a2ce4c9d7697a876bcb307f05ddd9f4695831d70efcd425eebc", + "dweb:/ipfs/QmbmbxDte15Thu4pWG4dNYRHVSbXZZEDRSWfg8haKNjNJp" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/ERC4626Upgradeable.sol": { + "keccak256": "0x82dd1556d6774b8bdaec0fb70d09c9d9cb0d75e9f2ffc183bb09a16b86d7c598", + "urls": [ + "bzz-raw://c600ba91f853e92cd945ba0e9ebc1d66e0b0ff8f7a0a7b46aee7e1c7700ce2fd", + "dweb:/ipfs/QmUGysmaKrxkja24Tb2Ur1NW1SwNDg8fpeaU4L1MVkkY3u" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/math/MathUpgradeable.sol": { + "keccak256": "0xb49137b771712774960cca0acf428499e2aa85f179fe03712e5c06c5a6ab6316", + "urls": [ + "bzz-raw://ec66760482c33d84dda577e3a7a4b81000a92e37cae5c8b55339e2d83abfce03", + "dweb:/ipfs/QmVDSFsp9dnW8P92Yrq2jAjr9piKke8gjuZX5QjtFuZRfx" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable.sol": { + "keccak256": "0xa94b34880e3c1b0b931662cb1c09e5dfa6662f31cba80e07c5ee71cd135c9673", + "urls": [ + "bzz-raw://40fb1b5102468f783961d0af743f91b9980cf66b50d1d12009f6bb1869cea4d2", + "dweb:/ipfs/QmYqEbJML4jB1GHbzD4cUZDtJg5wVwNm3vDJq1GbyDus8y" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/access/Ownable2Step.sol": { + "keccak256": "0x6adb35bab98e4b2aeafeba8d975dd22db19800b7bb15ec58e4fb78c837eeb054", + "urls": [ + "bzz-raw://ec44134e911aa2df880e1dc900b57e24b7f2cc4bf7f0c1dec6d1dbeef35f7e97", + "dweb:/ipfs/QmZKWEGgkmMUyU1fMgu7dhUctXiaxLdCuv15cejsvhMoVn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Context.sol": { + "keccak256": "0xe2e337e6dde9ef6b680e07338c493ebea1b5fd09b43424112868e9cc1706bca7", + "urls": [ + "bzz-raw://6df0ddf21ce9f58271bdfaa85cde98b200ef242a05a3f85c2bc10a8294800a92", + "dweb:/ipfs/QmRK2Y5Yc6BK7tGKkgsgn3aJEQGi5aakeSPZvS65PV8Xp3" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/FixedPointMathLib.sol": { + "keccak256": "0xab8ca9afbb0f7412e1408d4f111b53cc00813bc752236638ad336050ea2188f8", + "urls": [ + "bzz-raw://cd892e4743a124063b7bc590c6f88f209a18a4831b18045afd843264fa75427f", + "dweb:/ipfs/QmRunGD7E8enP5oZKiN8DxvAJew7J3jaz1iiHTFZj5Ghfc" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeCastLib.sol": { + "keccak256": "0xb784a14411858036491124e677aecde6d500e695b7a70c74aa8f1001bda2ccab", + "urls": [ + "bzz-raw://7610da561fe84b893cb46410acdf9e56c204029a21cb717c11cde33ed4354427", + "dweb:/ipfs/QmQ7LyNz9V48ox4BgncCpvqq4LcDFwqz9q3CTrsrLmdPrk" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/utils/SafeTransferLib.sol": { + "keccak256": "0x333b56bef66ff71e3838910781df214acbeb6c2d6ace27a04ebb510f0e669300", + "urls": [ + "bzz-raw://3d14e68954e3a7072fa3d31e6a862d97f944114abda40dcd8c5ba017bf79ff41", + "dweb:/ipfs/QmVfLok4Q5owoMyybxpensBvvjgUKT4kRVvM9BYuCifi5L" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50612387806100206000396000f3fe608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063e30c397811610066578063e30c397814610211578063f2fde38b14610224578063fc4d33f914610237578063fcf2d0ad1461023f57600080fd5b80638da5cb5b146101c557806397331bf9146101d6578063ceb68c23146101eb578063d9d17645146101fe57600080fd5b8063715018a6116100d3578063715018a6146101775780638129fc1c1461017f578063857ecda2146101875780638c64ea4a1461019a57600080fd5b8063256b5a0214610105578063308e401e1461012d5780634a672a541461014d5780636e96dfd714610162575b600080fd5b610118610113366004611c3b565b610247565b60405190151581526020015b60405180910390f35b61014061013b366004611c3b565b610305565b6040516101249190611cb7565b610155610973565b6040516101249190611e02565b610175610170366004611c3b565b61125d565b005b6101756112c7565b61017561130f565b610175610195366004611f27565b611421565b6101ad6101a8366004611fae565b611452565b6040516001600160a01b039091168152602001610124565b6033546001600160a01b03166101ad565b6101de61147c565b6040516101249190611fc7565b6101186101f9366004611c3b565b6114de565b6101de61020c366004611c3b565b6115ff565b6065546101ad906001600160a01b031681565b610175610232366004611c3b565b611675565b6101756116e6565b6101756117fa565b6000610251611a7b565b60005b6066548110156102b157826001600160a01b03166066828154811061027b5761027b612014565b6000918252602090912001546001600160a01b0316141561029f5750600092915050565b806102a981612040565b915050610254565b505060668054600180820183556000929092527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b0384161790555b919050565b60606000805b6066548110156104265760006066828154811061032a5761032a612014565b60009182526020918290200154604080516319c42cfb60e11b815290516001600160a01b039092169263338859f6926004808401938290030181865afa158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c919061205b565b6001600160a01b03166374fd2c386040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261040191908101906120be565b9050805183610410919061216f565b925050808061041e90612040565b91505061030b565b50806001600160401b0381111561043f5761043f612078565b6040519080825280602002602001820160405280156104a557816020015b6040805160e081018252600080825260208083018290529282018190526060808301819052608083015260a0820181905260c0820152825260001990920191018161045d5790505b509150506000805b60665481101561096c576000606682815481106104cc576104cc612014565b6000918252602080832090910154604080516319c42cfb60e11b815290516001600160a01b039092169450849263338859f6926004808401938290030181865afa15801561051e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610542919061205b565b6001600160a01b03166374fd2c386040518163ffffffff1660e01b8152600401600060405180830381865afa15801561057f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105a791908101906120be565b805190915060005b818110156109495760008382815181106105cb576105cb612014565b60200260200101519050848883896105e3919061216f565b815181106105f3576105f3612014565b6020908102919091018101516001600160a01b039092169101528088610619848a61216f565b8151811061062957610629612014565b60209081029190910101516001600160a01b039182169052604051632e6f912b60e21b815286821660048201528a821660248201529082169063b9be44ac906044016020604051808303816000875af115801561068a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ae9190612187565b886106b9848a61216f565b815181106106c9576106c9612014565b602002602001015160c00181815250506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d919061205b565b9050808961074b858b61216f565b8151811061075b5761075b612014565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107e591908101906121a0565b896107f0858b61216f565b8151811061080057610800612014565b602002602001015160600181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087591908101906121a0565b89610880858b61216f565b8151811061089057610890612014565b602002602001015160800181905250806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190612233565b8961090c858b61216f565b8151811061091c5761091c612014565b602002602001015160a0019060ff16908160ff16815250505050808061094190612040565b9150506105af565b50610954818661216f565b9450505050808061096490612040565b9150506104ad565b5050919050565b6066546060906001600160401b0381111561099057610990612078565b604051908082528060200260200182016040528015610a2957816020015b604080516101a08101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201526101808101919091528152602001906001900390816109ae5790505b50905060005b60665481101561125957600060668281548110610a4e57610a4e612014565b6000918252602091829020015460408051632d50845360e21b815290516001600160a01b039092169263b542114c926004808401938290030181865afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061205b565b9050600060668381548110610ad757610ad7612014565b6000918252602091829020015460408051637c7a561b60e01b815290516001600160a01b0390921692637c7a561b926004808401938290030181865afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190612233565b905060008160ff166001600160401b03811115610b6857610b68612078565b604051908082528060200260200182016040528015610bba57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610b865790505b50905060005b8260ff16811015610e115760008060668781548110610be157610be1612014565b6000918252602090912001546040516313bd406b60e21b8152600481018590526001600160a01b0390911690634ef501ac906024016040805180830381865afa158015610c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c56919061226d565b915091506000826001600160a01b03166380f556056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbe919061205b565b905082858581518110610cd357610cd3612014565b6020026020010151600001906001600160a01b031690816001600160a01b03168152505081858581518110610d0a57610d0a612014565b6020026020010151602001906001600160401b031690816001600160401b03168152505080858581518110610d4157610d41612014565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc7919061205b565b858581518110610dd957610dd9612014565b6020026020010151606001906001600160a01b031690816001600160a01b03168152505050505080610e0a90612040565b9050610bc0565b50600080600080866001600160a01b0316639af1d35a6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7a91906122a2565b9350935093509350604051806101a00160405280886001600160a01b03168152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eff919061205b565b6001600160a01b03168152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f919061205b565b6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fd491908101906121a0565b8152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061205b565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c9190612233565b60ff168152602001886001600160a01b031663efbb5cb06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111069190612187565b8152602001886001600160a01b0316635a5cd45e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612187565b81526020018760ff168152602001886001600160a01b0316635641ec036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dd91906122f6565b15158152602001856001600160401b03168152602001846001600160401b03168152602001836001600160401b03168152602001826001600160401b031681526020018681525089898151811061123657611236612014565b6020026020010181905250505050505050508061125290612040565b9050610a2f565b5090565b611265611a7b565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6112cf611a7b565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b600054610100900460ff161580801561132f5750600054600160ff909116105b806113495750303b158015611349575060005460ff166001145b6113ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611306565b6000805460ff1916600117905580156113cf576000805461ff0019166101001790555b6113d833611ad7565b801561141e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b611429611a7b565b6001600160a01b038316600090815260676020526040902061144c908383611bb7565b50505050565b6066818154811061146257600080fd5b6000918252602090912001546001600160a01b0316905081565b606060668054806020026020016040519081016040528092919081815260200182805480156114d457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114b6575b5050505050905090565b60006114e8611a7b565b60005b6066548110156115f657826001600160a01b03166066828154811061151257611512612014565b6000918252602090912001546001600160a01b031614156115e4576066805461153d90600190612318565b8154811061154d5761154d612014565b600091825260209091200154606680546001600160a01b03909216918390811061157957611579612014565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055606680546115b290600190612318565b815481106115c2576115c2612014565b600091825260209091200180546001600160a01b031916905550600192915050565b806115ee81612040565b9150506114eb565b50600092915050565b6001600160a01b03811660009081526067602090815260409182902080548351818402810184019094528084526060939283018282801561166957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161164b575b50505050509050919050565b61167d611a7b565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146117385760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401611306565b600061174c6033546001600160a01b031690565b6065549091506001600160a01b031661176481611b0b565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91016112bb565b611802611a7b565b60005b60665481101561141e5760006066828154811061182457611824612014565b6000918252602091829020015460408051637c7a561b60e01b815290516001600160a01b0390921692637c7a561b926004808401938290030181865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190612233565b905060005b8160ff16811015611991576000606684815481106118bb576118bb612014565b6000918252602090912001546040516313bd406b60e21b8152600481018490526001600160a01b0390911690634ef501ac906024016040805180830381865afa15801561190c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611930919061226d565b509050806001600160a01b031663283579786040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561196e57600080fd5b505af192505050801561197f575060015b505061198a81612040565b905061189b565b50606682815481106119a5576119a5612014565b6000918252602091829020015460408051632d50845360e21b815290516001600160a01b039092169263b542114c926004808401938290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a17919061205b565b6001600160a01b031663fcf2d0ad6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b505050505080611a7490612040565b9050611805565b6033546001600160a01b03163314611ad55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611306565b565b600054610100900460ff16611afe5760405162461bcd60e51b81526004016113069061232f565b611b06611b5d565b61141e815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611b845760405162461bcd60e51b81526004016113069061232f565b611ad5600054610100900460ff16611bae5760405162461bcd60e51b81526004016113069061232f565b611ad533611b0b565b828054828255906000526020600020908101928215611c0a579160200282015b82811115611c0a5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611bd7565b506112599291505b808211156112595760008155600101611c12565b6001600160a01b038116811461141e57600080fd5b600060208284031215611c4d57600080fd5b8135611c5881611c26565b9392505050565b60005b83811015611c7a578181015183820152602001611c62565b8381111561144c5750506000910152565b60008151808452611ca3816020860160208601611c5f565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611d8257888303603f19018552815180516001600160a01b0390811685528882015181168986015287820151168785015260608082015160e08287018190529190611d2f83880182611c8b565b9250505060808083015186830382880152611d4a8382611c8b565b9250505060a080830151611d628288018260ff169052565b505060c09182015194909101939093529386019390860190600101611cde565b509098975050505050505050565b600081518084526020808501945080840160005b83811015611df757815180516001600160a01b039081168952848201516001600160401b0316858a01526040808301518216908a0152606091820151169088015260809096019590820190600101611da4565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611d8257888303603f19018552815180516001600160a01b031684526101a0818901516001600160a01b038116868b015250878201518189870152611e7482870182611c8b565b915050606080830151611e8b8288018260ff169052565b50506080828101519086015260a0808301519086015260c0808301519086015260e080830151151590860152610100808301516001600160401b0390811691870191909152610120808401518216908701526101408084015182169087015261016080840151909116908601526101809182015185820392860192909252611f138183611d90565b968901969450505090860190600101611e29565b600080600060408486031215611f3c57600080fd5b8335611f4781611c26565b925060208401356001600160401b0380821115611f6357600080fd5b818601915086601f830112611f7757600080fd5b813581811115611f8657600080fd5b8760208260051b8501011115611f9b57600080fd5b6020830194508093505050509250925092565b600060208284031215611fc057600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156120085783516001600160a01b031683529284019291840191600101611fe3565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156120545761205461202a565b5060010190565b60006020828403121561206d57600080fd5b8151611c5881611c26565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156120b6576120b6612078565b604052919050565b600060208083850312156120d157600080fd5b82516001600160401b03808211156120e857600080fd5b818501915085601f8301126120fc57600080fd5b81518181111561210e5761210e612078565b8060051b915061211f84830161208e565b818152918301840191848101908884111561213957600080fd5b938501935b83851015612163578451925061215383611c26565b828252938501939085019061213e565b98975050505050505050565b600082198211156121825761218261202a565b500190565b60006020828403121561219957600080fd5b5051919050565b6000602082840312156121b257600080fd5b81516001600160401b03808211156121c957600080fd5b818401915084601f8301126121dd57600080fd5b8151818111156121ef576121ef612078565b612202601f8201601f191660200161208e565b915080825285602082850101111561221957600080fd5b61222a816020840160208601611c5f565b50949350505050565b60006020828403121561224557600080fd5b815160ff81168114611c5857600080fd5b80516001600160401b038116811461030057600080fd5b6000806040838503121561228057600080fd5b825161228b81611c26565b915061229960208401612256565b90509250929050565b600080600080608085870312156122b857600080fd5b6122c185612256565b93506122cf60208601612256565b92506122dd60408601612256565b91506122eb60608601612256565b905092959194509250565b60006020828403121561230857600080fd5b81518015158114611c5857600080fd5b60008282101561232a5761232a61202a565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "466:5443:190:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101005760003560e01c80638da5cb5b11610097578063e30c397811610066578063e30c397814610211578063f2fde38b14610224578063fc4d33f914610237578063fcf2d0ad1461023f57600080fd5b80638da5cb5b146101c557806397331bf9146101d6578063ceb68c23146101eb578063d9d17645146101fe57600080fd5b8063715018a6116100d3578063715018a6146101775780638129fc1c1461017f578063857ecda2146101875780638c64ea4a1461019a57600080fd5b8063256b5a0214610105578063308e401e1461012d5780634a672a541461014d5780636e96dfd714610162575b600080fd5b610118610113366004611c3b565b610247565b60405190151581526020015b60405180910390f35b61014061013b366004611c3b565b610305565b6040516101249190611cb7565b610155610973565b6040516101249190611e02565b610175610170366004611c3b565b61125d565b005b6101756112c7565b61017561130f565b610175610195366004611f27565b611421565b6101ad6101a8366004611fae565b611452565b6040516001600160a01b039091168152602001610124565b6033546001600160a01b03166101ad565b6101de61147c565b6040516101249190611fc7565b6101186101f9366004611c3b565b6114de565b6101de61020c366004611c3b565b6115ff565b6065546101ad906001600160a01b031681565b610175610232366004611c3b565b611675565b6101756116e6565b6101756117fa565b6000610251611a7b565b60005b6066548110156102b157826001600160a01b03166066828154811061027b5761027b612014565b6000918252602090912001546001600160a01b0316141561029f5750600092915050565b806102a981612040565b915050610254565b505060668054600180820183556000929092527f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e943540180546001600160a01b0319166001600160a01b0384161790555b919050565b60606000805b6066548110156104265760006066828154811061032a5761032a612014565b60009182526020918290200154604080516319c42cfb60e11b815290516001600160a01b039092169263338859f6926004808401938290030181865afa158015610378573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039c919061205b565b6001600160a01b03166374fd2c386040518163ffffffff1660e01b8152600401600060405180830381865afa1580156103d9573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261040191908101906120be565b9050805183610410919061216f565b925050808061041e90612040565b91505061030b565b50806001600160401b0381111561043f5761043f612078565b6040519080825280602002602001820160405280156104a557816020015b6040805160e081018252600080825260208083018290529282018190526060808301819052608083015260a0820181905260c0820152825260001990920191018161045d5790505b509150506000805b60665481101561096c576000606682815481106104cc576104cc612014565b6000918252602080832090910154604080516319c42cfb60e11b815290516001600160a01b039092169450849263338859f6926004808401938290030181865afa15801561051e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610542919061205b565b6001600160a01b03166374fd2c386040518163ffffffff1660e01b8152600401600060405180830381865afa15801561057f573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526105a791908101906120be565b805190915060005b818110156109495760008382815181106105cb576105cb612014565b60200260200101519050848883896105e3919061216f565b815181106105f3576105f3612014565b6020908102919091018101516001600160a01b039092169101528088610619848a61216f565b8151811061062957610629612014565b60209081029190910101516001600160a01b039182169052604051632e6f912b60e21b815286821660048201528a821660248201529082169063b9be44ac906044016020604051808303816000875af115801561068a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ae9190612187565b886106b9848a61216f565b815181106106c9576106c9612014565b602002602001015160c00181815250506000816001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610719573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061073d919061205b565b9050808961074b858b61216f565b8151811061075b5761075b612014565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050806001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa1580156107bd573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526107e591908101906121a0565b896107f0858b61216f565b8151811061080057610800612014565b602002602001015160600181905250806001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561084d573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261087591908101906121a0565b89610880858b61216f565b8151811061089057610890612014565b602002602001015160800181905250806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156108dd573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109019190612233565b8961090c858b61216f565b8151811061091c5761091c612014565b602002602001015160a0019060ff16908160ff16815250505050808061094190612040565b9150506105af565b50610954818661216f565b9450505050808061096490612040565b9150506104ad565b5050919050565b6066546060906001600160401b0381111561099057610990612078565b604051908082528060200260200182016040528015610a2957816020015b604080516101a08101825260008082526020820181905260609282018390528282018190526080820181905260a0820181905260c0820181905260e082018190526101008201819052610120820181905261014082018190526101608201526101808101919091528152602001906001900390816109ae5790505b50905060005b60665481101561125957600060668281548110610a4e57610a4e612014565b6000918252602091829020015460408051632d50845360e21b815290516001600160a01b039092169263b542114c926004808401938290030181865afa158015610a9c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ac0919061205b565b9050600060668381548110610ad757610ad7612014565b6000918252602091829020015460408051637c7a561b60e01b815290516001600160a01b0390921692637c7a561b926004808401938290030181865afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610b499190612233565b905060008160ff166001600160401b03811115610b6857610b68612078565b604051908082528060200260200182016040528015610bba57816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181610b865790505b50905060005b8260ff16811015610e115760008060668781548110610be157610be1612014565b6000918252602090912001546040516313bd406b60e21b8152600481018590526001600160a01b0390911690634ef501ac906024016040805180830381865afa158015610c32573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c56919061226d565b915091506000826001600160a01b03166380f556056040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c9a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cbe919061205b565b905082858581518110610cd357610cd3612014565b6020026020010151600001906001600160a01b031690816001600160a01b03168152505081858581518110610d0a57610d0a612014565b6020026020010151602001906001600160401b031690816001600160401b03168152505080858581518110610d4157610d41612014565b6020026020010151604001906001600160a01b031690816001600160a01b031681525050806001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610da3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610dc7919061205b565b858581518110610dd957610dd9612014565b6020026020010151606001906001600160a01b031690816001600160a01b03168152505050505080610e0a90612040565b9050610bc0565b50600080600080866001600160a01b0316639af1d35a6040518163ffffffff1660e01b8152600401608060405180830381865afa158015610e56573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e7a91906122a2565b9350935093509350604051806101a00160405280886001600160a01b03168152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610edb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eff919061205b565b6001600160a01b03168152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f4b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6f919061205b565b6001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015610fac573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610fd491908101906121a0565b8152602001886001600160a01b03166338d52e0f6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611017573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061103b919061205b565b6001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611078573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061109c9190612233565b60ff168152602001886001600160a01b031663efbb5cb06040518163ffffffff1660e01b8152600401602060405180830381865afa1580156110e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111069190612187565b8152602001886001600160a01b0316635a5cd45e6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611149573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061116d9190612187565b81526020018760ff168152602001886001600160a01b0316635641ec036040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111dd91906122f6565b15158152602001856001600160401b03168152602001846001600160401b03168152602001836001600160401b03168152602001826001600160401b031681526020018681525089898151811061123657611236612014565b6020026020010181905250505050505050508061125290612040565b9050610a2f565b5090565b611265611a7b565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6112cf611a7b565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b600054610100900460ff161580801561132f5750600054600160ff909116105b806113495750303b158015611349575060005460ff166001145b6113ac5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401611306565b6000805460ff1916600117905580156113cf576000805461ff0019166101001790555b6113d833611ad7565b801561141e576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b611429611a7b565b6001600160a01b038316600090815260676020526040902061144c908383611bb7565b50505050565b6066818154811061146257600080fd5b6000918252602090912001546001600160a01b0316905081565b606060668054806020026020016040519081016040528092919081815260200182805480156114d457602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116114b6575b5050505050905090565b60006114e8611a7b565b60005b6066548110156115f657826001600160a01b03166066828154811061151257611512612014565b6000918252602090912001546001600160a01b031614156115e4576066805461153d90600190612318565b8154811061154d5761154d612014565b600091825260209091200154606680546001600160a01b03909216918390811061157957611579612014565b600091825260209091200180546001600160a01b0319166001600160a01b0392909216919091179055606680546115b290600190612318565b815481106115c2576115c2612014565b600091825260209091200180546001600160a01b031916905550600192915050565b806115ee81612040565b9150506114eb565b50600092915050565b6001600160a01b03811660009081526067602090815260409182902080548351818402810184019094528084526060939283018282801561166957602002820191906000526020600020905b81546001600160a01b0316815260019091019060200180831161164b575b50505050509050919050565b61167d611a7b565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146117385760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401611306565b600061174c6033546001600160a01b031690565b6065549091506001600160a01b031661176481611b0b565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91016112bb565b611802611a7b565b60005b60665481101561141e5760006066828154811061182457611824612014565b6000918252602091829020015460408051637c7a561b60e01b815290516001600160a01b0390921692637c7a561b926004808401938290030181865afa158015611872573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118969190612233565b905060005b8160ff16811015611991576000606684815481106118bb576118bb612014565b6000918252602090912001546040516313bd406b60e21b8152600481018490526001600160a01b0390911690634ef501ac906024016040805180830381865afa15801561190c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611930919061226d565b509050806001600160a01b031663283579786040518163ffffffff1660e01b8152600401600060405180830381600087803b15801561196e57600080fd5b505af192505050801561197f575060015b505061198a81612040565b905061189b565b50606682815481106119a5576119a5612014565b6000918252602091829020015460408051632d50845360e21b815290516001600160a01b039092169263b542114c926004808401938290030181865afa1580156119f3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a17919061205b565b6001600160a01b031663fcf2d0ad6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015611a5157600080fd5b505af1158015611a65573d6000803e3d6000fd5b505050505080611a7490612040565b9050611805565b6033546001600160a01b03163314611ad55760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611306565b565b600054610100900460ff16611afe5760405162461bcd60e51b81526004016113069061232f565b611b06611b5d565b61141e815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16611b845760405162461bcd60e51b81526004016113069061232f565b611ad5600054610100900460ff16611bae5760405162461bcd60e51b81526004016113069061232f565b611ad533611b0b565b828054828255906000526020600020908101928215611c0a579160200282015b82811115611c0a5781546001600160a01b0319166001600160a01b03843516178255602090920191600190910190611bd7565b506112599291505b808211156112595760008155600101611c12565b6001600160a01b038116811461141e57600080fd5b600060208284031215611c4d57600080fd5b8135611c5881611c26565b9392505050565b60005b83811015611c7a578181015183820152602001611c62565b8381111561144c5750506000910152565b60008151808452611ca3816020860160208601611c5f565b601f01601f19169290920160200192915050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611d8257888303603f19018552815180516001600160a01b0390811685528882015181168986015287820151168785015260608082015160e08287018190529190611d2f83880182611c8b565b9250505060808083015186830382880152611d4a8382611c8b565b9250505060a080830151611d628288018260ff169052565b505060c09182015194909101939093529386019390860190600101611cde565b509098975050505050505050565b600081518084526020808501945080840160005b83811015611df757815180516001600160a01b039081168952848201516001600160401b0316858a01526040808301518216908a0152606091820151169088015260809096019590820190600101611da4565b509495945050505050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b83811015611d8257888303603f19018552815180516001600160a01b031684526101a0818901516001600160a01b038116868b015250878201518189870152611e7482870182611c8b565b915050606080830151611e8b8288018260ff169052565b50506080828101519086015260a0808301519086015260c0808301519086015260e080830151151590860152610100808301516001600160401b0390811691870191909152610120808401518216908701526101408084015182169087015261016080840151909116908601526101809182015185820392860192909252611f138183611d90565b968901969450505090860190600101611e29565b600080600060408486031215611f3c57600080fd5b8335611f4781611c26565b925060208401356001600160401b0380821115611f6357600080fd5b818601915086601f830112611f7757600080fd5b813581811115611f8657600080fd5b8760208260051b8501011115611f9b57600080fd5b6020830194508093505050509250925092565b600060208284031215611fc057600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156120085783516001600160a01b031683529284019291840191600101611fe3565b50909695505050505050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156120545761205461202a565b5060010190565b60006020828403121561206d57600080fd5b8151611c5881611c26565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156120b6576120b6612078565b604052919050565b600060208083850312156120d157600080fd5b82516001600160401b03808211156120e857600080fd5b818501915085601f8301126120fc57600080fd5b81518181111561210e5761210e612078565b8060051b915061211f84830161208e565b818152918301840191848101908884111561213957600080fd5b938501935b83851015612163578451925061215383611c26565b828252938501939085019061213e565b98975050505050505050565b600082198211156121825761218261202a565b500190565b60006020828403121561219957600080fd5b5051919050565b6000602082840312156121b257600080fd5b81516001600160401b03808211156121c957600080fd5b818401915084601f8301126121dd57600080fd5b8151818111156121ef576121ef612078565b612202601f8201601f191660200161208e565b915080825285602082850101111561221957600080fd5b61222a816020840160208601611c5f565b50949350505050565b60006020828403121561224557600080fd5b815160ff81168114611c5857600080fd5b80516001600160401b038116811461030057600080fd5b6000806040838503121561228057600080fd5b825161228b81611c26565b915061229960208401612256565b90509250929050565b600080600080608085870312156122b857600080fd5b6122c185612256565b93506122cf60208601612256565b92506122dd60408601612256565b91506122eb60608601612256565b905092959194509250565b60006020828403121561230857600080fd5b81518015158114611c5857600080fd5b60008282101561232a5761232a61202a565b500390565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "466:5443:190:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1166:257;;;;;;:::i;:::-;;:::i;:::-;;;663:14:504;;656:22;638:41;;626:2;611:18;1166:257:190;;;;;;;;2437:1504;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;4409:1498::-;;;:::i;:::-;;;;;;;:::i;1602:386:140:-;;;;;;:::i;:::-;;:::i;:::-;;2703:132;;;:::i;646:82:190:-;;;:::i;889:168::-;;;;;;:::i;:::-;;:::i;529:37::-;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;7785:32:504;;;7767:51;;7755:2;7740:18;529:37:190;7590:234:504;1441:85:454;1513:6;;-1:-1:-1;;;;;1513:6:454;1441:85;;1061:101:190;;;:::i;:::-;;;;;;;:::i;1427:302::-;;;;;;:::i;:::-;;:::i;732:153::-;;;;;;:::i;:::-;;:::i;530:27:140:-;;;;;-1:-1:-1;;;;;530:27:140;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;1733:398:190:-;;;:::i;1166:257::-;1225:4;1334:13:454;:11;:13::i;:::-;1242:9:190::1;1237:118;1257:6;:13:::0;1253:17;::::1;1237:118;;;1311:5;-1:-1:-1::0;;;;;1289:27:190::1;1297:6;1304:1;1297:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;1297:9:190::1;1289:27;1285:64;;;-1:-1:-1::0;1335:5:190::1;::::0;1166:257;-1:-1:-1;;1166:257:190:o;1285:64::-:1;1272:3:::0;::::1;::::0;::::1;:::i;:::-;;;;1237:118;;;-1:-1:-1::0;;1360:6:190::1;:41:::0;;::::1;::::0;;::::1;::::0;;-1:-1:-1;1360:41:190;;;;;::::1;::::0;;-1:-1:-1;;;;;;1360:41:190::1;-1:-1:-1::0;;;;;1360:41:190;::::1;;::::0;;1357:1:454::1;1166:257:190::0;;;:::o;2437:1504::-;2501:41;2558:22;2597:9;2592:188;2616:6;:13;2612:17;;2592:188;;;2646:32;2681:6;2688:1;2681:9;;;;;;;;:::i;:::-;;;;;;;;;;;;:28;;;-1:-1:-1;;;2681:28:190;;;;-1:-1:-1;;;;;2681:9:190;;;;:26;;:28;;;;;;;;;;:9;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;2681:44:190;;:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2681:46:190;;;;;;;;;;;;:::i;:::-;2646:81;;2755:9;:16;2737:34;;;;;:::i;:::-;;;2636:144;2631:3;;;;;:::i;:::-;;;;2592:188;;;;2829:14;-1:-1:-1;;;;;2802:42:190;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2802:42:190;;-1:-1:-1;;2802:42:190;;;;;;;;;;;;2788:56;;2550:301;2865:24;2906:9;2901:1030;2925:6;:13;2921:17;;2901:1030;;;2955:27;2985:6;2992:1;2985:9;;;;;;;;:::i;:::-;;;;;;;;;;;;;3039:24;;;-1:-1:-1;;;3039:24:190;;;;-1:-1:-1;;;;;2985:9:190;;;;-1:-1:-1;2985:9:190;;3039:22;;:24;;;;;;;;;;2985:9;3039:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;3039:40:190;;:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3039:42:190;;;;;;;;;;;;:::i;:::-;3114:16;;3004:77;;-1:-1:-1;3091:20:190;3141:740;3165:12;3161:1;:16;3141:740;;;3196:22;3221:9;3231:1;3221:12;;;;;;;;:::i;:::-;;;;;;;3196:37;;3295:5;3245:11;3276:1;3257:16;:20;;;;:::i;:::-;3245:33;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;3245:56:190;;;:39;;:56;3366:8;3313:11;3325:20;3344:1;3325:16;:20;:::i;:::-;3313:33;;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;;;;3313:62:190;;;;;3431:47;;-1:-1:-1;;;3431:47:190;;11961:15:504;;;3431:47:190;;;11943:34:504;12013:15;;;11993:18;;;11986:43;3431:15:190;;;;;;11878:18:504;;3431:47:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3387:11;3399:20;3418:1;3399:16;:20;:::i;:::-;3387:33;;;;;;;;:::i;:::-;;;;;;;:41;;:91;;;;;3490:17;3510:8;-1:-1:-1;;;;;3510:20:190;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3490:42;-1:-1:-1;3490:42:190;3544:11;3556:20;3575:1;3556:16;:20;:::i;:::-;3544:33;;;;;;;;:::i;:::-;;;;;;;:45;;:68;-1:-1:-1;;;;;3544:68:190;;;-1:-1:-1;;;;;3544:68:190;;;;;3676:11;-1:-1:-1;;;;;3676:16:190;;:18;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3676:18:190;;;;;;;;;;;;:::i;:::-;3624:11;3636:20;3655:1;3636:16;:20;:::i;:::-;3624:33;;;;;;;;:::i;:::-;;;;;;;:49;;:70;;;;3760:11;-1:-1:-1;;;;;3760:18:190;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;3760:20:190;;;;;;;;;;;;:::i;:::-;3706:11;3718:20;3737:1;3718:16;:20;:::i;:::-;3706:33;;;;;;;;:::i;:::-;;;;;;;:51;;:74;;;;3848:11;-1:-1:-1;;;;;3848:20:190;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3792:11;3804:20;3823:1;3804:16;:20;:::i;:::-;3792:33;;;;;;;;:::i;:::-;;;;;;;:53;;:78;;;;;;;;;;;3184:697;;3179:3;;;;;:::i;:::-;;;;3141:740;;;-1:-1:-1;3890:32:190;3910:12;3890:32;;:::i;:::-;;;2945:986;;;2940:3;;;;;:::i;:::-;;;;2901:1030;;;;2857:1080;2437:1504;;;:::o;4409:1498::-;4521:6;:13;4455:29;;-1:-1:-1;;;;;4505:30:190;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4505:30:190;;;;;;;;;;;;;;;;4492:43;;4546:9;4541:1362;4561:6;:13;4557:17;;4541:1362;;;4589:38;4630:6;4637:1;4630:9;;;;;;;;:::i;:::-;;;;;;;;;;;;:29;;;-1:-1:-1;;;4630:29:190;;;;-1:-1:-1;;;;;4630:9:190;;;;:27;;:29;;;;;;;;;;:9;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4589:70;;4667:19;4689:6;4696:1;4689:9;;;;;;;;:::i;:::-;;;;;;;;;;;;:25;;;-1:-1:-1;;;4689:25:190;;;;-1:-1:-1;;;;;4689:9:190;;;;:23;;:25;;;;;;;;;;:9;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4667:47;;4722:33;4776:13;4758:32;;-1:-1:-1;;;;;4758:32:190;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4758:32:190;;-1:-1:-1;;4758:32:190;;;;;;;;;;;;4722:68;;4804:9;4799:389;4819:13;4815:17;;:1;:17;4799:389;;;4850:29;4881:17;4902:6;4909:1;4902:9;;;;;;;;:::i;:::-;;;;;;;;;;;:21;;-1:-1:-1;;;4902:21:190;;;;;13934:25:504;;;-1:-1:-1;;;;;4902:9:190;;;;:18;;13907::504;;4902:21:190;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4849:74;;;;4933:14;4950:7;-1:-1:-1;;;;;4950:14:190;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4933:33;;5010:7;4976:12;4989:1;4976:15;;;;;;;;:::i;:::-;;;;;;;:23;;:42;-1:-1:-1;;;;;4976:42:190;;;-1:-1:-1;;;;;4976:42:190;;;;;5057:10;5028:12;5041:1;5028:15;;;;;;;;:::i;:::-;;;;;;;:26;;:39;-1:-1:-1;;;;;5028:39:190;;;-1:-1:-1;;;;;5028:39:190;;;;;5110:6;5077:12;5090:1;5077:15;;;;;;;;:::i;:::-;;;;;;;:22;;:40;-1:-1:-1;;;;;5077:40:190;;;-1:-1:-1;;;;;5077:40:190;;;;;5158:6;-1:-1:-1;;;;;5158:18:190;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5127:12;5140:1;5127:15;;;;;;;;:::i;:::-;;;;;;;:20;;:52;-1:-1:-1;;;;;5127:52:190;;;-1:-1:-1;;;;;5127:52:190;;;;;4839:349;;;4834:3;;;;:::i;:::-;;;4799:389;;;;5197:21;5220:17;5239:20;5261;5285:5;-1:-1:-1;;;;;5285:10:190;;:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5196:101;;;;;;;;5322:574;;;;;;;;5357:5;-1:-1:-1;;;;;5322:574:190;;;;;5380:5;-1:-1:-1;;;;;5380:11:190;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5322:574:190;;;;;5431:5;-1:-1:-1;;;;;5431:11:190;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5416:36:190;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5416:38:190;;;;;;;;;;;;:::i;:::-;5322:574;;;;5494:5;-1:-1:-1;;;;;5494:11:190;;:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;5479:38:190;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5322:574;;;;;;5551:5;-1:-1:-1;;;;;5551:26:190;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5322:574;;;;5594:5;-1:-1:-1;;;;;5594:18:190;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5322:574;;;;5639:13;5322:574;;;;;;5682:5;-1:-1:-1;;;;;5682:19:190;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5322:574;;;;;;5729:14;-1:-1:-1;;;;;5322:574:190;;;;;5765:10;-1:-1:-1;;;;;5322:574:190;;;;;5800:13;-1:-1:-1;;;;;5322:574:190;;;;;5838:13;-1:-1:-1;;;;;5322:574:190;;;;;5875:12;5322:574;;;5306:10;5317:1;5306:13;;;;;;;;:::i;:::-;;;;;;:590;;;;4581:1322;;;;;;;4576:3;;;;:::i;:::-;;;4541:1362;;;;4409:1498;:::o;1602:386:140:-;1334:13:454;:11;:13::i;:::-;1758:12:140::1;::::0;;-1:-1:-1;;;;;1830:30:140;;::::1;-1:-1:-1::0;;;;;;1830:30:140;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;11943:34:504::0;;;12008:2;11993:18;;11986:43;;;;1934:49:140::1;::::0;11878:18:504;1934:49:140::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:454;:11;:13::i;:::-;2804:26:140::1;::::0;-1:-1:-1;;;2804:26:140;;16585:2:504;2804:26:140::1;::::0;::::1;16567:21:504::0;16624:2;16604:18;;;16597:30;-1:-1:-1;;;16643:18:504;;;16636:46;16699:18;;2804:26:140::1;;;;;;;;646:82:190::0;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;16930:2:504;3314:201:457;;;16912:21:504;16969:2;16949:18;;;16942:30;17008:34;16988:18;;;16981:62;-1:-1:-1;;;17059:18:504;;;17052:44;17113:19;;3314:201:457;16728:410:504;3314:201:457;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;693:30:190::1;712:10;693:18;:30::i;:::-;3640:14:457::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;17295:36:504;;3710:14:457;;17283:2:504;17268:18;3710:14:457;;;;;;;3636:99;3258:483;646:82:190:o;889:168::-;1334:13:454;:11;:13::i;:::-;-1:-1:-1;;;;;1011:28:190;::::1;;::::0;;;:21:::1;:28;::::0;;;;:41:::1;::::0;1042:10;;1011:41:::1;:::i;:::-;;889:168:::0;;;:::o;529:37::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;529:37:190;;-1:-1:-1;529:37:190;:::o;1061:101::-;1106:30;1151:6;1144:13;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1144:13:190;;;;;;;;;;;;;;;;;;;;;;;1061:101;:::o;1427:302::-;1489:4;1334:13:454;:11;:13::i;:::-;1506:9:190::1;1501:206;1521:6;:13:::0;1517:17;::::1;1501:206;;;1575:5;-1:-1:-1::0;;;;;1553:27:190::1;1561:6;1568:1;1561:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;1561:9:190::1;1553:27;1549:152;;;1604:6;1611:13:::0;;:17:::1;::::0;1627:1:::1;::::0;1611:17:::1;:::i;:::-;1604:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;1592:6:::1;:9:::0;;-1:-1:-1;;;;;1604:25:190;;::::1;::::0;1599:1;;1592:9;::::1;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;:37:::0;;-1:-1:-1;;;;;;1592:37:190::1;-1:-1:-1::0;;;;;1592:37:190;;;::::1;::::0;;;::::1;::::0;;1646:6:::1;1653:13:::0;;:17:::1;::::0;-1:-1:-1;;1653:17:190::1;:::i;:::-;1646:25;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;1639:32:::0;;-1:-1:-1;;;;;;1639:32:190::1;::::0;;-1:-1:-1;;;1166:257:190;-1:-1:-1;;1166:257:190:o;1549:152::-:1;1536:3:::0;::::1;::::0;::::1;:::i;:::-;;;;1501:206;;;-1:-1:-1::0;1719:5:190::1;::::0;1427:302;-1:-1:-1;;1427:302:190:o;732:153::-;-1:-1:-1;;;;;852:28:190;;;;;;:21;:28;;;;;;;;;845:35;;;;;;;;;;;;;;;;;802;;845;;;852:28;845:35;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;845:35:190;;;;;;;;;;;;;;;;;;;;;;;732:153;;;:::o;2839:155:140:-;1334:13:454;:11;:13::i;:::-;2937:12:140::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:140;;::::1;11943:34:504::0;;12013:15;;;12008:2;11993:18;;11986:43;2921:39:140::1;::::0;11878:18:504;2921:39:140::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:140::1;-1:-1:-1::0;;;;;2966:23:140;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:140;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:140;;17674:2:504;2263:60:140;;;17656:21:504;17713:2;17693:18;;;17686:30;-1:-1:-1;;;17732:18:504;;;17725:51;17793:18;;2263:60:140;17472:345:504;2263:60:140;2378:16;2397:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2397:7:140;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:140;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:140;;;2605:32;;;-1:-1:-1;;;;;11961:15:504;;11943:34;;-1:-1:-1;12008:2:504;11993:18;;11986:43;2605:32:140;;11878:18:504;2605:32:140;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;11961:15:504;;;11943:34;;2681:12:140;;;12008:2:504;11993:18;;11986:43;2648:46:140;;11878:18:504;2648:46:140;11715:320:504;1733:398:190;1334:13:454;:11;:13::i;:::-;1791:9:190::1;1786:341;1806:6;:13:::0;1802:17;::::1;1786:341;;;1834:19;1856:6;1863:1;1856:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:25:::1;::::0;;-1:-1:-1;;;1856:25:190;;;;-1:-1:-1;;;;;1856:9:190;;::::1;::::0;:23:::1;::::0;:25:::1;::::0;;::::1;::::0;;;;;;:9;:25:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1834:47;;1894:9;1889:176;1909:13;1905:17;;:1;:17;1889:176;;;1940:29;1975:6;1982:1;1975:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;:21:::1;::::0;-1:-1:-1;;;1975:21:190;;::::1;::::0;::::1;13934:25:504::0;;;-1:-1:-1;;;;;1975:9:190;;::::1;::::0;:18:::1;::::0;13907::504;;1975:21:190::1;::::0;::::1;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1939:57;;;2010:7;-1:-1:-1::0;;;;;2010:33:190::1;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;2006:51:::0;-1:-1:-1;1924:3:190::1;::::0;::::1;:::i;:::-;;;1889:176;;;;2072:6;2079:1;2072:9;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;;::::1;::::0;:29:::1;::::0;;-1:-1:-1;;;2072:29:190;;;;-1:-1:-1;;;;;2072:9:190;;::::1;::::0;:27:::1;::::0;:29:::1;::::0;;::::1;::::0;;;;;;:9;:29:::1;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2072:46:190::1;;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;1826:301;1821:3;;;;:::i;:::-;;;1786:341;;1599:130:454::0;1513:6;;-1:-1:-1;;;;;1513:6:454;929:10:467;1662:23:454;1654:68;;;;-1:-1:-1;;;1654:68:454;;18024:2:504;1654:68:454;;;18006:21:504;;;18043:18;;;18036:30;18102:34;18082:18;;;18075:62;18154:18;;1654:68:454;17822:356:504;1654:68:454;1599:130::o;562:129:140:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;638:16:140::1;:14;:16::i;:::-;660:26;679:6;2673:187:454::0;2765:6;;;-1:-1:-1;;;;;2781:17:454;;;-1:-1:-1;;;;;;2781:17:454;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1065:26:454::1;5363:13:457::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1176:32:454::1;929:10:467::0;1176:18:454::1;:32::i;-1:-1:-1:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:131:504;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;150:247;209:6;262:2;250:9;241:7;237:23;233:32;230:52;;;278:1;275;268:12;230:52;317:9;304:23;336:31;361:5;336:31;:::i;:::-;386:5;150:247;-1:-1:-1;;;150:247:504:o;799:258::-;871:1;881:113;895:6;892:1;889:13;881:113;;;971:11;;;965:18;952:11;;;945:39;917:2;910:10;881:113;;;1012:6;1009:1;1006:13;1003:48;;;-1:-1:-1;;1047:1:504;1029:16;;1022:27;799:258::o;1062:::-;1104:3;1142:5;1136:12;1169:6;1164:3;1157:19;1185:63;1241:6;1234:4;1229:3;1225:14;1218:4;1211:5;1207:16;1185:63;:::i;:::-;1302:2;1281:15;-1:-1:-1;;1277:29:504;1268:39;;;;1309:4;1264:50;;1062:258;-1:-1:-1;;1062:258:504:o;1405:1753::-;1625:4;1654:2;1694;1683:9;1679:18;1724:2;1713:9;1706:21;1747:6;1782;1776:13;1813:6;1805;1798:22;1839:2;1829:12;;1872:2;1861:9;1857:18;1850:25;;1934:2;1924:6;1921:1;1917:14;1906:9;1902:30;1898:39;1972:2;1964:6;1960:15;1993:1;2003:1126;2017:6;2014:1;2011:13;2003:1126;;;2082:22;;;-1:-1:-1;;2078:36:504;2066:49;;2138:13;;2252:9;;-1:-1:-1;;;;;2248:18:504;;;2233:34;;2314:11;;;2308:18;2304:27;;2287:15;;;2280:52;2379:11;;;2373:18;2369:27;2352:15;;;2345:52;2420:4;2463:11;;;2457:18;2174:4;2495:15;;;2488:27;;;2174:4;2420;2542:48;2574:15;;;2457:18;2542:48;:::i;:::-;2528:62;;;;2613:4;2666:2;2662;2658:11;2652:18;2719:6;2711;2707:19;2702:2;2694:6;2690:15;2683:44;2754:41;2788:6;2772:14;2754:41;:::i;:::-;2740:55;;;;2818:4;2871:2;2867;2863:11;2857:18;2888:49;2933:2;2925:6;2921:15;2905:14;1392:4;1381:16;1369:29;;1325:75;2888:49;-1:-1:-1;;2960:4:504;3007:11;;;3001:18;2984:15;;;;2977:43;;;;3107:12;;;;3072:15;;;;2039:1;2032:9;2003:1126;;;-1:-1:-1;3146:6:504;;1405:1753;-1:-1:-1;;;;;;;;1405:1753:504:o;3270:787::-;3334:3;3372:5;3366:12;3399:6;3394:3;3387:19;3425:4;3454:2;3449:3;3445:12;3438:19;;3491:2;3484:5;3480:14;3512:1;3522:510;3536:6;3533:1;3530:13;3522:510;;;3595:13;;3679:9;;-1:-1:-1;;;;;3675:18:504;;;3663:31;;3738:11;;;3732:18;-1:-1:-1;;;;;3728:43:504;3714:12;;;3707:65;3795:4;3843:11;;;3837:18;3833:27;;3819:12;;;3812:49;3884:4;3932:11;;;3926:18;3922:27;3908:12;;;3901:49;3979:4;3970:14;;;;4007:15;;;;3648:1;3551:9;3522:510;;;-1:-1:-1;4048:3:504;;3270:787;-1:-1:-1;;;;;3270:787:504:o;4062:2547::-;4260:4;4289:2;4329;4318:9;4314:18;4359:2;4348:9;4341:21;4382:6;4417;4411:13;4448:6;4440;4433:22;4474:2;4464:12;;4507:2;4496:9;4492:18;4485:25;;4569:2;4559:6;4556:1;4552:14;4541:9;4537:30;4533:39;4607:2;4599:6;4595:15;4628:1;4638:1942;4652:6;4649:1;4646:13;4638:1942;;;4717:22;;;-1:-1:-1;;4713:36:504;4701:49;;4773:13;;4847:9;;-1:-1:-1;;;;;756:31:504;744:44;;4809:6;4904:11;;;4898:18;-1:-1:-1;;;;;756:31:504;;4962:15;;;744:44;4929:49;5027:2;5023;5019:11;5013:18;5068:2;5063;5055:6;5051:15;5044:27;5098:50;5144:2;5136:6;5132:15;5116:14;5098:50;:::i;:::-;5084:64;;;5171:4;5224:2;5220;5216:11;5210:18;5241:49;5286:2;5278:6;5274:15;5258:14;1392:4;1381:16;1369:29;;1325:75;5241:49;-1:-1:-1;;5313:4:504;5360:11;;;5354:18;5337:15;;;5330:43;5396:4;5443:11;;;5437:18;5420:15;;;5413:43;5479:4;5526:11;;;5520:18;5503:15;;;5496:43;5562:4;5607:11;;;5601:18;472:13;465:21;5664:15;;;453:34;5704:6;5751:12;;;5745:19;-1:-1:-1;;;;;3228:30:504;;;5811:16;;;3216:43;;;;5852:6;5899:12;;;5893:19;3228:30;;5959:16;;;3216:43;6000:6;6047:12;;;6041:19;3228:30;;6107:16;;;3216:43;6148:6;6195:12;;;6189:19;3228:30;;;6255:16;;;3216:43;6296:6;6343:12;;;6337:19;6394;;;6376:16;;;6369:45;;;;6437:63;6398:6;6337:19;6437:63;:::i;:::-;6558:12;;;;6427:73;-1:-1:-1;;;6523:15:504;;;;4674:1;4667:9;4638:1942;;6614:786;6745:6;6753;6761;6814:2;6802:9;6793:7;6789:23;6785:32;6782:52;;;6830:1;6827;6820:12;6782:52;6869:9;6856:23;6888:31;6913:5;6888:31;:::i;:::-;6938:5;-1:-1:-1;6994:2:504;6979:18;;6966:32;-1:-1:-1;;;;;7047:14:504;;;7044:34;;;7074:1;7071;7064:12;7044:34;7112:6;7101:9;7097:22;7087:32;;7157:7;7150:4;7146:2;7142:13;7138:27;7128:55;;7179:1;7176;7169:12;7128:55;7219:2;7206:16;7245:2;7237:6;7234:14;7231:34;;;7261:1;7258;7251:12;7231:34;7314:7;7309:2;7299:6;7296:1;7292:14;7288:2;7284:23;7280:32;7277:45;7274:65;;;7335:1;7332;7325:12;7274:65;7366:2;7362;7358:11;7348:21;;7388:6;7378:16;;;;;6614:786;;;;;:::o;7405:180::-;7464:6;7517:2;7505:9;7496:7;7492:23;7488:32;7485:52;;;7533:1;7530;7523:12;7485:52;-1:-1:-1;7556:23:504;;7405:180;-1:-1:-1;7405:180:504:o;8037:689::-;8239:2;8291:21;;;8361:13;;8264:18;;;8383:22;;;8210:4;;8239:2;8462:15;;;;8436:2;8421:18;;;8210:4;8505:195;8519:6;8516:1;8513:13;8505:195;;;8584:13;;-1:-1:-1;;;;;8580:39:504;8568:52;;8675:15;;;;8640:12;;;;8616:1;8534:9;8505:195;;;-1:-1:-1;8717:3:504;;8037:689;-1:-1:-1;;;;;;8037:689:504:o;9430:127::-;9491:10;9486:3;9482:20;9479:1;9472:31;9522:4;9519:1;9512:15;9546:4;9543:1;9536:15;9562:127;9623:10;9618:3;9614:20;9611:1;9604:31;9654:4;9651:1;9644:15;9678:4;9675:1;9668:15;9694:135;9733:3;-1:-1:-1;;9754:17:504;;9751:43;;;9774:18;;:::i;:::-;-1:-1:-1;9821:1:504;9810:13;;9694:135::o;9834:292::-;9945:6;9998:2;9986:9;9977:7;9973:23;9969:32;9966:52;;;10014:1;10011;10004:12;9966:52;10046:9;10040:16;10065:31;10090:5;10065:31;:::i;10131:127::-;10192:10;10187:3;10183:20;10180:1;10173:31;10223:4;10220:1;10213:15;10247:4;10244:1;10237:15;10263:275;10334:2;10328:9;10399:2;10380:13;;-1:-1:-1;;10376:27:504;10364:40;;-1:-1:-1;;;;;10419:34:504;;10455:22;;;10416:62;10413:88;;;10481:18;;:::i;:::-;10517:2;10510:22;10263:275;;-1:-1:-1;10263:275:504:o;10543:1034::-;10661:6;10692:2;10735;10723:9;10714:7;10710:23;10706:32;10703:52;;;10751:1;10748;10741:12;10703:52;10784:9;10778:16;-1:-1:-1;;;;;10854:2:504;10846:6;10843:14;10840:34;;;10870:1;10867;10860:12;10840:34;10908:6;10897:9;10893:22;10883:32;;10953:7;10946:4;10942:2;10938:13;10934:27;10924:55;;10975:1;10972;10965:12;10924:55;11004:2;10998:9;11026:2;11022;11019:10;11016:36;;;11032:18;;:::i;:::-;11078:2;11075:1;11071:10;11061:20;;11101:28;11125:2;11121;11117:11;11101:28;:::i;:::-;11163:15;;;11233:11;;;11229:20;;;11194:12;;;;11261:19;;;11258:39;;;11293:1;11290;11283:12;11258:39;11317:11;;;;11337:210;11353:6;11348:3;11345:15;11337:210;;;11426:3;11420:10;11407:23;;11443:31;11468:5;11443:31;:::i;:::-;11487:18;;;11370:12;;;;11525;;;;11337:210;;;11566:5;10543:1034;-1:-1:-1;;;;;;;;10543:1034:504:o;11582:128::-;11622:3;11653:1;11649:6;11646:1;11643:13;11640:39;;;11659:18;;:::i;:::-;-1:-1:-1;11695:9:504;;11582:128::o;12040:184::-;12110:6;12163:2;12151:9;12142:7;12138:23;12134:32;12131:52;;;12179:1;12176;12169:12;12131:52;-1:-1:-1;12202:16:504;;12040:184;-1:-1:-1;12040:184:504:o;12501:706::-;12581:6;12634:2;12622:9;12613:7;12609:23;12605:32;12602:52;;;12650:1;12647;12640:12;12602:52;12683:9;12677:16;-1:-1:-1;;;;;12753:2:504;12745:6;12742:14;12739:34;;;12769:1;12766;12759:12;12739:34;12807:6;12796:9;12792:22;12782:32;;12852:7;12845:4;12841:2;12837:13;12833:27;12823:55;;12874:1;12871;12864:12;12823:55;12903:2;12897:9;12925:2;12921;12918:10;12915:36;;;12931:18;;:::i;:::-;12973:53;13016:2;12997:13;;-1:-1:-1;;12993:27:504;13022:2;12989:36;12973:53;:::i;:::-;12960:66;;13049:2;13042:5;13035:17;13089:7;13084:2;13079;13075;13071:11;13067:20;13064:33;13061:53;;;13110:1;13107;13100:12;13061:53;13123:54;13174:2;13169;13162:5;13158:14;13153:2;13149;13145:11;13123:54;:::i;:::-;-1:-1:-1;13196:5:504;12501:706;-1:-1:-1;;;;12501:706:504:o;13212:273::-;13280:6;13333:2;13321:9;13312:7;13308:23;13304:32;13301:52;;;13349:1;13346;13339:12;13301:52;13381:9;13375:16;13431:4;13424:5;13420:16;13413:5;13410:27;13400:55;;13451:1;13448;13441:12;13970:175;14048:13;;-1:-1:-1;;;;;14090:30:504;;14080:41;;14070:69;;14135:1;14132;14125:12;14150:365;14259:6;14267;14320:2;14308:9;14299:7;14295:23;14291:32;14288:52;;;14336:1;14333;14326:12;14288:52;14368:9;14362:16;14387:31;14412:5;14387:31;:::i;:::-;14437:5;-1:-1:-1;14461:48:504;14505:2;14490:18;;14461:48;:::i;:::-;14451:58;;14150:365;;;;;:::o;15075:456::-;15168:6;15176;15184;15192;15245:3;15233:9;15224:7;15220:23;15216:33;15213:53;;;15262:1;15259;15252:12;15213:53;15285:39;15314:9;15285:39;:::i;:::-;15275:49;;15343:48;15387:2;15376:9;15372:18;15343:48;:::i;:::-;15333:58;;15410:48;15454:2;15443:9;15439:18;15410:48;:::i;:::-;15400:58;;15477:48;15521:2;15510:9;15506:18;15477:48;:::i;:::-;15467:58;;15075:456;;;;;;;:::o;15792:277::-;15859:6;15912:2;15900:9;15891:7;15887:23;15883:32;15880:52;;;15928:1;15925;15918:12;15880:52;15960:9;15954:16;16013:5;16006:13;15999:21;15992:5;15989:32;15979:60;;16035:1;16032;16025:12;17342:125;17382:4;17410:1;17407;17404:8;17401:34;;;17415:18;;:::i;:::-;-1:-1:-1;17452:9:504;;17342:125::o;18183:407::-;18385:2;18367:21;;;18424:2;18404:18;;;18397:30;18463:34;18458:2;18443:18;;18436:62;-1:-1:-1;;;18529:2:504;18514:18;;18507:41;18580:3;18565:19;;18183:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "addVault(address)": "256b5a02", + "getAllVaults()": "97331bf9", + "getClaimableRewards(address)": "308e401e", + "getLatestVaultExtensions(address)": "d9d17645", + "getVaultsData()": "4a672a54", + "initialize()": "8129fc1c", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "removeVault(address)": "ceb68c23", + "renounceOwnership()": "715018a6", + "setEmergencyExit()": "fcf2d0ad", + "setLatestVaultExtensions(address,address[])": "857ecda2", + "transferOwnership(address)": "f2fde38b", + "vaults(uint256)": "8c64ea4a" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/OptimizedVaultsRegistry_Proxy.json b/packages/sdk/deployments/bob/OptimizedVaultsRegistry_Proxy.json new file mode 100644 index 000000000..8d7514de8 --- /dev/null +++ b/packages/sdk/deployments/bob/OptimizedVaultsRegistry_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "transactionIndex": 1, + "gasUsed": "772008", + "logsBloom": "0x00000000000000000000000010000000400000000000800000800000000200000000000000000000000000000000008000000000100000000000004000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000800000001000000000000000400000000000000000000000000000000000000000004080000000000000c00000000000000000000000000000000400000000000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d", + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x00000000000000000000000013fd2701c3017bcc375ad14dd8433c6d7a441794" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777937, + "transactionHash": "0x308a0104a1a055b920998c6bac7454c0eaafc6fd195bf187a9e2aafa8dfb55eb", + "address": "0x52Ee6E740C1785412e51A381B0d87fb1692a7b23", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0x930b4a08674e026c7149bfc4fb4ee3ff1f1a7ff41b169a5bd8483ded7419960d" + } + ], + "blockNumber": 3777937, + "cumulativeGasUsed": "824235", + "status": 1, + "byzantium": true + }, + "args": [ + "0x13fD2701C3017bCc375Ad14Dd8433c6d7a441794", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0x8129fc1c" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/PoolDirectory.json b/packages/sdk/deployments/bob/PoolDirectory.json new file mode 100644 index 000000000..defa1f1af --- /dev/null +++ b/packages/sdk/deployments/bob/PoolDirectory.json @@ -0,0 +1,1105 @@ +{ + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_deprecatePool", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_deprecatePool", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_editAdminWhitelist", + "inputs": [ + { + "name": "admins", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "status", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_editDeployerWhitelist", + "inputs": [ + { + "name": "deployers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "status", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setDeployerWhitelistEnforcement", + "inputs": [ + { + "name": "enforce", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "adminWhitelist", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployPool", + "inputs": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "constructorData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "enforceWhitelist", + "type": "bool", + "internalType": "bool" + }, + { + "name": "closeFactor", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "liquidationIncentive", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "priceOracle", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "deployerWhitelist", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "enforceDeployerWhitelist", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActivePools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAllPools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPoolsByAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPoolsOfUser", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPublicPools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPublicPoolsByVerification", + "inputs": [ + { + "name": "whitelistedAdmin", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVerifiedPoolsOfWhitelistedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_enforceDeployerWhitelist", + "type": "bool", + "internalType": "bool" + }, + { + "name": "_deployerWhitelist", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolExists", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pools", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolsCounter", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPoolName", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AdminWhitelistUpdated", + "inputs": [ + { + "name": "admins", + "type": "address[]", + "indexed": false, + "internalType": "address[]" + }, + { + "name": "status", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PoolRegistered", + "inputs": [ + { + "name": "index", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "pool", + "type": "tuple", + "indexed": false, + "internalType": "struct PoolDirectory.Pool", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "transactionIndex": 1, + "gasUsed": "775682", + "logsBloom": "0x00000000000000000000000000000000400000000008000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000800000000000000000400000400000000000200000000000000000000000000000000080000000000000c00000000000020000000000000000000404000010000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d", + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000e451047f3a6c8dc595cf305dc21f32add5ff42fd" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + } + ], + "blockNumber": 3777847, + "cumulativeGasUsed": "827909", + "status": 1, + "byzantium": true + }, + "args": [ + "0xe451047f3A6C8Dc595Cf305DC21F32adD5fF42Fd", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xb86579d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + false, + [] + ] + }, + "implementation": "0xe451047f3A6C8Dc595Cf305DC21F32adD5fF42Fd", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/PoolDirectory_Implementation.json b/packages/sdk/deployments/bob/PoolDirectory_Implementation.json new file mode 100644 index 000000000..592172158 --- /dev/null +++ b/packages/sdk/deployments/bob/PoolDirectory_Implementation.json @@ -0,0 +1,2145 @@ +{ + "address": "0xe451047f3A6C8Dc595Cf305DC21F32adD5fF42Fd", + "abi": [ + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_deprecatePool", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_deprecatePool", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_editAdminWhitelist", + "inputs": [ + { + "name": "admins", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "status", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_editDeployerWhitelist", + "inputs": [ + { + "name": "deployers", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "status", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setDeployerWhitelistEnforcement", + "inputs": [ + { + "name": "enforce", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "adminWhitelist", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "deployPool", + "inputs": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "implementation", + "type": "address", + "internalType": "address" + }, + { + "name": "constructorData", + "type": "bytes", + "internalType": "bytes" + }, + { + "name": "enforceWhitelist", + "type": "bool", + "internalType": "bool" + }, + { + "name": "closeFactor", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "liquidationIncentive", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "priceOracle", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "deployerWhitelist", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "enforceDeployerWhitelist", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getActivePools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getAllPools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPoolsByAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPoolsOfUser", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPublicPools", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPublicPoolsByVerification", + "inputs": [ + { + "name": "whitelistedAdmin", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getVerifiedPoolsOfWhitelistedAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_enforceDeployerWhitelist", + "type": "bool", + "internalType": "bool" + }, + { + "name": "_deployerWhitelist", + "type": "address[]", + "internalType": "address[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolExists", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pools", + "inputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "poolsCounter", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPoolName", + "inputs": [ + { + "name": "index", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "name", + "type": "string", + "internalType": "string" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "AdminWhitelistUpdated", + "inputs": [ + { + "name": "admins", + "type": "address[]", + "indexed": false, + "internalType": "address[]" + }, + { + "name": "status", + "type": "bool", + "indexed": false, + "internalType": "bool" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PoolRegistered", + "inputs": [ + { + "name": "index", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "pool", + "type": "tuple", + "indexed": false, + "internalType": "struct PoolDirectory.Pool", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "anonymous": false + } + ], + "transactionHash": "0x70b2a52af9f27e2308bb563e5496e7ada56f5957064397a62d9a797fee5d89a6", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xe451047f3A6C8Dc595Cf305DC21F32adD5fF42Fd", + "transactionIndex": 1, + "gasUsed": "4558540", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xdff85a2024667fef6023552976d2432ad284b0387ef1502c8bfd7eccbdf1388d", + "transactionHash": "0x70b2a52af9f27e2308bb563e5496e7ada56f5957064397a62d9a797fee5d89a6", + "logs": [], + "blockNumber": 3777843, + "cumulativeGasUsed": "4602379", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "address[]", + "name": "admins", + "type": "address[]", + "indexed": false + }, + { + "internalType": "bool", + "name": "status", + "type": "bool", + "indexed": false + } + ], + "type": "event", + "name": "AdminWhitelistUpdated", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256", + "indexed": false + }, + { + "internalType": "struct PoolDirectory.Pool", + "name": "pool", + "type": "tuple", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ], + "indexed": false + } + ], + "type": "event", + "name": "PoolRegistered", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_deprecatePool" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_deprecatePool" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "admins", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_editAdminWhitelist" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "deployers", + "type": "address[]" + }, + { + "internalType": "bool", + "name": "status", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_editDeployerWhitelist" + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "enforce", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setDeployerWhitelistEnforcement" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "adminWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "implementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "constructorData", + "type": "bytes" + }, + { + "internalType": "bool", + "name": "enforceWhitelist", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "closeFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidationIncentive", + "type": "uint256" + }, + { + "internalType": "address", + "name": "priceOracle", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "deployPool", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "deployerWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "enforceDeployerWhitelist", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getActivePools", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getAllPools", + "outputs": [ + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPoolsByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPoolsOfUser", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "getPublicPools", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPublicPoolsByVerification", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getVerifiedPoolsOfWhitelistedAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "_enforceDeployerWhitelist", + "type": "bool" + }, + { + "internalType": "address[]", + "name": "_deployerWhitelist", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "poolExists", + "outputs": [ + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "pools", + "outputs": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "poolsCounter", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "index", + "type": "uint256" + }, + { + "internalType": "string", + "name": "name", + "type": "string" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPoolName" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_editAdminWhitelist(address[],bool)": { + "details": "Adds/removes Ethereum accounts to the admin whitelist.", + "params": { + "admins": "Array of Ethereum accounts to be whitelisted.", + "status": "Whether to add or remove the accounts." + } + }, + "_editDeployerWhitelist(address[],bool)": { + "details": "Adds/removes Ethereum accounts to the deployer whitelist.", + "params": { + "deployers": "Array of Ethereum accounts to be whitelisted.", + "status": "Whether to add or remove the accounts." + } + }, + "_setDeployerWhitelistEnforcement(bool)": { + "details": "Controls if the deployer whitelist is to be enforced.", + "params": { + "enforce": "Boolean indicating if the deployer whitelist is to be enforced." + } + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "deployPool(string,address,bytes,bool,uint256,uint256,address)": { + "details": "Deploys a new Ionic pool and adds to the directory.", + "params": { + "closeFactor": "The pool's close factor (scaled by 1e18).", + "constructorData": "Encoded construction data for `Unitroller constructor()`", + "enforceWhitelist": "Boolean indicating if the pool's supplier/borrower whitelist is to be enforced.", + "implementation": "The Comptroller implementation contract address.", + "liquidationIncentive": "The pool's liquidation incentive (scaled by 1e18).", + "name": "The name of the pool.", + "priceOracle": "The pool's PriceOracle contract address." + }, + "returns": { + "_0": "Index of the registered Ionic pool and the Unitroller proxy address." + } + }, + "getActivePools()": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getAllPools()": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPoolsOfUser(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPublicPools()": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPublicPoolsByVerification(bool)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getVerifiedPoolsOfWhitelistedAccount(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive.", + "params": { + "account": "who is whitelisted in the returned verified whitelist-enabled pools." + } + }, + "initialize(bool,address[])": { + "details": "Initializes a deployer whitelist if desired.", + "params": { + "_deployerWhitelist": "Array of Ethereum accounts to be whitelisted.", + "_enforceDeployerWhitelist": "Boolean indicating if the deployer whitelist is to be enforced." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "getActivePools()": { + "notice": "Returns `ids` and directory information of all non-deprecated Ionic pools." + }, + "getAllPools()": { + "notice": "Returns arrays of all Ionic pools' data." + }, + "getPoolsByAccount(address)": { + "notice": "Returns arrays of Ionic pool indexes and data created by `account`." + }, + "getPoolsOfUser(address)": { + "notice": "Returns arrays of all public Ionic pool indexes and data." + }, + "getPublicPools()": { + "notice": "Returns arrays of all public Ionic pool indexes and data." + }, + "getPublicPoolsByVerification(bool)": { + "notice": "Returns arrays of all Ionic pool indexes and data with whitelisted admins." + }, + "getVerifiedPoolsOfWhitelistedAccount(address)": { + "notice": "Returns arrays of all verified Ionic pool indexes and data for which the account is whitelisted" + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + }, + "setPoolName(uint256,string)": { + "notice": "Modify existing Ionic pool name." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/PoolDirectory.sol": "PoolDirectory" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/PoolDirectory.sol": { + "keccak256": "0xd3d28cd044a0205a86f0c2d82021a36018ec4b0e95f72064c92bcad99f84f6c8", + "urls": [ + "bzz-raw://0c8ab6e3f922b9165cae038507497be2aed81df002ffe7921e0aa1f10f690531", + "dweb:/ipfs/QmNpfDhHaVPyxXZDY7Si2Bpidneh6Ckr8C4dGhRmA9pEEa" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x1e1f9dda1735929b60cf601e3b39b8394ceb284a582ab4f0d0614b76a84fc4bd", + "urls": [ + "bzz-raw://1670338a3d0c64b13c2e623acaad068ccb6a7f7650d5d43d555099071bcfd03d", + "dweb:/ipfs/QmSMje4u1Zn7kf8DAybkLs8GPmcggTukTq754RE9eq99YR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506151a5806100206000396000f3fe60806040523480156200001157600080fd5b5060043610620001cc5760003560e01c80638da5cb5b116200010d578063b5f3f64011620000a3578063e30c3978116200007a578063e30c3978146200044a578063f2fde38b146200045e578063f348960d1462000475578063fc4d33f9146200048c57600080fd5b8063b5f3f6401462000403578063b86579d4146200041a578063d88ff1f4146200043157600080fd5b8063a155497c11620000e4578063a155497c1462000385578063a3ed91c6146200039c578063a970e76c14620003b3578063ac4afa3814620003d957600080fd5b80638da5cb5b146200033e5780638ec0835414620003645780639b29177f146200036e57600080fd5b806343e20a1d116200018357806358b896d3116200015a57806358b896d314620002cf5780635d0eb31a14620003045780636e96dfd7146200031d578063715018a6146200033457600080fd5b806343e20a1d1462000288578063448ca55814620002ae5780634ae26ea114620002c557600080fd5b806304f03c6f14620001d15780630a83d1b014620001ea5780631e1c6a07146200020157806320c32bfe146200023c578063218a3bbe146200025357806326bb81d7146200027a575b600080fd5b620001e8620001e236600462002fec565b62000496565b005b620001e8620001fb3660046200300c565b620004b3565b6200022762000212366004620030bb565b60686020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b620001e86200024d36600462003126565b620005c3565b6200026a6200026436600462002fec565b62000769565b6040516200023392919062003284565b606954620002279060ff1681565b6200022762000299366004620030bb565b606b6020526000908152604090205460ff1681565b6200026a620002bf366004620030bb565b62000a75565b6200026a62000e21565b620002e6620002e036600462003328565b620010de565b604080519283526001600160a01b0390911660208301520162000233565b6200030e606c5481565b60405190815260200162000233565b620001e86200032e366004620030bb565b620016d7565b620001e862001743565b6033546001600160a01b03165b6040516001600160a01b03909116815260200162000233565b6200026a62001789565b620001e86200037f366004620030bb565b62001a74565b620001e8620003963660046200300c565b62001af4565b6200026a620003ad366004620030bb565b62001bc6565b62000227620003c4366004620030bb565b606a6020526000908152604090205460ff1681565b620003f0620003ea3660046200343b565b62001dce565b6040516200023395949392919062003455565b620001e8620004143660046200343b565b62001eb4565b620001e86200042b36600462003497565b620020a3565b6200043b6200223b565b6040516200023391906200356c565b6065546200034b906001600160a01b031681565b620001e86200046f366004620030bb565b620024b0565b6200026a62000486366004620030bb565b62002523565b620001e862002807565b620004a062002921565b6069805460ff1916911515919091179055565b620004bd62002921565b81620005065760405162461bcd60e51b815260206004820152601360248201527227379030b236b4b7399039bab8383634b2b21760691b60448201526064015b60405180910390fd5b60005b82811015620005805781606b60008686858181106200052c576200052c62003581565b9050602002016020810190620005439190620030bb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806200057781620035ad565b91505062000509565b507f31b67e6853df85403a8c4f4f46dc53f48f700d6917c8e3ec8c77a0e6fd56793b838383604051620005b693929190620035cb565b60405180910390a1505050565b600060668481548110620005db57620005db62003581565b600091825260209182902060026005909202010154604080516303e1469160e61b815290516001600160a01b039092169350839263f851a440926004808401938290030181865afa15801562000635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065b919062003628565b6001600160a01b0316336001600160a01b0316148015620006dc5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006dc919062003648565b80620006f257506033546001600160a01b031633145b6200072e5760405162461bcd60e51b815260206004820152600b60248201526a10b832b936b4b9b9b4b7b760a91b6044820152606401620004fd565b82826066868154811062000746576200074662003581565b6000918252602090912062000762936005909202019162002e59565b5050505050565b6060806000806200077962001789565b91505060005b81518110156200086d576000828281518110620007a057620007a062003581565b6020026020010151604001519050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200080b575060408051601f3d908101601f19168201909252620008089181019062003628565b60015b620008165762000847565b6001600160a01b0381166000908152606b602052604090205460ff161515881515146200084557505062000858565b505b836200085381620035ad565b945050505b806200086481620035ad565b9150506200077f565b506000826001600160401b038111156200088b576200088b620032df565b604051908082528060200260200182016040528015620008b5578160200160208202803683370190505b5090506000836001600160401b03811115620008d557620008d5620032df565b6040519080825280602002602001820160405280156200091257816020015b620008fe62002ee8565b815260200190600190039081620008f45790505b5090506000805b845181101562000a675760008582815181106200093a576200093a62003581565b6020026020010151604001519050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015620009a5575060408051601f3d908101601f19168201909252620009a29181019062003628565b60015b620009b057620009e1565b6001600160a01b0381166000908152606b602052604090205460ff1615158b151514620009df57505062000a52565b505b81858481518110620009f757620009f762003581565b60200260200101818152505085828151811062000a185762000a1862003581565b602002602001015184848151811062000a355762000a3562003581565b6020026020010181905250828062000a4d90620035ad565b935050505b8062000a5e81620035ad565b91505062000919565b509197909650945050505050565b60608060008062000a8562001789565b91505060005b815181101562000bd057600082828151811062000aac5762000aac62003581565b6020026020010151604001519050806001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000b17575060408051601f3d908101601f1916820190925262000b149181019062003648565b60015b62000b225762000baa565b80158062000b9a5750604051634d8c928d60e11b81526001600160a01b038981166004830152831690639b19251a90602401602060405180830381865afa15801562000b72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b98919062003648565b155b1562000ba857505062000bbb565b505b8362000bb681620035ad565b945050505b8062000bc781620035ad565b91505062000a8b565b506000826001600160401b0381111562000bee5762000bee620032df565b60405190808252806020026020018201604052801562000c18578160200160208202803683370190505b5090506000836001600160401b0381111562000c385762000c38620032df565b60405190808252806020026020018201604052801562000c7557816020015b62000c6162002ee8565b81526020019060019003908162000c575790505b5090506000805b845181101562000a6757600085828151811062000c9d5762000c9d62003581565b6020026020010151604001519050806001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000d08575060408051601f3d908101601f1916820190925262000d059181019062003648565b60015b62000d135762000d9b565b80158062000d8b5750604051634d8c928d60e11b81526001600160a01b038c81166004830152831690639b19251a90602401602060405180830381865afa15801562000d63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d89919062003648565b155b1562000d9957505062000e0c565b505b8185848151811062000db15762000db162003581565b60200260200101818152505085828151811062000dd25762000dd262003581565b602002602001015184848151811062000def5762000def62003581565b6020026020010181905250828062000e0790620035ad565b935050505b8062000e1881620035ad565b91505062000c7c565b60608060008062000e3162001789565b91505060005b815181101562000efe5781818151811062000e565762000e5662003581565b6020026020010151604001516001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000ebe575060408051601f3d908101601f1916820190925262000ebb9181019062003648565b60015b62000ec95762000ed9565b801562000ed7575062000ee9565b505b8262000ee581620035ad565b9350505b8062000ef581620035ad565b91505062000e37565b506000826001600160401b0381111562000f1c5762000f1c620032df565b60405190808252806020026020018201604052801562000f46578160200160208202803683370190505b5090506000836001600160401b0381111562000f665762000f66620032df565b60405190808252806020026020018201604052801562000fa357816020015b62000f8f62002ee8565b81526020019060019003908162000f855790505b5090506000805b8451811015620010d15784818151811062000fc95762000fc962003581565b6020026020010151604001516001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562001031575060408051601f3d908101601f191682019092526200102e9181019062003648565b60015b6200103c576200104c565b80156200104a5750620010bc565b505b8084838151811062001062576200106262003581565b60200260200101818152505084818151811062001083576200108362003581565b6020026020010151838381518110620010a057620010a062003581565b60200260200101819052508180620010b890620035ad565b9250505b80620010c881620035ad565b91505062000faa565b5091969095509350505050565b6000806001600160a01b0389166200115f5760405162461bcd60e51b815260206004820152603960248201527f4e6f20436f6d7074726f6c6c657220696d706c656d656e746174696f6e20636f60448201527f6e74726163742061646472657373207370656369666965642e000000000000006064820152608401620004fd565b6001600160a01b038316620011ca5760405162461bcd60e51b815260206004820152602a60248201527f4e6f2050726963654f7261636c6520636f6e747261637420616464726573732060448201526939b832b1b4b334b2b21760b11b6064820152608401620004fd565b600060405180602001620011de9062002f29565b601f1982820381018352601f9091011660408190526200120691908b908b9060200162003668565b60405160208183030381529060405290506000620012686000338e606c600081546200123290620035ad565b91829055506040516200124b9392919060200162003692565b60405160208183030381529060405280519060200120846200297f565b90506000819050806001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012ab57600080fd5b505af1158015620012c0573d6000803e3d6000fd5b505060405163317b0b7760e01b8152600481018b90526001600160a01b038416925063317b0b7791506024016020604051808303816000875af11580156200130c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013329190620036d3565b15620013815760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073657420706f6f6c20636c6f736520666163746f722e6044820152606401620004fd565b604051634fd42e1760e01b8152600481018890526001600160a01b03821690634fd42e17906024016020604051808303816000875af1158015620013c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ef9190620036d3565b15620014505760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f2073657420706f6f6c206c69717569646174696f6e20696044820152683731b2b73a34bb329760b91b6064820152608401620004fd565b6040516355ee1fe160e01b81526001600160a01b0387811660048301528216906355ee1fe1906024016020604051808303816000875af115801562001499573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014bf9190620036d3565b156200150e5760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073657420706f6f6c207072696365206f7261636c652e6044820152606401620004fd565b8815620015e957604051634a956fad60e11b8152600160048201526001600160a01b0382169063952adf5a906024016020604051808303816000875af11580156200155d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015839190620036d3565b15620015e95760405162461bcd60e51b815260206004820152602e60248201527f4661696c656420746f20656e666f72636520737570706c6965722f626f72726f60448201526d3bb2b9103bb434ba32b634b9ba1760911b6064820152608401620004fd565b604051632dc7468360e21b81523360048201526001600160a01b0382169063b71d1a0c906024016020604051808303816000875af115801562001630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016569190620036d3565b15620016b85760405162461bcd60e51b815260206004820152602a60248201527f4661696c656420746f207365742070656e64696e672061646d696e206f6e20556044820152693734ba3937b63632b91760b11b6064820152608401620004fd565b620016c48d8362002a8d565b9d919c50909a5050505050505050505050565b620016e162002921565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6200174d62002921565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b6044820152606401620004fd565b6060806000805b606654811015620018045760006001600160a01b031660668281548110620017bc57620017bc62003581565b60009182526020909120600260059092020101546001600160a01b031614620017ef5781620017eb81620035ad565b9250505b80620017fb81620035ad565b91505062001790565b506000816001600160401b03811115620018225762001822620032df565b6040519080825280602002602001820160405280156200185f57816020015b6200184b62002ee8565b815260200190600190039081620018415790505b5090506000826001600160401b038111156200187f576200187f620032df565b604051908082528060200260200182016040528015620018a9578160200160208202803683370190505b5090506000805b60665481101562001a675760006001600160a01b031660668281548110620018dc57620018dc62003581565b60009182526020909120600260059092020101546001600160a01b03161462001a52578083838151811062001915576200191562003581565b6020026020010181815250506066818154811062001937576200193762003581565b90600052602060002090600502016040518060a00160405290816000820180546200196290620036ed565b80601f01602080910402602001604051908101604052809291908181526020018280546200199090620036ed565b8015620019e15780601f10620019b557610100808354040283529160200191620019e1565b820191906000526020600020905b815481529060010190602001808311620019c357829003601f168201915b505050918352505060018201546001600160a01b039081166020830152600283015416604082015260038201546060820152600490910154608090910152845185908490811062001a365762001a3662003581565b6020026020010181905250818062001a4e90620035ad565b9250505b8062001a5e81620035ad565b915050620018b0565b5090959194509092505050565b62001a7e62002921565b60005b60665481101562001adb57816001600160a01b03166066828154811062001aac5762001aac62003581565b60009182526020909120600260059092020101546001600160a01b0316141562001adf5762001adb8162001eb4565b5050565b8062001aeb81620035ad565b91505062001a81565b62001afe62002921565b8162001b465760405162461bcd60e51b81526020600482015260166024820152752737903232b83637bcb2b9399039bab8383634b2b21760511b6044820152606401620004fd565b60005b8281101562001bc05781606a600086868581811062001b6c5762001b6c62003581565b905060200201602081019062001b839190620030bb565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558062001bb781620035ad565b91505062001b49565b50505050565b6001600160a01b03811660009081526067602052604081205460609182916001600160401b0381111562001bfe5762001bfe620032df565b60405190808252806020026020018201604052801562001c28578160200160208202803683370190505b506001600160a01b038516600090815260676020526040812054919250906001600160401b0381111562001c605762001c60620032df565b60405190808252806020026020018201604052801562001c9d57816020015b62001c8962002ee8565b81526020019060019003908162001c7f5790505b509050600062001cac62001789565b91505060005b6001600160a01b03871660009081526067602052604090205481101562001dc2576001600160a01b038716600090815260676020526040902080548290811062001d005762001d0062003581565b906000526020600020015484828151811062001d205762001d2062003581565b6020026020010181815250508160676000896001600160a01b03166001600160a01b03168152602001908152602001600020828154811062001d665762001d6662003581565b90600052602060002001548151811062001d845762001d8462003581565b602002602001015183828151811062001da15762001da162003581565b6020026020010181905250808062001db990620035ad565b91505062001cb2565b50919590945092505050565b6066818154811062001ddf57600080fd5b906000526020600020906005020160009150905080600001805462001e0490620036ed565b80601f016020809104026020016040519081016040528092919081815260200182805462001e3290620036ed565b801562001e835780601f1062001e575761010080835404028352916020019162001e83565b820191906000526020600020905b81548152906001019060200180831162001e6557829003601f168201915b5050505060018301546002840154600385015460049095015493946001600160a01b03928316949290911692509085565b62001ebe62002921565b60006066828154811062001ed65762001ed662003581565b6000918252602090912060059091020160028101549091506001600160a01b031662001f455760405162461bcd60e51b815260206004820152601760248201527f706f6f6c20616c726561647920646570726563617465640000000000000000006044820152606401620004fd565b60018101546001600160a01b03166000908152606760205260408120905b81548110156200202c578382828154811062001f835762001f8362003581565b9060005260206000200154141562002017578154829062001fa7906001906200372a565b8154811062001fba5762001fba62003581565b906000526020600020015482828154811062001fda5762001fda62003581565b90600052602060002001819055508180548062001ffb5762001ffb62003744565b600190038181906000526020600020016000905590556200202c565b806200202381620035ad565b91505062001f63565b506002820180546001600160a01b03166000908152606860209081526040808320805460ff1916600190811790915584546001600160a01b0319908116909555860180549094169093558251908101928390528190526200208f91849162002f37565b505060006003820181905560049091015550565b600054610100900460ff1615808015620020c45750600054600160ff909116105b80620020e05750303b158015620020e0575060005460ff166001145b620021455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620004fd565b6000805460ff19166001179055801562002169576000805461ff0019166101001790555b620021743362002d62565b6069805460ff191684151517905560005b8251811015620021f1576001606a6000858481518110620021aa57620021aa62003581565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620021e881620035ad565b91505062002185565b50801562002236576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001620005b6565b505050565b60606000805b606654811015620022b55760006001600160a01b0316606682815481106200226d576200226d62003581565b60009182526020909120600260059092020101546001600160a01b031614620022a057816200229c81620035ad565b9250505b80620022ac81620035ad565b91505062002241565b506000816001600160401b03811115620022d357620022d3620032df565b6040519080825280602002602001820160405280156200231057816020015b620022fc62002ee8565b815260200190600190039081620022f25790505b5090506000805b606654811015620024a75760006001600160a01b03166066828154811062002343576200234362003581565b60009182526020909120600260059092020101546001600160a01b0316146200249257606681815481106200237c576200237c62003581565b90600052602060002090600502016040518060a0016040529081600082018054620023a790620036ed565b80601f0160208091040260200160405190810160405280929190818152602001828054620023d590620036ed565b8015620024265780601f10620023fa5761010080835404028352916020019162002426565b820191906000526020600020905b8154815290600101906020018083116200240857829003601f168201915b505050918352505060018201546001600160a01b03908116602083015260028301541660408201526003820154606082015260049091015460809091015283836200247181620035ad565b94508151811062002486576200248662003581565b60200260200101819052505b806200249e81620035ad565b91505062002317565b50909392505050565b620024ba62002921565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6060806000806200253362001789565b91505060005b81518110156200261a5781818151811062002558576200255862003581565b6020026020010151604001516001600160a01b031663d9e0ea6b876040518263ffffffff1660e01b81526004016200259f91906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015620025db575060408051601f3d908101601f19168201909252620025d89181019062003648565b60015b620025e657620025f5565b80620025f3575062002605565b505b826200260181620035ad565b9350505b806200261181620035ad565b91505062002539565b506000826001600160401b03811115620026385762002638620032df565b60405190808252806020026020018201604052801562002662578160200160208202803683370190505b5090506000836001600160401b03811115620026825762002682620032df565b604051908082528060200260200182016040528015620026bf57816020015b620026ab62002ee8565b815260200190600190039081620026a15790505b5090506000805b845181101562000a6757848181518110620026e557620026e562003581565b6020026020010151604001516001600160a01b031663d9e0ea6b8a6040518263ffffffff1660e01b81526004016200272c91906001600160a01b0391909116815260200190565b602060405180830381865afa92505050801562002768575060408051601f3d908101601f19168201909252620027659181019062003648565b60015b620027735762002782565b80620027805750620027f2565b505b8084838151811062002798576200279862003581565b602002602001018181525050848181518110620027b957620027b962003581565b6020026020010151838381518110620027d657620027d662003581565b60200260200101819052508180620027ee90620035ad565b9250505b80620027fe81620035ad565b915050620026c6565b6065546001600160a01b031633146200285b5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401620004fd565b6000620028706033546001600160a01b031690565b6065549091506001600160a01b03166200288a8162002da4565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910162001737565b6033546001600160a01b031633146200297d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004fd565b565b600083471015620029d35760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401620004fd565b815162002a235760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401620004fd565b8282516020840186f590506001600160a01b03811662002a865760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401620004fd565b9392505050565b6001600160a01b03811660009081526068602052604081205460ff161562002b065760405162461bcd60e51b815260206004820152602560248201527f506f6f6c20616c72656164792065786973747320696e207468652064697265636044820152643a37b93c9760d91b6064820152608401620004fd565b60695460ff16158062002b285750336000908152606a602052604090205460ff165b62002b825760405162461bcd60e51b8152602060048201526024808201527f53656e646572206973206e6f74206f6e206465706c6f7965722077686974656c60448201526334b9ba1760e11b6064820152608401620004fd565b60648351111562002bcf5760405162461bcd60e51b81526020600482015260166024820152752737903837b7b6103730b6b29039bab8383634b2b21760511b6044820152606401620004fd565b6040805160a081018252848152336020808301919091526001600160a01b0385169282019290925243606082015242608082015260668054600181018255600091909152815180519293849360059093027f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354019262002c52928492019062002f37565b50602082810151600183810180546001600160a01b03199081166001600160a01b0394851617909155604080870151600287018054909316941693909317905560608501516003850155608090940151600490930192909255336000908152606790915220606654909162002cc7916200372a565b81546001818101845560009384526020808520909201929092556001600160a01b0386168352606890526040909120805460ff1916821790556066547f18075ab463b4dc5842f37ecd67abeb192eda5d073f2c08509e189ad173d5c0209162002d30916200372a565b8260405162002d419291906200375a565b60405180910390a160665462002d5a906001906200372a565b949350505050565b600054610100900460ff1662002d8c5760405162461bcd60e51b8152600401620004fd9062003775565b62002d9662002df6565b62002da18162002da4565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1662002e205760405162461bcd60e51b8152600401620004fd9062003775565b6200297d600054610100900460ff1662002e4e5760405162461bcd60e51b8152600401620004fd9062003775565b6200297d3362002da4565b82805462002e6790620036ed565b90600052602060002090601f01602090048101928262002e8b576000855562002ed6565b82601f1062002ea65782800160ff1982351617855562002ed6565b8280016001018555821562002ed6579182015b8281111562002ed657823582559160200191906001019062002eb9565b5062002ee492915062002fb4565b5090565b6040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b6119d880620037c183390190565b82805462002f4590620036ed565b90600052602060002090601f01602090048101928262002f69576000855562002ed6565b82601f1062002f8457805160ff191683800117855562002ed6565b8280016001018555821562002ed6579182015b8281111562002ed657825182559160200191906001019062002f97565b5b8082111562002ee4576000815560010162002fb5565b801515811462002da157600080fd5b803562002fe78162002fcb565b919050565b60006020828403121562002fff57600080fd5b813562002a868162002fcb565b6000806000604084860312156200302257600080fd5b83356001600160401b03808211156200303a57600080fd5b818601915086601f8301126200304f57600080fd5b8135818111156200305f57600080fd5b8760208260051b85010111156200307557600080fd5b602092830195509350508401356200308d8162002fcb565b809150509250925092565b6001600160a01b038116811462002da157600080fd5b803562002fe78162003098565b600060208284031215620030ce57600080fd5b813562002a868162003098565b60008083601f840112620030ee57600080fd5b5081356001600160401b038111156200310657600080fd5b6020830191508360208285010111156200311f57600080fd5b9250929050565b6000806000604084860312156200313c57600080fd5b8335925060208401356001600160401b038111156200315a57600080fd5b6200316886828701620030db565b9497909650939450505050565b60005b838110156200319257818101518382015260200162003178565b8381111562001bc05750506000910152565b60008151808452620031be81602086016020860162003175565b601f01601f19169290920160200192915050565b6000815160a08452620031e960a0850182620031a4565b9050602083015160018060a01b038082166020870152806040860151166040870152505060608301516060850152608083015160808501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b858110156200327757828403895262003264848351620031d2565b9885019893509084019060010162003249565b5091979650505050505050565b604080825283519082018190526000906020906060840190828701845b82811015620032bf57815184529284019290840190600101620032a1565b50505083810382850152620032d581866200322b565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620033205762003320620032df565b604052919050565b60008060008060008060008060e0898b0312156200334557600080fd5b88356001600160401b03808211156200335d57600080fd5b818b0191508b601f8301126200337257600080fd5b8135602082821115620033895762003389620032df565b6200339d601f8301601f19168201620032f5565b8281528e82848701011115620033b257600080fd5b828286018383013760008184018301529b50620033d18d8201620030ae565b9a50505060408b0135915080821115620033ea57600080fd5b50620033f98b828c01620030db565b90975095506200340e905060608a0162002fda565b93506080890135925060a089013591506200342c60c08a01620030ae565b90509295985092959890939650565b6000602082840312156200344e57600080fd5b5035919050565b60a0815260006200346a60a0830188620031a4565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b60008060408385031215620034ab57600080fd5b8235620034b88162002fcb565b91506020838101356001600160401b0380821115620034d657600080fd5b818601915086601f830112620034eb57600080fd5b813581811115620035005762003500620032df565b8060051b915062003513848301620032f5565b81815291830184019184810190898411156200352e57600080fd5b938501935b838510156200355c57843592506200354b8362003098565b828252938501939085019062003533565b8096505050505050509250929050565b60208152600062002a8660208301846200322b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415620035c457620035c462003597565b5060010190565b6040808252810183905260008460608301825b8681101562003612578235620035f48162003098565b6001600160a01b0316825260209283019290910190600101620035de565b5080925050508215156020830152949350505050565b6000602082840312156200363b57600080fd5b815162002a868162003098565b6000602082840312156200365b57600080fd5b815162002a868162002fcb565b600084516200367c81846020890162003175565b8201838582376000930192835250909392505050565b6bffffffffffffffffffffffff198460601b16815260008351620036be81601485016020880162003175565b60149201918201929092526034019392505050565b600060208284031215620036e657600080fd5b5051919050565b600181811c908216806200370257607f821691505b602082108114156200372457634e487b7160e01b600052602260045260246000fd5b50919050565b6000828210156200373f576200373f62003597565b500390565b634e487b7160e01b600052603160045260246000fd5b82815260406020820152600062002d5a6040830184620031d2565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe60806040526002805461ffff60a01b191661010160a01b17905534801561002557600080fd5b506040516119d83803806119d883398101604081905261004491610077565b60018054336001600160a01b031991821617909155600080549091166001600160a01b03929092169190911790556100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b611922806100b66000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806387f7630311610130578063bb82aa5e116100b8578063dce154491161007c578063dce154491461060e578063e6653f3d14610621578063e875544614610635578063e9c714f21461063e578063f851a4401461064657610232565b8063bb82aa5e146105b9578063c6c5b0dd146105c1578063c91a424f146105d4578063cf6bfd2d146105e7578063d251fefc146105fb57610232565b80639b19251a116100ff5780639b19251a1461055a578063ac0b0bb71461057d578063b095721014610591578063b71d1a0c1461059e578063ba49f54a146105b157610232565b806387f76303146104c257806389cd9855146104d65780638e8f294b146104eb578063940cd6f11461052f57610232565b80633c94786f116101be5780636bd02b8a116101825780636bd02b8a146104435780636d154ea514610456578063731f0c2b146104795780637515bafa1461049c5780637dc0d1d0146104af57610232565b80633c94786f146103de5780634a584432146103f25780634ada90af1461041257806352d84d1e1461041b5780636333d0011461042e57610232565b80631c819e43116102055780631c819e431461033657806321af45691461036457806324a3d6221461038f57806326782247146103a257806331ff47fa146103b557610232565b80630225ab9d146102a957806302c3bcbb146102cf5780630a755ec2146102ef57806316dc15fe14610313575b60006102496000356001600160e01b031916610659565b90506001600160a01b03811661028557604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156102a4573d6000f35b3d6000fd5b6102bc6102b736600461148a565b610679565b6040519081526020015b60405180910390f35b6102bc6102dd3660046114c4565b60186020526000908152604090205481565b60025461030390600160a81b900460ff1681565b60405190151581526020016102c6565b6103036103213660046114c4565b600d6020526000908152604090205460ff1681565b6103036103443660046114e1565b601d60209081526000928352604080842090915290825290205460ff1681565b601654610377906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b601354610377906001600160a01b031681565b600254610377906001600160a01b031681565b6103776103c33660046114c4565b600e602052600090815260409020546001600160a01b031681565b60135461030390600160a01b900460ff1681565b6102bc6104003660046114c4565b60176020526000908152604090205481565b6102bc60055481565b61037761042936600461151a565b61070f565b610436610739565b6040516102c69190611533565b61037761045136600461151a565b610748565b6103036104643660046114c4565b60156020526000908152604090205460ff1681565b6103036104873660046114c4565b60146020526000908152604090205460ff1681565b6103776104aa36600461151a565b610758565b600354610377906001600160a01b031681565b60135461030390600160b01b900460ff1681565b6104e96104e43660046114e1565b610768565b005b6105186104f93660046114c4565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102c6565b6102bc61053d3660046114e1565b601c60209081526000928352604080842090915290825290205481565b6103036105683660046114c4565b60106020526000908152604090205460ff1681565b60135461030390600160b81b900460ff1681565b600f546103039060ff1681565b6102bc6105ac3660046114c4565b6107ba565b6104e961083b565b610377610984565b6103776105cf36600461151a565b6109ae565b600054610377906001600160a01b031681565b60025461030390600160a01b900460ff1681565b61037761060936600461151a565b6109be565b61037761061c366004611580565b6109ce565b60135461030390600160a81b900460ff1681565b6102bc60045481565b6102bc610a06565b600154610377906001600160a01b031681565b6000610673826000805160206118ce833981519152610aec565b92915050565b6000610683610b92565b6106935761067360016005610be4565b60025460ff600160a81b90910416151582151514156106b3576000610673565b60028054831515600160a81b0260ff60a81b199091161790556040517f10f9a0a95673b0837d1dce21fd3bffcb6d760435e9b5300b75a271182f75f8229061070090841515815260200190565b60405180910390a16000610673565b6009818154811061071f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060610743610c5d565b905090565b601b818154811061071f57600080fd5b600b818154811061071f57600080fd5b610770610b92565b6107ac5760405162461bcd60e51b815260206004820152600d60248201526c085d5b985d5d1a1bdc9a5e9959609a1b604482015260640161027c565b6107b68282610ccf565b5050565b60006107c4610b92565b6107d4576106736001600f610be4565b600280546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160005b9392505050565b3330148061084c575061084c610b92565b61088a5760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b604482015260640161027c565b6000610894610984565b6000805460405163bbcdd6d360e01b81526001600160a01b0380851660048301529394509192169063bbcdd6d390602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090691906115c2565b905061091181610cf0565b806001600160a01b0316826001600160a01b0316146107b6576040805160048152602481018252602080820180516001600160e01b0316632eb96f3160e11b1790528251808401909352600c83526b08589958dbdb59481a5b5c1b60a21b9083015261097f91309190610df8565b505050565b60006107436040518060600160405280602881526020016118ee6028913980519060200120610659565b6019818154811061071f57600080fd5b6011818154811061071f57600080fd5b600760205281600052604060002081815481106109ea57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6002546000906001600160a01b031633141580610a21575033155b15610a325761074360016000610be4565b60018054600280546001600160a01b038082166001600160a01b031980861682179096559490911690915560408051919092168082526020820184905292917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600254604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b8054600090815b81811015610b8757846001600160e01b031916846000018281548110610b1b57610b1b6115df565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610b7557836000018181548110610b5657610b566115df565b6000918252602090912001546001600160a01b03169250610673915050565b80610b7f8161160b565b915050610af3565b506000949350505050565b6001546000906001600160a01b031633148015610bb85750600254600160a81b900460ff165b8061074357506000546001600160a01b031633148015610743575050600254600160a01b900460ff1690565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836014811115610c1957610c196115ac565b83601a811115610c2b57610c2b6115ac565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610834576108346115ac565b60606000805160206118ce833981519152600101805480602002602001604051908101604052809291908181526020018280548015610cc557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ca7575b5050505050905090565b6001600160a01b03811615610ce757610ce781610e94565b6107b682610fc4565b60008054604051631978a0bf60e31b81526001600160a01b0384811660048301529091169063cbc505f890602401600060405180830381865afa158015610d3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d639190810190611691565b90506000610d6f610c5d565b905060005b8151811015610db157610d9f828281518110610d9257610d926115df565b6020026020010151610e94565b80610da98161160b565b915050610d74565b5060005b8251811015610df257610de0838281518110610dd357610dd36115df565b6020026020010151610fc4565b80610dea8161160b565b915050610db5565b50505050565b6060600080856001600160a01b031685604051610e15919061175c565b6000604051808303816000865af19150503d8060008114610e52576040519150601f19603f3d011682016040523d82523d6000602084013e610e57565b606091505b509150915081610e8b57805115610e715780518082602001fd5b8360405162461bcd60e51b815260040161027c9190611778565b95945050505050565b6000805160206118ce833981519152610eac826110bc565b60005b600182015460ff8216101561097f57826001600160a01b0316826001018260ff1681548110610ee057610ee06115df565b6000918252602090912001546001600160a01b03161415610fb257600180830180549091610f0d916117ab565b81548110610f1d57610f1d6115df565b6000918252602090912001546001830180546001600160a01b039092169160ff8416908110610f4e57610f4e6115df565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600101805480610f8f57610f8f6117c2565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610fbc816117d8565b915050610eaf565b6000805160206118ce83398151915260005b600182015460ff8216101561107c57826001600160a01b0316826001018260ff1681548110611007576110076115df565b6000918252602090912001546001600160a01b0316141561106a5760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c7265616479206164646564000000000000000000604482015260640161027c565b80611074816117d8565b915050610fd6565b506110868261127b565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261112491908101906117f8565b90506000805160206118ce83398151915260005b82518161ffff161015610df2576000838261ffff168151811061115d5761115d6115df565b602002602001015190506111718184610aec565b6001600160a01b0316856001600160a01b03161461119157611191611895565b600061119d8285611402565b845490915084906111b0906001906117ab565b815481106111c0576111c06115df565b90600052602060002001846000018261ffff16815481106111e3576111e36115df565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080611244576112446117c2565b600082815260209020810160001990810180546001600160c01b031916905501905550819050611273816118ab565b915050611138565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e391908101906117f8565b6000805160206118ce83398151915280549192509060005b83518110156113fb576000848281518110611318576113186115df565b60200260200101519050600061132e8286610aec565b90506001600160a01b0381161561137357604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b038216602482015260440161027c565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b03199092169390921692909217919091179055836113e3816118ab565b945050505080806113f39061160b565b9150506112fb565b5050505050565b8054600090815b8161ffff168161ffff16101561147e57846001600160e01b031916846000018261ffff168154811061143d5761143d6115df565b600091825260209091200154600160a01b900460e01b6001600160e01b031916141561146c5791506106739050565b80611476816118ab565b915050611409565b5061ffff949350505050565b60006020828403121561149c57600080fd5b8135801515811461083457600080fd5b6001600160a01b03811681146114c157600080fd5b50565b6000602082840312156114d657600080fd5b8135610834816114ac565b600080604083850312156114f457600080fd5b82356114ff816114ac565b9150602083013561150f816114ac565b809150509250929050565b60006020828403121561152c57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156115745783516001600160a01b03168352928401929184019160010161154f565b50909695505050505050565b6000806040838503121561159357600080fd5b823561159e816114ac565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156115d457600080fd5b8151610834816114ac565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561161f5761161f6115f5565b5060010190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561166557611665611626565b604052919050565b600067ffffffffffffffff82111561168757611687611626565b5060051b60200190565b600060208083850312156116a457600080fd5b825167ffffffffffffffff8111156116bb57600080fd5b8301601f810185136116cc57600080fd5b80516116df6116da8261166d565b61163c565b81815260059190911b820183019083810190878311156116fe57600080fd5b928401925b82841015611725578351611716816114ac565b82529284019290840190611703565b979650505050505050565b60005b8381101561174b578181015183820152602001611733565b83811115610df25750506000910152565b6000825161176e818460208701611730565b9190910192915050565b6020815260008251806020840152611797816040850160208701611730565b601f01601f19169190910160400192915050565b6000828210156117bd576117bd6115f5565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156117ef576117ef6115f5565b60010192915050565b6000602080838503121561180b57600080fd5b825167ffffffffffffffff81111561182257600080fd5b8301601f8101851361183357600080fd5b80516118416116da8261166d565b81815260059190911b8201830190838101908783111561186057600080fd5b928401925b828410156117255783516001600160e01b0319811681146118865760008081fd5b82529284019290840190611865565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156118c3576118c36115f5565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b26155f6465706c6f794d61726b65742875696e74382c62797465732c62797465732c75696e7432353629a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "607:14954:5:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x60806040523480156200001157600080fd5b5060043610620001cc5760003560e01c80638da5cb5b116200010d578063b5f3f64011620000a3578063e30c3978116200007a578063e30c3978146200044a578063f2fde38b146200045e578063f348960d1462000475578063fc4d33f9146200048c57600080fd5b8063b5f3f6401462000403578063b86579d4146200041a578063d88ff1f4146200043157600080fd5b8063a155497c11620000e4578063a155497c1462000385578063a3ed91c6146200039c578063a970e76c14620003b3578063ac4afa3814620003d957600080fd5b80638da5cb5b146200033e5780638ec0835414620003645780639b29177f146200036e57600080fd5b806343e20a1d116200018357806358b896d3116200015a57806358b896d314620002cf5780635d0eb31a14620003045780636e96dfd7146200031d578063715018a6146200033457600080fd5b806343e20a1d1462000288578063448ca55814620002ae5780634ae26ea114620002c557600080fd5b806304f03c6f14620001d15780630a83d1b014620001ea5780631e1c6a07146200020157806320c32bfe146200023c578063218a3bbe146200025357806326bb81d7146200027a575b600080fd5b620001e8620001e236600462002fec565b62000496565b005b620001e8620001fb3660046200300c565b620004b3565b6200022762000212366004620030bb565b60686020526000908152604090205460ff1681565b60405190151581526020015b60405180910390f35b620001e86200024d36600462003126565b620005c3565b6200026a6200026436600462002fec565b62000769565b6040516200023392919062003284565b606954620002279060ff1681565b6200022762000299366004620030bb565b606b6020526000908152604090205460ff1681565b6200026a620002bf366004620030bb565b62000a75565b6200026a62000e21565b620002e6620002e036600462003328565b620010de565b604080519283526001600160a01b0390911660208301520162000233565b6200030e606c5481565b60405190815260200162000233565b620001e86200032e366004620030bb565b620016d7565b620001e862001743565b6033546001600160a01b03165b6040516001600160a01b03909116815260200162000233565b6200026a62001789565b620001e86200037f366004620030bb565b62001a74565b620001e8620003963660046200300c565b62001af4565b6200026a620003ad366004620030bb565b62001bc6565b62000227620003c4366004620030bb565b606a6020526000908152604090205460ff1681565b620003f0620003ea3660046200343b565b62001dce565b6040516200023395949392919062003455565b620001e8620004143660046200343b565b62001eb4565b620001e86200042b36600462003497565b620020a3565b6200043b6200223b565b6040516200023391906200356c565b6065546200034b906001600160a01b031681565b620001e86200046f366004620030bb565b620024b0565b6200026a62000486366004620030bb565b62002523565b620001e862002807565b620004a062002921565b6069805460ff1916911515919091179055565b620004bd62002921565b81620005065760405162461bcd60e51b815260206004820152601360248201527227379030b236b4b7399039bab8383634b2b21760691b60448201526064015b60405180910390fd5b60005b82811015620005805781606b60008686858181106200052c576200052c62003581565b9050602002016020810190620005439190620030bb565b6001600160a01b031681526020810191909152604001600020805460ff1916911515919091179055806200057781620035ad565b91505062000509565b507f31b67e6853df85403a8c4f4f46dc53f48f700d6917c8e3ec8c77a0e6fd56793b838383604051620005b693929190620035cb565b60405180910390a1505050565b600060668481548110620005db57620005db62003581565b600091825260209182902060026005909202010154604080516303e1469160e61b815290516001600160a01b039092169350839263f851a440926004808401938290030181865afa15801562000635573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906200065b919062003628565b6001600160a01b0316336001600160a01b0316148015620006dc5750806001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015620006b6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620006dc919062003648565b80620006f257506033546001600160a01b031633145b6200072e5760405162461bcd60e51b815260206004820152600b60248201526a10b832b936b4b9b9b4b7b760a91b6044820152606401620004fd565b82826066868154811062000746576200074662003581565b6000918252602090912062000762936005909202019162002e59565b5050505050565b6060806000806200077962001789565b91505060005b81518110156200086d576000828281518110620007a057620007a062003581565b6020026020010151604001519050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156200080b575060408051601f3d908101601f19168201909252620008089181019062003628565b60015b620008165762000847565b6001600160a01b0381166000908152606b602052604090205460ff161515881515146200084557505062000858565b505b836200085381620035ad565b945050505b806200086481620035ad565b9150506200077f565b506000826001600160401b038111156200088b576200088b620032df565b604051908082528060200260200182016040528015620008b5578160200160208202803683370190505b5090506000836001600160401b03811115620008d557620008d5620032df565b6040519080825280602002602001820160405280156200091257816020015b620008fe62002ee8565b815260200190600190039081620008f45790505b5090506000805b845181101562000a675760008582815181106200093a576200093a62003581565b6020026020010151604001519050806001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa925050508015620009a5575060408051601f3d908101601f19168201909252620009a29181019062003628565b60015b620009b057620009e1565b6001600160a01b0381166000908152606b602052604090205460ff1615158b151514620009df57505062000a52565b505b81858481518110620009f757620009f762003581565b60200260200101818152505085828151811062000a185762000a1862003581565b602002602001015184848151811062000a355762000a3562003581565b6020026020010181905250828062000a4d90620035ad565b935050505b8062000a5e81620035ad565b91505062000919565b509197909650945050505050565b60608060008062000a8562001789565b91505060005b815181101562000bd057600082828151811062000aac5762000aac62003581565b6020026020010151604001519050806001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000b17575060408051601f3d908101601f1916820190925262000b149181019062003648565b60015b62000b225762000baa565b80158062000b9a5750604051634d8c928d60e11b81526001600160a01b038981166004830152831690639b19251a90602401602060405180830381865afa15801562000b72573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000b98919062003648565b155b1562000ba857505062000bbb565b505b8362000bb681620035ad565b945050505b8062000bc781620035ad565b91505062000a8b565b506000826001600160401b0381111562000bee5762000bee620032df565b60405190808252806020026020018201604052801562000c18578160200160208202803683370190505b5090506000836001600160401b0381111562000c385762000c38620032df565b60405190808252806020026020018201604052801562000c7557816020015b62000c6162002ee8565b81526020019060019003908162000c575790505b5090506000805b845181101562000a6757600085828151811062000c9d5762000c9d62003581565b6020026020010151604001519050806001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000d08575060408051601f3d908101601f1916820190925262000d059181019062003648565b60015b62000d135762000d9b565b80158062000d8b5750604051634d8c928d60e11b81526001600160a01b038c81166004830152831690639b19251a90602401602060405180830381865afa15801562000d63573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000d89919062003648565b155b1562000d9957505062000e0c565b505b8185848151811062000db15762000db162003581565b60200260200101818152505085828151811062000dd25762000dd262003581565b602002602001015184848151811062000def5762000def62003581565b6020026020010181905250828062000e0790620035ad565b935050505b8062000e1881620035ad565b91505062000c7c565b60608060008062000e3162001789565b91505060005b815181101562000efe5781818151811062000e565762000e5662003581565b6020026020010151604001516001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562000ebe575060408051601f3d908101601f1916820190925262000ebb9181019062003648565b60015b62000ec95762000ed9565b801562000ed7575062000ee9565b505b8262000ee581620035ad565b9350505b8062000ef581620035ad565b91505062000e37565b506000826001600160401b0381111562000f1c5762000f1c620032df565b60405190808252806020026020018201604052801562000f46578160200160208202803683370190505b5090506000836001600160401b0381111562000f665762000f66620032df565b60405190808252806020026020018201604052801562000fa357816020015b62000f8f62002ee8565b81526020019060019003908162000f855790505b5090506000805b8451811015620010d15784818151811062000fc95762000fc962003581565b6020026020010151604001516001600160a01b031663b09572106040518163ffffffff1660e01b8152600401602060405180830381865afa92505050801562001031575060408051601f3d908101601f191682019092526200102e9181019062003648565b60015b6200103c576200104c565b80156200104a5750620010bc565b505b8084838151811062001062576200106262003581565b60200260200101818152505084818151811062001083576200108362003581565b6020026020010151838381518110620010a057620010a062003581565b60200260200101819052508180620010b890620035ad565b9250505b80620010c881620035ad565b91505062000faa565b5091969095509350505050565b6000806001600160a01b0389166200115f5760405162461bcd60e51b815260206004820152603960248201527f4e6f20436f6d7074726f6c6c657220696d706c656d656e746174696f6e20636f60448201527f6e74726163742061646472657373207370656369666965642e000000000000006064820152608401620004fd565b6001600160a01b038316620011ca5760405162461bcd60e51b815260206004820152602a60248201527f4e6f2050726963654f7261636c6520636f6e747261637420616464726573732060448201526939b832b1b4b334b2b21760b11b6064820152608401620004fd565b600060405180602001620011de9062002f29565b601f1982820381018352601f9091011660408190526200120691908b908b9060200162003668565b60405160208183030381529060405290506000620012686000338e606c600081546200123290620035ad565b91829055506040516200124b9392919060200162003692565b60405160208183030381529060405280519060200120846200297f565b90506000819050806001600160a01b031663ba49f54a6040518163ffffffff1660e01b8152600401600060405180830381600087803b158015620012ab57600080fd5b505af1158015620012c0573d6000803e3d6000fd5b505060405163317b0b7760e01b8152600481018b90526001600160a01b038416925063317b0b7791506024016020604051808303816000875af11580156200130c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013329190620036d3565b15620013815760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073657420706f6f6c20636c6f736520666163746f722e6044820152606401620004fd565b604051634fd42e1760e01b8152600481018890526001600160a01b03821690634fd42e17906024016020604051808303816000875af1158015620013c9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620013ef9190620036d3565b15620014505760405162461bcd60e51b815260206004820152602960248201527f4661696c656420746f2073657420706f6f6c206c69717569646174696f6e20696044820152683731b2b73a34bb329760b91b6064820152608401620004fd565b6040516355ee1fe160e01b81526001600160a01b0387811660048301528216906355ee1fe1906024016020604051808303816000875af115801562001499573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620014bf9190620036d3565b156200150e5760405162461bcd60e51b815260206004820181905260248201527f4661696c656420746f2073657420706f6f6c207072696365206f7261636c652e6044820152606401620004fd565b8815620015e957604051634a956fad60e11b8152600160048201526001600160a01b0382169063952adf5a906024016020604051808303816000875af11580156200155d573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620015839190620036d3565b15620015e95760405162461bcd60e51b815260206004820152602e60248201527f4661696c656420746f20656e666f72636520737570706c6965722f626f72726f60448201526d3bb2b9103bb434ba32b634b9ba1760911b6064820152608401620004fd565b604051632dc7468360e21b81523360048201526001600160a01b0382169063b71d1a0c906024016020604051808303816000875af115801562001630573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620016569190620036d3565b15620016b85760405162461bcd60e51b815260206004820152602a60248201527f4661696c656420746f207365742070656e64696e672061646d696e206f6e20556044820152693734ba3937b63632b91760b11b6064820152608401620004fd565b620016c48d8362002a8d565b9d919c50909a5050505050505050505050565b620016e162002921565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6200174d62002921565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b6044820152606401620004fd565b6060806000805b606654811015620018045760006001600160a01b031660668281548110620017bc57620017bc62003581565b60009182526020909120600260059092020101546001600160a01b031614620017ef5781620017eb81620035ad565b9250505b80620017fb81620035ad565b91505062001790565b506000816001600160401b03811115620018225762001822620032df565b6040519080825280602002602001820160405280156200185f57816020015b6200184b62002ee8565b815260200190600190039081620018415790505b5090506000826001600160401b038111156200187f576200187f620032df565b604051908082528060200260200182016040528015620018a9578160200160208202803683370190505b5090506000805b60665481101562001a675760006001600160a01b031660668281548110620018dc57620018dc62003581565b60009182526020909120600260059092020101546001600160a01b03161462001a52578083838151811062001915576200191562003581565b6020026020010181815250506066818154811062001937576200193762003581565b90600052602060002090600502016040518060a00160405290816000820180546200196290620036ed565b80601f01602080910402602001604051908101604052809291908181526020018280546200199090620036ed565b8015620019e15780601f10620019b557610100808354040283529160200191620019e1565b820191906000526020600020905b815481529060010190602001808311620019c357829003601f168201915b505050918352505060018201546001600160a01b039081166020830152600283015416604082015260038201546060820152600490910154608090910152845185908490811062001a365762001a3662003581565b6020026020010181905250818062001a4e90620035ad565b9250505b8062001a5e81620035ad565b915050620018b0565b5090959194509092505050565b62001a7e62002921565b60005b60665481101562001adb57816001600160a01b03166066828154811062001aac5762001aac62003581565b60009182526020909120600260059092020101546001600160a01b0316141562001adf5762001adb8162001eb4565b5050565b8062001aeb81620035ad565b91505062001a81565b62001afe62002921565b8162001b465760405162461bcd60e51b81526020600482015260166024820152752737903232b83637bcb2b9399039bab8383634b2b21760511b6044820152606401620004fd565b60005b8281101562001bc05781606a600086868581811062001b6c5762001b6c62003581565b905060200201602081019062001b839190620030bb565b6001600160a01b031681526020810191909152604001600020805460ff19169115159190911790558062001bb781620035ad565b91505062001b49565b50505050565b6001600160a01b03811660009081526067602052604081205460609182916001600160401b0381111562001bfe5762001bfe620032df565b60405190808252806020026020018201604052801562001c28578160200160208202803683370190505b506001600160a01b038516600090815260676020526040812054919250906001600160401b0381111562001c605762001c60620032df565b60405190808252806020026020018201604052801562001c9d57816020015b62001c8962002ee8565b81526020019060019003908162001c7f5790505b509050600062001cac62001789565b91505060005b6001600160a01b03871660009081526067602052604090205481101562001dc2576001600160a01b038716600090815260676020526040902080548290811062001d005762001d0062003581565b906000526020600020015484828151811062001d205762001d2062003581565b6020026020010181815250508160676000896001600160a01b03166001600160a01b03168152602001908152602001600020828154811062001d665762001d6662003581565b90600052602060002001548151811062001d845762001d8462003581565b602002602001015183828151811062001da15762001da162003581565b6020026020010181905250808062001db990620035ad565b91505062001cb2565b50919590945092505050565b6066818154811062001ddf57600080fd5b906000526020600020906005020160009150905080600001805462001e0490620036ed565b80601f016020809104026020016040519081016040528092919081815260200182805462001e3290620036ed565b801562001e835780601f1062001e575761010080835404028352916020019162001e83565b820191906000526020600020905b81548152906001019060200180831162001e6557829003601f168201915b5050505060018301546002840154600385015460049095015493946001600160a01b03928316949290911692509085565b62001ebe62002921565b60006066828154811062001ed65762001ed662003581565b6000918252602090912060059091020160028101549091506001600160a01b031662001f455760405162461bcd60e51b815260206004820152601760248201527f706f6f6c20616c726561647920646570726563617465640000000000000000006044820152606401620004fd565b60018101546001600160a01b03166000908152606760205260408120905b81548110156200202c578382828154811062001f835762001f8362003581565b9060005260206000200154141562002017578154829062001fa7906001906200372a565b8154811062001fba5762001fba62003581565b906000526020600020015482828154811062001fda5762001fda62003581565b90600052602060002001819055508180548062001ffb5762001ffb62003744565b600190038181906000526020600020016000905590556200202c565b806200202381620035ad565b91505062001f63565b506002820180546001600160a01b03166000908152606860209081526040808320805460ff1916600190811790915584546001600160a01b0319908116909555860180549094169093558251908101928390528190526200208f91849162002f37565b505060006003820181905560049091015550565b600054610100900460ff1615808015620020c45750600054600160ff909116105b80620020e05750303b158015620020e0575060005460ff166001145b620021455760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b6064820152608401620004fd565b6000805460ff19166001179055801562002169576000805461ff0019166101001790555b620021743362002d62565b6069805460ff191684151517905560005b8251811015620021f1576001606a6000858481518110620021aa57620021aa62003581565b6020908102919091018101516001600160a01b03168252810191909152604001600020805460ff191691151591909117905580620021e881620035ad565b91505062002185565b50801562002236576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb384740249890602001620005b6565b505050565b60606000805b606654811015620022b55760006001600160a01b0316606682815481106200226d576200226d62003581565b60009182526020909120600260059092020101546001600160a01b031614620022a057816200229c81620035ad565b9250505b80620022ac81620035ad565b91505062002241565b506000816001600160401b03811115620022d357620022d3620032df565b6040519080825280602002602001820160405280156200231057816020015b620022fc62002ee8565b815260200190600190039081620022f25790505b5090506000805b606654811015620024a75760006001600160a01b03166066828154811062002343576200234362003581565b60009182526020909120600260059092020101546001600160a01b0316146200249257606681815481106200237c576200237c62003581565b90600052602060002090600502016040518060a0016040529081600082018054620023a790620036ed565b80601f0160208091040260200160405190810160405280929190818152602001828054620023d590620036ed565b8015620024265780601f10620023fa5761010080835404028352916020019162002426565b820191906000526020600020905b8154815290600101906020018083116200240857829003601f168201915b505050918352505060018201546001600160a01b03908116602083015260028301541660408201526003820154606082015260049091015460809091015283836200247181620035ad565b94508151811062002486576200248662003581565b60200260200101819052505b806200249e81620035ad565b91505062002317565b50909392505050565b620024ba62002921565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6060806000806200253362001789565b91505060005b81518110156200261a5781818151811062002558576200255862003581565b6020026020010151604001516001600160a01b031663d9e0ea6b876040518263ffffffff1660e01b81526004016200259f91906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015620025db575060408051601f3d908101601f19168201909252620025d89181019062003648565b60015b620025e657620025f5565b80620025f3575062002605565b505b826200260181620035ad565b9350505b806200261181620035ad565b91505062002539565b506000826001600160401b03811115620026385762002638620032df565b60405190808252806020026020018201604052801562002662578160200160208202803683370190505b5090506000836001600160401b03811115620026825762002682620032df565b604051908082528060200260200182016040528015620026bf57816020015b620026ab62002ee8565b815260200190600190039081620026a15790505b5090506000805b845181101562000a6757848181518110620026e557620026e562003581565b6020026020010151604001516001600160a01b031663d9e0ea6b8a6040518263ffffffff1660e01b81526004016200272c91906001600160a01b0391909116815260200190565b602060405180830381865afa92505050801562002768575060408051601f3d908101601f19168201909252620027659181019062003648565b60015b620027735762002782565b80620027805750620027f2565b505b8084838151811062002798576200279862003581565b602002602001018181525050848181518110620027b957620027b962003581565b6020026020010151838381518110620027d657620027d662003581565b60200260200101819052508180620027ee90620035ad565b9250505b80620027fe81620035ad565b915050620026c6565b6065546001600160a01b031633146200285b5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b6044820152606401620004fd565b6000620028706033546001600160a01b031690565b6065549091506001600160a01b03166200288a8162002da4565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910162001737565b6033546001600160a01b031633146200297d5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401620004fd565b565b600083471015620029d35760405162461bcd60e51b815260206004820152601d60248201527f437265617465323a20696e73756666696369656e742062616c616e63650000006044820152606401620004fd565b815162002a235760405162461bcd60e51b815260206004820181905260248201527f437265617465323a2062797465636f6465206c656e677468206973207a65726f6044820152606401620004fd565b8282516020840186f590506001600160a01b03811662002a865760405162461bcd60e51b815260206004820152601960248201527f437265617465323a204661696c6564206f6e206465706c6f79000000000000006044820152606401620004fd565b9392505050565b6001600160a01b03811660009081526068602052604081205460ff161562002b065760405162461bcd60e51b815260206004820152602560248201527f506f6f6c20616c72656164792065786973747320696e207468652064697265636044820152643a37b93c9760d91b6064820152608401620004fd565b60695460ff16158062002b285750336000908152606a602052604090205460ff165b62002b825760405162461bcd60e51b8152602060048201526024808201527f53656e646572206973206e6f74206f6e206465706c6f7965722077686974656c60448201526334b9ba1760e11b6064820152608401620004fd565b60648351111562002bcf5760405162461bcd60e51b81526020600482015260166024820152752737903837b7b6103730b6b29039bab8383634b2b21760511b6044820152606401620004fd565b6040805160a081018252848152336020808301919091526001600160a01b0385169282019290925243606082015242608082015260668054600181018255600091909152815180519293849360059093027f46501879b8ca8525e8c2fd519e2fbfcfa2ebea26501294aa02cbfcfb12e94354019262002c52928492019062002f37565b50602082810151600183810180546001600160a01b03199081166001600160a01b0394851617909155604080870151600287018054909316941693909317905560608501516003850155608090940151600490930192909255336000908152606790915220606654909162002cc7916200372a565b81546001818101845560009384526020808520909201929092556001600160a01b0386168352606890526040909120805460ff1916821790556066547f18075ab463b4dc5842f37ecd67abeb192eda5d073f2c08509e189ad173d5c0209162002d30916200372a565b8260405162002d419291906200375a565b60405180910390a160665462002d5a906001906200372a565b949350505050565b600054610100900460ff1662002d8c5760405162461bcd60e51b8152600401620004fd9062003775565b62002d9662002df6565b62002da18162002da4565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff1662002e205760405162461bcd60e51b8152600401620004fd9062003775565b6200297d600054610100900460ff1662002e4e5760405162461bcd60e51b8152600401620004fd9062003775565b6200297d3362002da4565b82805462002e6790620036ed565b90600052602060002090601f01602090048101928262002e8b576000855562002ed6565b82601f1062002ea65782800160ff1982351617855562002ed6565b8280016001018555821562002ed6579182015b8281111562002ed657823582559160200191906001019062002eb9565b5062002ee492915062002fb4565b5090565b6040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b6119d880620037c183390190565b82805462002f4590620036ed565b90600052602060002090601f01602090048101928262002f69576000855562002ed6565b82601f1062002f8457805160ff191683800117855562002ed6565b8280016001018555821562002ed6579182015b8281111562002ed657825182559160200191906001019062002f97565b5b8082111562002ee4576000815560010162002fb5565b801515811462002da157600080fd5b803562002fe78162002fcb565b919050565b60006020828403121562002fff57600080fd5b813562002a868162002fcb565b6000806000604084860312156200302257600080fd5b83356001600160401b03808211156200303a57600080fd5b818601915086601f8301126200304f57600080fd5b8135818111156200305f57600080fd5b8760208260051b85010111156200307557600080fd5b602092830195509350508401356200308d8162002fcb565b809150509250925092565b6001600160a01b038116811462002da157600080fd5b803562002fe78162003098565b600060208284031215620030ce57600080fd5b813562002a868162003098565b60008083601f840112620030ee57600080fd5b5081356001600160401b038111156200310657600080fd5b6020830191508360208285010111156200311f57600080fd5b9250929050565b6000806000604084860312156200313c57600080fd5b8335925060208401356001600160401b038111156200315a57600080fd5b6200316886828701620030db565b9497909650939450505050565b60005b838110156200319257818101518382015260200162003178565b8381111562001bc05750506000910152565b60008151808452620031be81602086016020860162003175565b601f01601f19169290920160200192915050565b6000815160a08452620031e960a0850182620031a4565b9050602083015160018060a01b038082166020870152806040860151166040870152505060608301516060850152608083015160808501528091505092915050565b600081518084526020808501808196508360051b8101915082860160005b858110156200327757828403895262003264848351620031d2565b9885019893509084019060010162003249565b5091979650505050505050565b604080825283519082018190526000906020906060840190828701845b82811015620032bf57815184529284019290840190600101620032a1565b50505083810382850152620032d581866200322b565b9695505050505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b0381118282101715620033205762003320620032df565b604052919050565b60008060008060008060008060e0898b0312156200334557600080fd5b88356001600160401b03808211156200335d57600080fd5b818b0191508b601f8301126200337257600080fd5b8135602082821115620033895762003389620032df565b6200339d601f8301601f19168201620032f5565b8281528e82848701011115620033b257600080fd5b828286018383013760008184018301529b50620033d18d8201620030ae565b9a50505060408b0135915080821115620033ea57600080fd5b50620033f98b828c01620030db565b90975095506200340e905060608a0162002fda565b93506080890135925060a089013591506200342c60c08a01620030ae565b90509295985092959890939650565b6000602082840312156200344e57600080fd5b5035919050565b60a0815260006200346a60a0830188620031a4565b6001600160a01b039687166020840152949095166040820152606081019290925260809091015292915050565b60008060408385031215620034ab57600080fd5b8235620034b88162002fcb565b91506020838101356001600160401b0380821115620034d657600080fd5b818601915086601f830112620034eb57600080fd5b813581811115620035005762003500620032df565b8060051b915062003513848301620032f5565b81815291830184019184810190898411156200352e57600080fd5b938501935b838510156200355c57843592506200354b8362003098565b828252938501939085019062003533565b8096505050505050509250929050565b60208152600062002a8660208301846200322b565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415620035c457620035c462003597565b5060010190565b6040808252810183905260008460608301825b8681101562003612578235620035f48162003098565b6001600160a01b0316825260209283019290910190600101620035de565b5080925050508215156020830152949350505050565b6000602082840312156200363b57600080fd5b815162002a868162003098565b6000602082840312156200365b57600080fd5b815162002a868162002fcb565b600084516200367c81846020890162003175565b8201838582376000930192835250909392505050565b6bffffffffffffffffffffffff198460601b16815260008351620036be81601485016020880162003175565b60149201918201929092526034019392505050565b600060208284031215620036e657600080fd5b5051919050565b600181811c908216806200370257607f821691505b602082108114156200372457634e487b7160e01b600052602260045260246000fd5b50919050565b6000828210156200373f576200373f62003597565b500390565b634e487b7160e01b600052603160045260246000fd5b82815260406020820152600062002d5a6040830184620031d2565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fe60806040526002805461ffff60a01b191661010160a01b17905534801561002557600080fd5b506040516119d83803806119d883398101604081905261004491610077565b60018054336001600160a01b031991821617909155600080549091166001600160a01b03929092169190911790556100a7565b60006020828403121561008957600080fd5b81516001600160a01b03811681146100a057600080fd5b9392505050565b611922806100b66000396000f3fe608060405234801561001057600080fd5b50600436106102325760003560e01c806387f7630311610130578063bb82aa5e116100b8578063dce154491161007c578063dce154491461060e578063e6653f3d14610621578063e875544614610635578063e9c714f21461063e578063f851a4401461064657610232565b8063bb82aa5e146105b9578063c6c5b0dd146105c1578063c91a424f146105d4578063cf6bfd2d146105e7578063d251fefc146105fb57610232565b80639b19251a116100ff5780639b19251a1461055a578063ac0b0bb71461057d578063b095721014610591578063b71d1a0c1461059e578063ba49f54a146105b157610232565b806387f76303146104c257806389cd9855146104d65780638e8f294b146104eb578063940cd6f11461052f57610232565b80633c94786f116101be5780636bd02b8a116101825780636bd02b8a146104435780636d154ea514610456578063731f0c2b146104795780637515bafa1461049c5780637dc0d1d0146104af57610232565b80633c94786f146103de5780634a584432146103f25780634ada90af1461041257806352d84d1e1461041b5780636333d0011461042e57610232565b80631c819e43116102055780631c819e431461033657806321af45691461036457806324a3d6221461038f57806326782247146103a257806331ff47fa146103b557610232565b80630225ab9d146102a957806302c3bcbb146102cf5780630a755ec2146102ef57806316dc15fe14610313575b60006102496000356001600160e01b031916610659565b90506001600160a01b03811661028557604051630a82dd7360e31b81526001600160e01b03196000351660048201526024015b60405180910390fd5b3660008037600080366000845af43d6000803e8080156102a4573d6000f35b3d6000fd5b6102bc6102b736600461148a565b610679565b6040519081526020015b60405180910390f35b6102bc6102dd3660046114c4565b60186020526000908152604090205481565b60025461030390600160a81b900460ff1681565b60405190151581526020016102c6565b6103036103213660046114c4565b600d6020526000908152604090205460ff1681565b6103036103443660046114e1565b601d60209081526000928352604080842090915290825290205460ff1681565b601654610377906001600160a01b031681565b6040516001600160a01b0390911681526020016102c6565b601354610377906001600160a01b031681565b600254610377906001600160a01b031681565b6103776103c33660046114c4565b600e602052600090815260409020546001600160a01b031681565b60135461030390600160a01b900460ff1681565b6102bc6104003660046114c4565b60176020526000908152604090205481565b6102bc60055481565b61037761042936600461151a565b61070f565b610436610739565b6040516102c69190611533565b61037761045136600461151a565b610748565b6103036104643660046114c4565b60156020526000908152604090205460ff1681565b6103036104873660046114c4565b60146020526000908152604090205460ff1681565b6103776104aa36600461151a565b610758565b600354610377906001600160a01b031681565b60135461030390600160b01b900460ff1681565b6104e96104e43660046114e1565b610768565b005b6105186104f93660046114c4565b6008602052600090815260409020805460019091015460ff9091169082565b6040805192151583526020830191909152016102c6565b6102bc61053d3660046114e1565b601c60209081526000928352604080842090915290825290205481565b6103036105683660046114c4565b60106020526000908152604090205460ff1681565b60135461030390600160b81b900460ff1681565b600f546103039060ff1681565b6102bc6105ac3660046114c4565b6107ba565b6104e961083b565b610377610984565b6103776105cf36600461151a565b6109ae565b600054610377906001600160a01b031681565b60025461030390600160a01b900460ff1681565b61037761060936600461151a565b6109be565b61037761061c366004611580565b6109ce565b60135461030390600160a81b900460ff1681565b6102bc60045481565b6102bc610a06565b600154610377906001600160a01b031681565b6000610673826000805160206118ce833981519152610aec565b92915050565b6000610683610b92565b6106935761067360016005610be4565b60025460ff600160a81b90910416151582151514156106b3576000610673565b60028054831515600160a81b0260ff60a81b199091161790556040517f10f9a0a95673b0837d1dce21fd3bffcb6d760435e9b5300b75a271182f75f8229061070090841515815260200190565b60405180910390a16000610673565b6009818154811061071f57600080fd5b6000918252602090912001546001600160a01b0316905081565b6060610743610c5d565b905090565b601b818154811061071f57600080fd5b600b818154811061071f57600080fd5b610770610b92565b6107ac5760405162461bcd60e51b815260206004820152600d60248201526c085d5b985d5d1a1bdc9a5e9959609a1b604482015260640161027c565b6107b68282610ccf565b5050565b60006107c4610b92565b6107d4576106736001600f610be4565b600280546001600160a01b038481166001600160a01b031983168117909355604080519190921680825260208201939093527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160005b9392505050565b3330148061084c575061084c610b92565b61088a5760405162461bcd60e51b815260206004820152600f60248201526e10b9b2b633103e3e1010b0b236b4b760891b604482015260640161027c565b6000610894610984565b6000805460405163bbcdd6d360e01b81526001600160a01b0380851660048301529394509192169063bbcdd6d390602401602060405180830381865afa1580156108e2573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061090691906115c2565b905061091181610cf0565b806001600160a01b0316826001600160a01b0316146107b6576040805160048152602481018252602080820180516001600160e01b0316632eb96f3160e11b1790528251808401909352600c83526b08589958dbdb59481a5b5c1b60a21b9083015261097f91309190610df8565b505050565b60006107436040518060600160405280602881526020016118ee6028913980519060200120610659565b6019818154811061071f57600080fd5b6011818154811061071f57600080fd5b600760205281600052604060002081815481106109ea57600080fd5b6000918252602090912001546001600160a01b03169150829050565b6002546000906001600160a01b031633141580610a21575033155b15610a325761074360016000610be4565b60018054600280546001600160a01b038082166001600160a01b031980861682179096559490911690915560408051919092168082526020820184905292917ff9ffabca9c8276e99321725bcb43fb076a6c66a54b7f21c4e8146d8519b417dc910160405180910390a1600254604080516001600160a01b03808516825290921660208301527fca4f2f25d0898edd99413412fb94012f9e54ec8142f9b093e7720646a95b16a9910160405180910390a160009250505090565b8054600090815b81811015610b8757846001600160e01b031916846000018281548110610b1b57610b1b6115df565b600091825260209091200154600160a01b900460e01b6001600160e01b0319161415610b7557836000018181548110610b5657610b566115df565b6000918252602090912001546001600160a01b03169250610673915050565b80610b7f8161160b565b915050610af3565b506000949350505050565b6001546000906001600160a01b031633148015610bb85750600254600160a81b900460ff165b8061074357506000546001600160a01b031633148015610743575050600254600160a01b900460ff1690565b60007f45b96fe442630264581b197e84bbada861235052c5a1aadfff9ea4e40a969aa0836014811115610c1957610c196115ac565b83601a811115610c2b57610c2b6115ac565b60408051928352602083019190915260009082015260600160405180910390a1826014811115610834576108346115ac565b60606000805160206118ce833981519152600101805480602002602001604051908101604052809291908181526020018280548015610cc557602002820191906000526020600020905b81546001600160a01b03168152600190910190602001808311610ca7575b5050505050905090565b6001600160a01b03811615610ce757610ce781610e94565b6107b682610fc4565b60008054604051631978a0bf60e31b81526001600160a01b0384811660048301529091169063cbc505f890602401600060405180830381865afa158015610d3b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610d639190810190611691565b90506000610d6f610c5d565b905060005b8151811015610db157610d9f828281518110610d9257610d926115df565b6020026020010151610e94565b80610da98161160b565b915050610d74565b5060005b8251811015610df257610de0838281518110610dd357610dd36115df565b6020026020010151610fc4565b80610dea8161160b565b915050610db5565b50505050565b6060600080856001600160a01b031685604051610e15919061175c565b6000604051808303816000865af19150503d8060008114610e52576040519150601f19603f3d011682016040523d82523d6000602084013e610e57565b606091505b509150915081610e8b57805115610e715780518082602001fd5b8360405162461bcd60e51b815260040161027c9190611778565b95945050505050565b6000805160206118ce833981519152610eac826110bc565b60005b600182015460ff8216101561097f57826001600160a01b0316826001018260ff1681548110610ee057610ee06115df565b6000918252602090912001546001600160a01b03161415610fb257600180830180549091610f0d916117ab565b81548110610f1d57610f1d6115df565b6000918252602090912001546001830180546001600160a01b039092169160ff8416908110610f4e57610f4e6115df565b9060005260206000200160006101000a8154816001600160a01b0302191690836001600160a01b0316021790555081600101805480610f8f57610f8f6117c2565b600082815260209020810160001990810180546001600160a01b03191690550190555b80610fbc816117d8565b915050610eaf565b6000805160206118ce83398151915260005b600182015460ff8216101561107c57826001600160a01b0316826001018260ff1681548110611007576110076115df565b6000918252602090912001546001600160a01b0316141561106a5760405162461bcd60e51b815260206004820152601760248201527f657874656e73696f6e20616c7265616479206164646564000000000000000000604482015260640161027c565b80611074816117d8565b915050610fd6565b506110868261127b565b6001908101805491820181556000908152602090200180546001600160a01b0319166001600160a01b0392909216919091179055565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110fc573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261112491908101906117f8565b90506000805160206118ce83398151915260005b82518161ffff161015610df2576000838261ffff168151811061115d5761115d6115df565b602002602001015190506111718184610aec565b6001600160a01b0316856001600160a01b03161461119157611191611895565b600061119d8285611402565b845490915084906111b0906001906117ab565b815481106111c0576111c06115df565b90600052602060002001846000018261ffff16815481106111e3576111e36115df565b600091825260209091208254910180546001600160a01b039092166001600160a01b031983168117825592546001600160c01b0319909216909217600160a01b9182900463ffffffff169091021790558354849080611244576112446117c2565b600082815260209020810160001990810180546001600160c01b031916905501905550819050611273816118ab565b915050611138565b6000816001600160a01b03166389f8132e6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156112bb573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526112e391908101906117f8565b6000805160206118ce83398151915280549192509060005b83518110156113fb576000848281518110611318576113186115df565b60200260200101519050600061132e8286610aec565b90506001600160a01b0381161561137357604051632c18df3360e01b81526001600160e01b0319831660048201526001600160a01b038216602482015260440161027c565b604080518082019091526001600160a01b0380891682526001600160e01b0319841660208084019182528854600181018a5560008a815291909120935193018054915160e01c600160a01b026001600160c01b03199092169390921692909217919091179055836113e3816118ab565b945050505080806113f39061160b565b9150506112fb565b5050505050565b8054600090815b8161ffff168161ffff16101561147e57846001600160e01b031916846000018261ffff168154811061143d5761143d6115df565b600091825260209091200154600160a01b900460e01b6001600160e01b031916141561146c5791506106739050565b80611476816118ab565b915050611409565b5061ffff949350505050565b60006020828403121561149c57600080fd5b8135801515811461083457600080fd5b6001600160a01b03811681146114c157600080fd5b50565b6000602082840312156114d657600080fd5b8135610834816114ac565b600080604083850312156114f457600080fd5b82356114ff816114ac565b9150602083013561150f816114ac565b809150509250929050565b60006020828403121561152c57600080fd5b5035919050565b6020808252825182820181905260009190848201906040850190845b818110156115745783516001600160a01b03168352928401929184019160010161154f565b50909695505050505050565b6000806040838503121561159357600080fd5b823561159e816114ac565b946020939093013593505050565b634e487b7160e01b600052602160045260246000fd5b6000602082840312156115d457600080fd5b8151610834816114ac565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141561161f5761161f6115f5565b5060010190565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff8111828210171561166557611665611626565b604052919050565b600067ffffffffffffffff82111561168757611687611626565b5060051b60200190565b600060208083850312156116a457600080fd5b825167ffffffffffffffff8111156116bb57600080fd5b8301601f810185136116cc57600080fd5b80516116df6116da8261166d565b61163c565b81815260059190911b820183019083810190878311156116fe57600080fd5b928401925b82841015611725578351611716816114ac565b82529284019290840190611703565b979650505050505050565b60005b8381101561174b578181015183820152602001611733565b83811115610df25750506000910152565b6000825161176e818460208701611730565b9190910192915050565b6020815260008251806020840152611797816040850160208701611730565b601f01601f19169190910160400192915050565b6000828210156117bd576117bd6115f5565b500390565b634e487b7160e01b600052603160045260246000fd5b600060ff821660ff8114156117ef576117ef6115f5565b60010192915050565b6000602080838503121561180b57600080fd5b825167ffffffffffffffff81111561182257600080fd5b8301601f8101851361183357600080fd5b80516118416116da8261166d565b81815260059190911b8201830190838101908783111561186057600080fd5b928401925b828410156117255783516001600160e01b0319811681146118865760008081fd5b82529284019290840190611865565b634e487b7160e01b600052600160045260246000fd5b600061ffff808316818114156118c3576118c36115f5565b600101939250505056fe234c809385eaba7c8e68b2a08341f3988117f4f9fae0fac38df439aa440b26155f6465706c6f794d61726b65742875696e74382c62797465732c62797465732c75696e7432353629a164736f6c634300080a000aa164736f6c634300080a000a", + "sourceMap": "607:14954:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2389:120;;;;;;:::i;:::-;;:::i;:::-;;12547:280;;;;;;:::i;:::-;;:::i;1771:42::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;1963:14:504;;1956:22;1938:41;;1926:2;1911:18;1771:42:5;;;;;;;;11634:324;;;;;;:::i;:::-;;:::i;13027:1056::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;2029:36::-;;;;;;;;;12063:46;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14393:1166;;;;;;:::i;:::-;;:::i;8958:907::-;;;:::i;5623:1773::-;;;;;;:::i;:::-;;:::i;:::-;;;;7391:25:504;;;-1:-1:-1;;;;;7452:32:504;;;7447:2;7432:18;;7425:60;7364:18;5623:1773:5;7217:274:504;12179:27:5;;;;;;;;;7642:25:504;;;7630:2;7615:18;12179:27:5;7496:177:504;1602:386:140;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;1441:85:454:-;1513:6;;-1:-1:-1;;;;;1513:6:454;1441:85;;;-1:-1:-1;;;;;7842:32:504;;;7824:51;;7812:2;7797:18;1441:85:454;7678:203:504;7596:578:5;;;:::i;3873:223::-;;;;;;:::i;:::-;;:::i;2719:253::-;;;;;;:::i;:::-;;:::i;11030:542::-;;;;;;:::i;:::-;;:::i;2175:49::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;1483:19;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;4100:839::-;;;;;;:::i;:::-;;:::i;906:316::-;;;;;;:::i;:::-;;:::i;8340:435::-;;;:::i;:::-;;;;;;;:::i;530:27:140:-;;;;;-1:-1:-1;;;;;530:27:140;;;2839:155;;;;;;:::i;:::-;;:::i;10048:885:5:-;;;;;;:::i;:::-;;:::i;2158:541:140:-;;;:::i;2389:120:5:-;1334:13:454;:11;:13::i;:::-;2470:24:5::1;:34:::0;;-1:-1:-1;;2470:34:5::1;::::0;::::1;;::::0;;;::::1;::::0;;2389:120::o;12547:280::-;1334:13:454;:11;:13::i;:::-;12649:17:5;12641:49:::1;;;::::0;-1:-1:-1;;;12641:49:5;;10316:2:504;12641:49:5::1;::::0;::::1;10298:21:504::0;10355:2;10335:18;;;10328:30;-1:-1:-1;;;10374:18:504;;;10367:49;10433:18;;12641:49:5::1;;;;;;;;;12701:9;12696:78;12716:17:::0;;::::1;12696:78;;;12768:6;12740:14;:25;12755:6;;12762:1;12755:9;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;12740:25:5::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;12740:25:5;:34;;-1:-1:-1;;12740:34:5::1;::::0;::::1;;::::0;;;::::1;::::0;;12735:3;::::1;::::0;::::1;:::i;:::-;;;;12696:78;;;;12785:37;12807:6;;12815;12785:37;;;;;;;;:::i;:::-;;;;;;;;12547:280:::0;;;:::o;11634:324::-;11707:29;11756:5;11762;11756:12;;;;;;;;:::i;:::-;;;;;;;;;;:24;:12;;;;;:24;;11817:20;;;-1:-1:-1;;;11817:20:5;;;;-1:-1:-1;;;;;11756:24:5;;;;-1:-1:-1;11756:24:5;;11817:18;;:20;;;;;;;;;;11756:24;11817:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;11803:34:5;:10;-1:-1:-1;;;;;11803:34:5;;:67;;;;;11841:12;-1:-1:-1;;;;;11841:27:5;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11802:94;;;-1:-1:-1;1513:6:454;;-1:-1:-1;;;;;1513:6:454;11875:10:5;:21;11802:94;11787:136;;;;-1:-1:-1;;;11787:136:5;;12373:2:504;11787:136:5;;;12355:21:504;12412:2;12392:18;;;12385:30;-1:-1:-1;;;12431:18:504;;;12424:41;12482:18;;11787:136:5;12171:335:504;11787:136:5;11949:4;;11929:5;11935;11929:12;;;;;;;;:::i;:::-;;;;;;;;;:24;;:12;;;;;;:24;:::i;:::-;;11701:257;11634:324;;;:::o;13027:1056::-;13111:16;13129:13;13150:19;13183:25;13212:16;:14;:16::i;:::-;13180:48;;;13239:9;13234:300;13258:11;:18;13254:1;:22;13234:300;;;13291:28;13339:11;13351:1;13339:14;;;;;;;;:::i;:::-;;;;;;;:26;;;13291:75;;13379:11;-1:-1:-1;;;;;13379:17:5;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13379:19:5;;;;;;;;-1:-1:-1;;13379:19:5;;;;;;;;;;;;:::i;:::-;;;13375:131;;;;;-1:-1:-1;;;;;13457:21:5;;;;;;:14;:21;;;;;;;;13437:41;;;;;;13433:55;;13480:8;;;;13433:55;13399:98;13375:131;13514:13;;;;:::i;:::-;;;;13283:251;13234:300;13278:3;;;;:::i;:::-;;;;13234:300;;;;13540:24;13581:11;-1:-1:-1;;;;;13567:26:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13567:26:5;;13540:53;;13599:25;13638:11;-1:-1:-1;;;;;13627:23:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;13599:51;;13656:13;13685:9;13680:363;13704:11;:18;13700:1;:22;13680:363;;;13737:28;13785:11;13797:1;13785:14;;;;;;;;:::i;:::-;;;;;;;:26;;;13737:75;;13825:11;-1:-1:-1;;;;;13825:17:5;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13825:19:5;;;;;;;;-1:-1:-1;;13825:19:5;;;;;;;;;;;;:::i;:::-;;;13821:131;;;;;-1:-1:-1;;;;;13903:21:5;;;;;;:14;:21;;;;;;;;13883:41;;;;;;13879:55;;13926:8;;;;13879:55;13845:98;13821:131;13977:1;13960:7;13968:5;13960:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;14007:11;14019:1;14007:14;;;;;;;;:::i;:::-;;;;;;;13986:11;13998:5;13986:18;;;;;;;;:::i;:::-;;;;;;:35;;;;14029:7;;;;;:::i;:::-;;;;13729:314;13680:363;13724:3;;;;:::i;:::-;;;;13680:363;;;-1:-1:-1;14057:7:5;;14066:11;;-1:-1:-1;13027:1056:5;-1:-1:-1;;;;;13027:1056:5:o;14393:1166::-;14491:16;14509:13;14532:19;14564:25;14593:16;:14;:16::i;:::-;14561:48;;;14620:9;14615:330;14639:11;:18;14635:1;:22;14615:330;;;14672:28;14720:11;14732:1;14720:14;;;;;;;;:::i;:::-;;;;;;;:26;;;14672:75;;14760:11;-1:-1:-1;;;;;14760:28:5;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14760:30:5;;;;;;;;-1:-1:-1;;14760:30:5;;;;;;;;;;;;:::i;:::-;;;14756:161;;;;;14838:16;14837:17;:52;;;-1:-1:-1;14859:30:5;;-1:-1:-1;;;14859:30:5;;-1:-1:-1;;;;;7842:32:504;;;14859:30:5;;;7824:51:504;14859:21:5;;;;;7797:18:504;;14859:30:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14858:31;14837:52;14833:66;;;14891:8;;;;14833:66;14791:117;14756:161;14925:13;;;;:::i;:::-;;;;14664:281;14615:330;14659:3;;;;:::i;:::-;;;;14615:330;;;;14951:24;14992:11;-1:-1:-1;;;;;14978:26:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14978:26:5;;14951:53;;15010:37;15061:11;-1:-1:-1;;;;;15050:23:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;15010:63;;15079:13;15108:9;15103:404;15127:11;:18;15123:1;:22;15103:404;;;15160:28;15208:11;15220:1;15208:14;;;;;;;;:::i;:::-;;;;;;;:26;;;15160:75;;15247:11;-1:-1:-1;;;;;15247:28:5;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15247:30:5;;;;;;;;-1:-1:-1;;15247:30:5;;;;;;;;;;;;:::i;:::-;;;15243:161;;;;;15325:16;15324:17;:52;;;-1:-1:-1;15346:30:5;;-1:-1:-1;;;15346:30:5;;-1:-1:-1;;;;;7842:32:504;;;15346:30:5;;;7824:51:504;15346:21:5;;;;;7797:18:504;;15346:30:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15345:31;15324:52;15320:66;;;15378:8;;;;15320:66;15278:117;15243:161;15429:1;15412:7;15420:5;15412:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;15471:11;15483:1;15471:14;;;;;;;;:::i;:::-;;;;;;;15438:23;15462:5;15438:30;;;;;;;;:::i;:::-;;;;;;:47;;;;15493:7;;;;;:::i;:::-;;;;15152:355;15103:404;15147:3;;;;:::i;:::-;;;;15103:404;;8958:907;9007:16;9025:13;9046:19;9079:25;9108:16;:14;:16::i;:::-;9076:48;;;9135:9;9130:243;9154:11;:18;9150:1;:22;9130:243;;;9208:11;9220:1;9208:14;;;;;;;;:::i;:::-;;;;;;;:26;;;-1:-1:-1;;;;;9191:61:5;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9191:63:5;;;;;;;;-1:-1:-1;;9191:63:5;;;;;;;;;;;;:::i;:::-;;;9187:158;;;;;9301:16;9297:30;;;9319:8;;;9297:30;9255:81;9187:158;9353:13;;;;:::i;:::-;;;;9130:243;9174:3;;;;:::i;:::-;;;;9130:243;;;;9379:24;9420:11;-1:-1:-1;;;;;9406:26:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9406:26:5;;9379:53;;9438:25;9477:11;-1:-1:-1;;;;;9466:23:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;9438:51;;9495:13;9524:9;9519:306;9543:11;:18;9539:1;:22;9519:306;;;9597:11;9609:1;9597:14;;;;;;;;:::i;:::-;;;;;;;:26;;;-1:-1:-1;;;;;9580:61:5;;:63;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9580:63:5;;;;;;;;-1:-1:-1;;9580:63:5;;;;;;;;;;;;:::i;:::-;;;9576:158;;;;;9690:16;9686:30;;;9708:8;;;9686:30;9644:81;9576:158;9759:1;9742:7;9750:5;9742:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;9789:11;9801:1;9789:14;;;;;;;;:::i;:::-;;;;;;;9768:11;9780:5;9768:18;;;;;;;;:::i;:::-;;;;;;:35;;;;9811:7;;;;;:::i;:::-;;;;9519:306;9563:3;;;;:::i;:::-;;;;9519:306;;;-1:-1:-1;9839:7:5;;9848:11;;-1:-1:-1;8958:907:5;-1:-1:-1;;;;8958:907:5:o;5623:1773::-;5864:7;;-1:-1:-1;;;;;5920:28:5;;5912:98;;;;-1:-1:-1;;;5912:98:5;;12713:2:504;5912:98:5;;;12695:21:504;12752:2;12732:18;;;12725:30;12791:34;12771:18;;;12764:62;12862:27;12842:18;;;12835:55;12907:19;;5912:98:5;12511:421:504;5912:98:5;-1:-1:-1;;;;;6024:25:5;;6016:80;;;;-1:-1:-1;;;6016:80:5;;13139:2:504;6016:80:5;;;13121:21:504;13178:2;13158:18;;;13151:30;13217:34;13197:18;;;13190:62;-1:-1:-1;;;13268:18:504;;;13261:40;13318:19;;6016:80:5;12937:406:504;6016:80:5;6179:35;6234:29;;;;;;;;:::i;:::-;-1:-1:-1;;6234:29:5;;;;;;;;;;;;;;;;6217:64;;6234:29;6265:15;;;;6234:29;6217:64;;:::i;:::-;;;;;;;;;;;;;6179:102;;6287:13;6303:139;6336:1;6372:10;6384:4;6392:12;;6390:14;;;;;:::i;:::-;;;;;-1:-1:-1;6355:50:5;;;;;;6390:14;6355:50;;;:::i;:::-;;;;;;;;;;;;;6345:61;;;;;;6414:22;6303:25;:139::i;:::-;6287:155;;6471:33;6524:5;6471:59;;6565:16;-1:-1:-1;;;;;6565:25:5;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6634:45:5;;-1:-1:-1;;;6634:45:5;;;;;7642:25:504;;;-1:-1:-1;;;;;6634:32:5;;;-1:-1:-1;6634:32:5;;-1:-1:-1;7615:18:504;;6634:45:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;6626:95;;;;-1:-1:-1;;;6626:95:5;;14688:2:504;6626:95:5;;;14670:21:504;;;14707:18;;;14700:30;14766:34;14746:18;;;14739:62;14818:18;;6626:95:5;14486:356:504;6626:95:5;6742:63;;-1:-1:-1;;;6742:63:5;;;;;7642:25:504;;;-1:-1:-1;;;;;6742:41:5;;;;;7615:18:504;;6742:63:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:68;6727:140;;;;-1:-1:-1;;;6727:140:5;;15049:2:504;6727:140:5;;;15031:21:504;15088:2;15068:18;;;15061:30;15127:34;15107:18;;;15100:62;-1:-1:-1;;;15178:18:504;;;15171:39;15227:19;;6727:140:5;14847:405:504;6727:140:5;6881:62;;-1:-1:-1;;;6881:62:5;;-1:-1:-1;;;;;7842:32:504;;;6881:62:5;;;7824:51:504;6881:32:5;;;;;7797:18:504;;6881:62:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:67;6873:112;;;;-1:-1:-1;;;6873:112:5;;15692:2:504;6873:112:5;;;15674:21:504;;;15711:18;;;15704:30;15770:34;15750:18;;;15743:62;15822:18;;6873:112:5;15490:356:504;6873:112:5;7013:16;7009:139;;;7045:47;;-1:-1:-1;;;7045:47:5;;7087:4;7045:47;;;1938:41:504;-1:-1:-1;;;;;7045:41:5;;;;;1911:18:504;;7045:47:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:52;7037:111;;;;-1:-1:-1;;;7037:111:5;;16053:2:504;7037:111:5;;;16035:21:504;16092:2;16072:18;;;16065:30;16131:34;16111:18;;;16104:62;-1:-1:-1;;;16182:18:504;;;16175:44;16236:19;;7037:111:5;15851:410:504;7037:111:5;7196:45;;-1:-1:-1;;;7196:45:5;;7230:10;7196:45;;;7824:51:504;-1:-1:-1;;;;;7196:33:5;;;;;7797:18:504;;7196:45:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;7188:105;;;;-1:-1:-1;;;7188:105:5;;16468:2:504;7188:105:5;;;16450:21:504;16507:2;16487:18;;;16480:30;16546:34;16526:18;;;16519:62;-1:-1:-1;;;16597:18:504;;;16590:40;16647:19;;7188:105:5;16266:406:504;7188:105:5;7357:26;7371:4;7377:5;7357:13;:26::i;:::-;7349:42;7385:5;;-1:-1:-1;5623:1773:5;;-1:-1:-1;;;;;;;;;;;5623:1773:5:o;1602:386:140:-;1334:13:454;:11;:13::i;:::-;1758:12:140::1;::::0;;-1:-1:-1;;;;;1830:30:140;;::::1;-1:-1:-1::0;;;;;;1830:30:140;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;16889:34:504::0;;;16954:2;16939:18;;16932:43;;;;1934:49:140::1;::::0;16824:18:504;1934:49:140::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:454;:11;:13::i;:::-;2804:26:140::1;::::0;-1:-1:-1;;;2804:26:140;;17188:2:504;2804:26:140::1;::::0;::::1;17170:21:504::0;17227:2;17207:18;;;17200:30;-1:-1:-1;;;17246:18:504;;;17239:46;17302:18;;2804:26:140::1;16986:340:504::0;7596:578:5;7643:16;7661:13;7682;7710:9;7705:105;7729:5;:12;7725:16;;7705:105;;;7792:1;-1:-1:-1;;;;;7760:34:5;:5;7766:1;7760:8;;;;;;;;:::i;:::-;;;;;;;;;:20;:8;;;;;:20;;-1:-1:-1;;;;;7760:20:5;:34;7756:47;;7796:7;;;;:::i;:::-;;;;7756:47;7743:3;;;;:::i;:::-;;;;7705:105;;;;7816:25;7855:5;-1:-1:-1;;;;;7844:17:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;7816:45;;7867:24;7908:5;-1:-1:-1;;;;;7894:20:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7894:20:5;;7867:47;;7921:13;7949:9;7944:190;7968:5;:12;7964:16;;7944:190;;;8031:1;-1:-1:-1;;;;;7999:34:5;:5;8005:1;7999:8;;;;;;;;:::i;:::-;;;;;;;;;:20;:8;;;;;:20;;-1:-1:-1;;;;;7999:20:5;:34;7995:133;;8062:1;8045:7;8053:5;8045:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;8094:5;8100:1;8094:8;;;;;;;;:::i;:::-;;;;;;;;;;;8073:29;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8073:29:5;;;-1:-1:-1;;8073:29:5;;;;-1:-1:-1;;;;;8073:29:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:18;;:11;;8085:5;;8073:18;;;;;;:::i;:::-;;;;;;:29;;;;8112:7;;;;;:::i;:::-;;;;7995:133;7982:3;;;;:::i;:::-;;;;7944:190;;;-1:-1:-1;8148:7:5;;8157:11;;-1:-1:-1;7596:578:5;;-1:-1:-1;;;7596:578:5:o;3873:223::-;1334:13:454;:11;:13::i;:::-;3948:9:5::1;3943:149;3967:5;:12:::0;3963:16;::::1;3943:149;;;4022:11;-1:-1:-1::0;;;;;3998:35:5::1;:5;4004:1;3998:8;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;:20:::1;:8;::::0;;::::1;;:20;::::0;-1:-1:-1;;;;;3998:20:5::1;:35;3994:92;;;4045:17;4060:1;4045:14;:17::i;:::-;3943:149;3873:223:::0;:::o;3994:92::-:1;3981:3:::0;::::1;::::0;::::1;:::i;:::-;;;;3943:149;;2719:253:::0;1334:13:454;:11;:13::i;:::-;2827:20:5;2819:55:::1;;;::::0;-1:-1:-1;;;2819:55:5;;17918:2:504;2819:55:5::1;::::0;::::1;17900:21:504::0;17957:2;17937:18;;;17930:30;-1:-1:-1;;;17976:18:504;;;17969:52;18038:18;;2819:55:5::1;17716:346:504::0;2819:55:5::1;2885:9;2880:87;2900:20:::0;;::::1;2880:87;;;2961:6;2927:17;:31;2945:9;;2955:1;2945:12;;;;;;;:::i;:::-;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;2927:31:5::1;::::0;;::::1;::::0;::::1;::::0;;;;;;-1:-1:-1;2927:31:5;:40;;-1:-1:-1;;2927:40:5::1;::::0;::::1;;::::0;;;::::1;::::0;;2922:3;::::1;::::0;::::1;:::i;:::-;;;;2880:87;;;;2719:253:::0;;;:::o;11030:542::-;-1:-1:-1;;;;;11177:24:5;;11136;11177;;;:15;:24;;;;;:31;11097:16;;;;-1:-1:-1;;;;;11163:46:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11163:46:5;-1:-1:-1;;;;;;11255:24:5;;11215:26;11255:24;;;:15;:24;;;;;:31;11136:73;;-1:-1:-1;11215:26:5;-1:-1:-1;;;;;11244:43:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11215:72;;11296:25;11325:16;:14;:16::i;:::-;11293:48;;;11353:9;11348:183;-1:-1:-1;;;;;11372:24:5;;;;;;:15;:24;;;;;:31;11368:35;;11348:183;;;-1:-1:-1;;;;;11431:24:5;;;;;;:15;:24;;;;;:27;;11456:1;;11431:27;;;;;;:::i;:::-;;;;;;;;;11418:7;11426:1;11418:10;;;;;;;;:::i;:::-;;;;;;:40;;;;;11484:11;11496:15;:24;11512:7;-1:-1:-1;;;;;11496:24:5;-1:-1:-1;;;;;11496:24:5;;;;;;;;;;;;11521:1;11496:27;;;;;;;;:::i;:::-;;;;;;;;;11484:40;;;;;;;;:::i;:::-;;;;;;;11466:12;11479:1;11466:15;;;;;;;;:::i;:::-;;;;;;:58;;;;11405:3;;;;;:::i;:::-;;;;11348:183;;;-1:-1:-1;11545:7:5;;11554:12;;-1:-1:-1;11030:542:5;-1:-1:-1;;;11030:542:5:o;1483:19::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;1483:19:5;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;1483:19:5;;;;;;;;;-1:-1:-1;1483:19:5;;:::o;4100:839::-;1334:13:454;:11;:13::i;:::-;4162:22:5::1;4187:5;4193;4187:12;;;;;;;;:::i;:::-;;::::0;;;::::1;::::0;;;::::1;::::0;;::::1;;4214:21;::::0;::::1;::::0;4187:12;;-1:-1:-1;;;;;;4214:21:5::1;4206:71;;;::::0;-1:-1:-1;;;4206:71:5;;18269:2:504;4206:71:5::1;::::0;::::1;18251:21:504::0;18308:2;18288:18;;;18281:30;18347:25;18327:18;;;18320:53;18390:18;;4206:71:5::1;18067:347:504::0;4206:71:5::1;4390:17;::::0;::::1;::::0;-1:-1:-1;;;;;4390:17:5::1;4341:30;4374:34:::0;;;:15:::1;:34;::::0;;;;;4414:211:::1;4438:19:::0;;4434:23;::::1;4414:211;;;4495:5;4476:12;4489:1;4476:15;;;;;;;;:::i;:::-;;;;;;;;;:24;4472:147;;;4543:19:::0;;4530:12;;4543:23:::1;::::0;4565:1:::1;::::0;4543:23:::1;:::i;:::-;4530:37;;;;;;;;:::i;:::-;;;;;;;;;4512:12;4525:1;4512:15;;;;;;;;:::i;:::-;;;;;;;;:55;;;;4577:12;:18;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;4605:5;;4472:147;4459:3:::0;::::1;::::0;::::1;:::i;:::-;;;;4414:211;;;-1:-1:-1::0;4710:21:5::1;::::0;::::1;::::0;;-1:-1:-1;;;;;4710:21:5::1;4699:33;::::0;;;:10:::1;:33;::::0;;;;;;;:40;;-1:-1:-1;;4699:40:5::1;4735:4;4699:40:::0;;::::1;::::0;;;4773:34;;-1:-1:-1;;;;;;4773:34:5;;::::1;::::0;;;4813:17;::::1;:30:::0;;;;::::1;::::0;;;4849:19;;;;::::1;::::0;;;;;;;::::1;::::0;4710:9;;4849:19:::1;:::i;:::-;-1:-1:-1::0;;4898:1:5::1;4874:21;::::0;::::1;:25:::0;;;4905::::1;::::0;;::::1;:29:::0;-1:-1:-1;4100:839:5:o;906:316::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;18883:2:504;3314:201:457;;;18865:21:504;18922:2;18902:18;;;18895:30;18961:34;18941:18;;;18934:62;-1:-1:-1;;;19012:18:504;;;19005:44;19066:19;;3314:201:457;18681:410:504;3314:201:457;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;1020:30:5::1;1039:10;1020:18;:30::i;:::-;1056:24;:52:::0;;-1:-1:-1;;1056:52:5::1;::::0;::::1;;;::::0;;-1:-1:-1;1114:103:5::1;1138:18;:25;1134:1;:29;1114:103;;;1213:4;1170:17;:40;1188:18;1207:1;1188:21;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;1170:40:5::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;1170:40:5;:47;;-1:-1:-1;;1170:47:5::1;::::0;::::1;;::::0;;;::::1;::::0;;1165:3;::::1;::::0;::::1;:::i;:::-;;;;1114:103;;;;3640:14:457::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;19248:36:504;;3710:14:457;;19236:2:504;19221:18;3710:14:457;19096:194:504;3636:99:457;3258:483;906:316:5;;:::o;8340:435::-;8384:13;8405;8433:9;8428:105;8452:5;:12;8448:16;;8428:105;;;8515:1;-1:-1:-1;;;;;8483:34:5;:5;8489:1;8483:8;;;;;;;;:::i;:::-;;;;;;;;;:20;:8;;;;;:20;;-1:-1:-1;;;;;8483:20:5;:34;8479:47;;8519:7;;;;:::i;:::-;;;;8479:47;8466:3;;;;:::i;:::-;;;;8428:105;;;;8539:20;8573:5;-1:-1:-1;;;;;8562:17:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;8539:40;;8586:13;8614:9;8609:142;8633:5;:12;8629:16;;8609:142;;;8696:1;-1:-1:-1;;;;;8664:34:5;:5;8670:1;8664:8;;;;;;;;:::i;:::-;;;;;;;;;:20;:8;;;;;:20;;-1:-1:-1;;;;;8664:20:5;:34;8660:85;;8728:5;8734:1;8728:8;;;;;;;;:::i;:::-;;;;;;;;;;;8710:26;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;8710:26:5;;;-1:-1:-1;;8710:26:5;;;;-1:-1:-1;;;;;8710:26:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:6;8717:7;;;;:::i;:::-;;;8710:15;;;;;;;;:::i;:::-;;;;;;:26;;;;8660:85;8647:3;;;;:::i;:::-;;;;8609:142;;;-1:-1:-1;8764:6:5;;8340:435;-1:-1:-1;;;8340:435:5:o;2839:155:140:-;1334:13:454;:11;:13::i;:::-;2937:12:140::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:140;;::::1;16889:34:504::0;;16959:15;;;16954:2;16939:18;;16932:43;2921:39:140::1;::::0;16824:18:504;2921:39:140::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:140::1;-1:-1:-1::0;;;;;2966:23:140;;;::::1;::::0;;;::::1;::::0;;2839:155::o;10048:885:5:-;10109:16;10127:13;10148:19;10181:25;10210:16;:14;:16::i;:::-;10178:48;;;10237:9;10232:226;10256:11;:18;10252:1;:22;10232:226;;;10310:11;10322:1;10310:14;;;;;;;;:::i;:::-;;;;;;;:26;;;-1:-1:-1;;;;;10293:57:5;;10351:4;10293:63;;;;;;;;;;;;;;-1:-1:-1;;;;;7842:32:504;;;;7824:51;;7812:2;7797:18;;7678:203;10293:63:5;;;;;;;;;;;;;;;;;;;-1:-1:-1;10293:63:5;;;;;;;;-1:-1:-1;;10293:63:5;;;;;;;;;;;;:::i;:::-;;;10289:141;;;;;10395:7;10390:22;;10404:8;;;10390:22;10357:64;10289:141;10438:13;;;;:::i;:::-;;;;10232:226;10276:3;;;;:::i;:::-;;;;10232:226;;;;10464:24;10505:11;-1:-1:-1;;;;;10491:26:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10491:26:5;;10464:53;;10523:25;10562:11;-1:-1:-1;;;;;10551:23:5;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;10523:51;;10580:13;10609:9;10604:289;10628:11;:18;10624:1;:22;10604:289;;;10682:11;10694:1;10682:14;;;;;;;;:::i;:::-;;;;;;;:26;;;-1:-1:-1;;;;;10665:57:5;;10723:4;10665:63;;;;;;;;;;;;;;-1:-1:-1;;;;;7842:32:504;;;;7824:51;;7812:2;7797:18;;7678:203;10665:63:5;;;;;;;;;;;;;;;;;;;-1:-1:-1;10665:63:5;;;;;;;;-1:-1:-1;;10665:63:5;;;;;;;;;;;;:::i;:::-;;;10661:141;;;;;10767:7;10762:22;;10776:8;;;10762:22;10729:64;10661:141;10827:1;10810:7;10818:5;10810:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;10857:11;10869:1;10857:14;;;;;;;;:::i;:::-;;;;;;;10836:11;10848:5;10836:18;;;;;;;;:::i;:::-;;;;;;:35;;;;10879:7;;;;;:::i;:::-;;;;10604:289;10648:3;;;;:::i;:::-;;;;10604:289;;2158:541:140;2285:12;;-1:-1:-1;;;;;2285:12:140;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:140;;19497:2:504;2263:60:140;;;19479:21:504;19536:2;19516:18;;;19509:30;-1:-1:-1;;;19555:18:504;;;19548:51;19616:18;;2263:60:140;19295:345:504;2263:60:140;2378:16;2397:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2397:7:140;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:140;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:140;;;2605:32;;;-1:-1:-1;;;;;16907:15:504;;16889:34;;-1:-1:-1;16954:2:504;16939:18;;16932:43;2605:32:140;;16824:18:504;2605:32:140;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;16907:15:504;;;16889:34;;2681:12:140;;;16954:2:504;16939:18;;16932:43;2648:46:140;;16824:18:504;2648:46:140;16677:304:504;1599:130:454;1513:6;;-1:-1:-1;;;;;1513:6:454;929:10:467;1662:23:454;1654:68;;;;-1:-1:-1;;;1654:68:454;;19847:2:504;1654:68:454;;;19829:21:504;;;19866:18;;;19859:30;19925:34;19905:18;;;19898:62;19977:18;;1654:68:454;19645:356:504;1654:68:454;1599:130::o;1092:514:468:-;1209:12;1266:6;1241:21;:31;;1233:73;;;;-1:-1:-1;;;1233:73:468;;20208:2:504;1233:73:468;;;20190:21:504;20247:2;20227:18;;;20220:30;20286:31;20266:18;;;20259:59;20335:18;;1233:73:468;20006:353:504;1233:73:468;1324:15;;1316:65;;;;-1:-1:-1;;;1316:65:468;;20566:2:504;1316:65:468;;;20548:21:504;;;20585:18;;;20578:30;20644:34;20624:18;;;20617:62;20696:18;;1316:65:468;20364:356:504;1316:65:468;1519:4;1508:8;1502:15;1495:4;1485:8;1481:19;1473:6;1465:59;1457:67;-1:-1:-1;;;;;;1551:18:468;;1543:56;;;;-1:-1:-1;;;1543:56:468;;20927:2:504;1543:56:468;;;20909:21:504;20966:2;20946:18;;;20939:30;21005:27;20985:18;;;20978:55;21050:18;;1543:56:468;20725:349:504;1543:56:468;1092:514;;;;;:::o;3231:638:5:-;-1:-1:-1;;;;;3337:23:5;;3313:7;3337:23;;;:10;:23;;;;;;;;3336:24;3328:74;;;;-1:-1:-1;;;3328:74:5;;21281:2:504;3328:74:5;;;21263:21:504;21320:2;21300:18;;;21293:30;21359:34;21339:18;;;21332:62;-1:-1:-1;;;21410:18:504;;;21403:35;21455:19;;3328:74:5;21079:401:504;3328:74:5;3417:24;;;;3416:25;;:58;;-1:-1:-1;3463:10:5;3445:29;;;;:17;:29;;;;;;;;3416:58;3408:107;;;;-1:-1:-1;;;3408:107:5;;21687:2:504;3408:107:5;;;21669:21:504;21726:2;21706:18;;;21699:30;21765:34;21745:18;;;21738:62;-1:-1:-1;;;21816:18:504;;;21809:34;21860:19;;3408:107:5;21485:400:504;3408:107:5;3551:3;3535:4;3529:18;:25;;3521:60;;;;-1:-1:-1;;;3521:60:5;;22092:2:504;3521:60:5;;;22074:21:504;22131:2;22111:18;;;22104:30;-1:-1:-1;;;22150:18:504;;;22143:52;22212:18;;3521:60:5;21890:346:504;3521:60:5;3606:66;;;;;;;;;;;3617:10;3606:66;;;;;;;;-1:-1:-1;;;;;3606:66:5;;;;;;;;;3642:12;3606:66;;;;3656:15;3606:66;;;;3678:5;:16;;;;;;;3587;3678;;;;;;;;3606:66;;;;3678:16;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;3678:16:5;;;;;;;;;;;-1:-1:-1;;;;;;3678:16:5;;;-1:-1:-1;;;;;3678:16:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3716:10;-1:-1:-1;3700:27:5;;;:15;:27;;;;3733:5;:12;3700:27;;3733:16;;;:::i;:::-;3700:50;;;;;;;;-1:-1:-1;3700:50:5;;;;;;;;;;;;;;-1:-1:-1;;;;;3756:23:5;;;;:10;:23;;;;;;:30;;-1:-1:-1;;3756:30:5;;;;;3812:5;:12;3797:38;;3812:16;;;:::i;:::-;3830:4;3797:38;;;;;;;:::i;:::-;;;;;;;;3848:5;:12;:16;;3863:1;;3848:16;:::i;:::-;3841:23;3231:638;-1:-1:-1;;;;3231:638:5:o;562:129:140:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;638:16:140::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;2673:187:454:-;2765:6;;;-1:-1:-1;;;;;2781:17:454;;;-1:-1:-1;;;;;;2781:17:454;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1065:26:454::1;5363:13:457::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1176:32:454::1;929:10:467::0;1176:18:454::1;:32::i;-1:-1:-1:-:0;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14:118:504;100:5;93:13;86:21;79:5;76:32;66:60;;122:1;119;112:12;137:128;202:20;;231:28;202:20;231:28;:::i;:::-;137:128;;;:::o;270:241::-;326:6;379:2;367:9;358:7;354:23;350:32;347:52;;;395:1;392;385:12;347:52;434:9;421:23;453:28;475:5;453:28;:::i;516:750::-;608:6;616;624;677:2;665:9;656:7;652:23;648:32;645:52;;;693:1;690;683:12;645:52;733:9;720:23;-1:-1:-1;;;;;803:2:504;795:6;792:14;789:34;;;819:1;816;809:12;789:34;857:6;846:9;842:22;832:32;;902:7;895:4;891:2;887:13;883:27;873:55;;924:1;921;914:12;873:55;964:2;951:16;990:2;982:6;979:14;976:34;;;1006:1;1003;996:12;976:34;1061:7;1054:4;1044:6;1041:1;1037:14;1033:2;1029:23;1025:34;1022:47;1019:67;;;1082:1;1079;1072:12;1019:67;1113:4;1105:13;;;;-1:-1:-1;1137:6:504;-1:-1:-1;;1178:20:504;;1165:34;1208:28;1165:34;1208:28;:::i;:::-;1255:5;1245:15;;;516:750;;;;;:::o;1271:131::-;-1:-1:-1;;;;;1346:31:504;;1336:42;;1326:70;;1392:1;1389;1382:12;1407:134;1475:20;;1504:31;1475:20;1504:31;:::i;1546:247::-;1605:6;1658:2;1646:9;1637:7;1633:23;1629:32;1626:52;;;1674:1;1671;1664:12;1626:52;1713:9;1700:23;1732:31;1757:5;1732:31;:::i;1990:348::-;2042:8;2052:6;2106:3;2099:4;2091:6;2087:17;2083:27;2073:55;;2124:1;2121;2114:12;2073:55;-1:-1:-1;2147:20:504;;-1:-1:-1;;;;;2179:30:504;;2176:50;;;2222:1;2219;2212:12;2176:50;2259:4;2251:6;2247:17;2235:29;;2311:3;2304:4;2295:6;2287;2283:19;2279:30;2276:39;2273:59;;;2328:1;2325;2318:12;2273:59;1990:348;;;;;:::o;2343:479::-;2423:6;2431;2439;2492:2;2480:9;2471:7;2467:23;2463:32;2460:52;;;2508:1;2505;2498:12;2460:52;2544:9;2531:23;2521:33;;2605:2;2594:9;2590:18;2577:32;-1:-1:-1;;;;;2624:6:504;2621:30;2618:50;;;2664:1;2661;2654:12;2618:50;2703:59;2754:7;2745:6;2734:9;2730:22;2703:59;:::i;:::-;2343:479;;2781:8;;-1:-1:-1;2677:85:504;;-1:-1:-1;;;;2343:479:504:o;2827:258::-;2899:1;2909:113;2923:6;2920:1;2917:13;2909:113;;;2999:11;;;2993:18;2980:11;;;2973:39;2945:2;2938:10;2909:113;;;3040:6;3037:1;3034:13;3031:48;;;-1:-1:-1;;3075:1:504;3057:16;;3050:27;2827:258::o;3090:::-;3132:3;3170:5;3164:12;3197:6;3192:3;3185:19;3213:63;3269:6;3262:4;3257:3;3253:14;3246:4;3239:5;3235:16;3213:63;:::i;:::-;3330:2;3309:15;-1:-1:-1;;3305:29:504;3296:39;;;;3337:4;3292:50;;3090:258;-1:-1:-1;;3090:258:504:o;3353:542::-;3400:3;3444:5;3438:12;3471:4;3466:3;3459:17;3497:47;3538:4;3533:3;3529:14;3515:12;3497:47;:::i;:::-;3485:59;;3592:4;3585:5;3581:16;3575:23;3634:1;3630;3625:3;3621:11;3617:19;3688:2;3672:14;3668:23;3661:4;3656:3;3652:14;3645:47;3753:2;3745:4;3738:5;3734:16;3728:23;3724:32;3717:4;3712:3;3708:14;3701:56;;;3806:4;3799:5;3795:16;3789:23;3782:4;3777:3;3773:14;3766:47;3862:4;3855:5;3851:16;3845:23;3838:4;3833:3;3829:14;3822:47;3885:4;3878:11;;;3353:542;;;;:::o;3900:626::-;3957:3;3995:5;3989:12;4022:6;4017:3;4010:19;4048:4;4089:2;4084:3;4080:12;4114:11;4141;4134:18;;4191:6;4188:1;4184:14;4177:5;4173:26;4161:38;;4233:2;4226:5;4222:14;4254:1;4264:236;4278:6;4275:1;4272:13;4264:236;;;4349:5;4343:4;4339:16;4334:3;4327:29;4377:43;4415:4;4406:6;4400:13;4377:43;:::i;:::-;4478:12;;;;4369:51;-1:-1:-1;4443:15:504;;;;4300:1;4293:9;4264:236;;;-1:-1:-1;4516:4:504;;3900:626;-1:-1:-1;;;;;;;3900:626:504:o;4531:854::-;4843:2;4855:21;;;4925:13;;4828:18;;;4947:22;;;4795:4;;5022;;5000:2;4985:18;;;5049:15;;;4795:4;5092:169;5106:6;5103:1;5100:13;5092:169;;;5167:13;;5155:26;;5201:12;;;;5236:15;;;;5128:1;5121:9;5092:169;;;5096:3;;;5306:9;5301:3;5297:19;5292:2;5281:9;5277:18;5270:47;5334:45;5375:3;5367:6;5334:45;:::i;:::-;5326:53;4531:854;-1:-1:-1;;;;;;4531:854:504:o;5390:127::-;5451:10;5446:3;5442:20;5439:1;5432:31;5482:4;5479:1;5472:15;5506:4;5503:1;5496:15;5522:275;5593:2;5587:9;5658:2;5639:13;;-1:-1:-1;;5635:27:504;5623:40;;-1:-1:-1;;;;;5678:34:504;;5714:22;;;5675:62;5672:88;;;5740:18;;:::i;:::-;5776:2;5769:22;5522:275;;-1:-1:-1;5522:275:504:o;5802:1410::-;5933:6;5941;5949;5957;5965;5973;5981;5989;6042:3;6030:9;6021:7;6017:23;6013:33;6010:53;;;6059:1;6056;6049:12;6010:53;6099:9;6086:23;-1:-1:-1;;;;;6169:2:504;6161:6;6158:14;6155:34;;;6185:1;6182;6175:12;6155:34;6223:6;6212:9;6208:22;6198:32;;6268:7;6261:4;6257:2;6253:13;6249:27;6239:55;;6290:1;6287;6280:12;6239:55;6326:2;6313:16;6348:4;6371:2;6367;6364:10;6361:36;;;6377:18;;:::i;:::-;6419:53;6462:2;6443:13;;-1:-1:-1;;6439:27:504;6435:36;;6419:53;:::i;:::-;6495:2;6488:5;6481:17;6535:7;6530:2;6525;6521;6517:11;6513:20;6510:33;6507:53;;;6556:1;6553;6546:12;6507:53;6611:2;6606;6602;6598:11;6593:2;6586:5;6582:14;6569:45;6655:1;6634:14;;;6630:23;;6623:34;6638:5;-1:-1:-1;6700:38:504;6719:18;;;6700:38;:::i;:::-;6690:48;;;;6791:2;6780:9;6776:18;6763:32;6747:48;;6820:2;6810:8;6807:16;6804:36;;;6836:1;6833;6826:12;6804:36;;6875:61;6928:7;6917:8;6906:9;6902:24;6875:61;:::i;:::-;6955:8;;-1:-1:-1;6849:87:504;-1:-1:-1;7009:35:504;;-1:-1:-1;7040:2:504;7025:18;;7009:35;:::i;:::-;6999:45;;7091:3;7080:9;7076:19;7063:33;7053:43;;7143:3;7132:9;7128:19;7115:33;7105:43;;7167:39;7201:3;7190:9;7186:19;7167:39;:::i;:::-;7157:49;;5802:1410;;;;;;;;;;;:::o;7886:180::-;7945:6;7998:2;7986:9;7977:7;7973:23;7969:32;7966:52;;;8014:1;8011;8004:12;7966:52;-1:-1:-1;8037:23:504;;7886:180;-1:-1:-1;7886:180:504:o;8071:563::-;8332:3;8321:9;8314:22;8295:4;8353:46;8394:3;8383:9;8379:19;8371:6;8353:46;:::i;:::-;-1:-1:-1;;;;;8473:15:504;;;8468:2;8453:18;;8446:43;8525:15;;;;8520:2;8505:18;;8498:43;8572:2;8557:18;;8550:34;;;;8615:3;8600:19;;;8593:35;8345:54;8071:563;-1:-1:-1;;8071:563:504:o;8639:1156::-;8729:6;8737;8790:2;8778:9;8769:7;8765:23;8761:32;8758:52;;;8806:1;8803;8796:12;8758:52;8845:9;8832:23;8864:28;8886:5;8864:28;:::i;:::-;8911:5;-1:-1:-1;8935:2:504;8973:18;;;8960:32;-1:-1:-1;;;;;9041:14:504;;;9038:34;;;9068:1;9065;9058:12;9038:34;9106:6;9095:9;9091:22;9081:32;;9151:7;9144:4;9140:2;9136:13;9132:27;9122:55;;9173:1;9170;9163:12;9122:55;9209:2;9196:16;9231:2;9227;9224:10;9221:36;;;9237:18;;:::i;:::-;9283:2;9280:1;9276:10;9266:20;;9306:28;9330:2;9326;9322:11;9306:28;:::i;:::-;9368:15;;;9438:11;;;9434:20;;;9399:12;;;;9466:19;;;9463:39;;;9498:1;9495;9488:12;9463:39;9522:11;;;;9542:223;9558:6;9553:3;9550:15;9542:223;;;9640:3;9627:17;9612:32;;9657:33;9682:7;9657:33;:::i;:::-;9703:20;;;9575:12;;;;9743;;;;9542:223;;;9784:5;9774:15;;;;;;;;8639:1156;;;;;:::o;9800:309::-;10023:2;10012:9;10005:21;9986:4;10043:60;10099:2;10088:9;10084:18;10076:6;10043:60;:::i;10462:127::-;10523:10;10518:3;10514:20;10511:1;10504:31;10554:4;10551:1;10544:15;10578:4;10575:1;10568:15;10594:127;10655:10;10650:3;10646:20;10643:1;10636:31;10686:4;10683:1;10676:15;10710:4;10707:1;10700:15;10726:135;10765:3;-1:-1:-1;;10786:17:504;;10783:43;;;10806:18;;:::i;:::-;-1:-1:-1;10853:1:504;10842:13;;10726:135::o;10866:794::-;11088:2;11100:21;;;11073:18;;11156:22;;;11040:4;11235:6;11209:2;11194:18;;11040:4;11269:304;11283:6;11280:1;11277:13;11269:304;;;11358:6;11345:20;11378:31;11403:5;11378:31;:::i;:::-;-1:-1:-1;;;;;11434:31:504;11422:44;;11489:4;11548:15;;;;11513:12;;;;11462:1;11298:9;11269:304;;;11273:3;11590;11582:11;;;;11645:6;11638:14;11631:22;11624:4;11613:9;11609:20;11602:52;10866:794;;;;;;:::o;11665:251::-;11735:6;11788:2;11776:9;11767:7;11763:23;11759:32;11756:52;;;11804:1;11801;11794:12;11756:52;11836:9;11830:16;11855:31;11880:5;11855:31;:::i;11921:245::-;11988:6;12041:2;12029:9;12020:7;12016:23;12012:32;12009:52;;;12057:1;12054;12047:12;12009:52;12089:9;12083:16;12108:28;12130:5;12108:28;:::i;13348:457::-;13533:3;13571:6;13565:13;13587:53;13633:6;13628:3;13621:4;13613:6;13609:17;13587:53;:::i;:::-;13662:16;;13715:6;13707;13662:16;13687:35;13779:1;13741:18;;13768:13;;;-1:-1:-1;13741:18:504;;13348:457;-1:-1:-1;;;13348:457:504:o;13810:482::-;14052:26;14048:31;14039:6;14035:2;14031:15;14027:53;14022:3;14015:66;13997:3;14110:6;14104:13;14126:62;14181:6;14176:2;14171:3;14167:12;14160:4;14152:6;14148:17;14126:62;:::i;:::-;14247:2;14207:16;;14239:11;;;14232:27;;;;14283:2;14275:11;;13810:482;-1:-1:-1;;;13810:482:504:o;14297:184::-;14367:6;14420:2;14408:9;14399:7;14395:23;14391:32;14388:52;;;14436:1;14433;14426:12;14388:52;-1:-1:-1;14459:16:504;;14297:184;-1:-1:-1;14297:184:504:o;17331:380::-;17410:1;17406:12;;;;17453;;;17474:61;;17528:4;17520:6;17516:17;17506:27;;17474:61;17581:2;17573:6;17570:14;17550:18;17547:38;17544:161;;;17627:10;17622:3;17618:20;17615:1;17608:31;17662:4;17659:1;17652:15;17690:4;17687:1;17680:15;17544:161;;17331:380;;;:::o;18419:125::-;18459:4;18487:1;18484;18481:8;18478:34;;;18492:18;;:::i;:::-;-1:-1:-1;18529:9:504;;18419:125::o;18549:127::-;18610:10;18605:3;18601:20;18598:1;18591:31;18641:4;18638:1;18631:15;18665:4;18662:1;18655:15;22241:320;22442:6;22431:9;22424:25;22485:2;22480;22469:9;22465:18;22458:30;22405:4;22505:50;22551:2;22540:9;22536:18;22528:6;22505:50;:::i;22566:407::-;22768:2;22750:21;;;22807:2;22787:18;;;22780:30;22846:34;22841:2;22826:18;;22819:62;-1:-1:-1;;;22912:2:504;22897:18;;22890:41;22963:3;22948:19;;22566:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_deprecatePool(address)": "9b29177f", + "_deprecatePool(uint256)": "b5f3f640", + "_editAdminWhitelist(address[],bool)": "0a83d1b0", + "_editDeployerWhitelist(address[],bool)": "a155497c", + "_setDeployerWhitelistEnforcement(bool)": "04f03c6f", + "_setPendingOwner(address)": "6e96dfd7", + "adminWhitelist(address)": "43e20a1d", + "deployPool(string,address,bytes,bool,uint256,uint256,address)": "58b896d3", + "deployerWhitelist(address)": "a970e76c", + "enforceDeployerWhitelist()": "26bb81d7", + "getActivePools()": "8ec08354", + "getAllPools()": "d88ff1f4", + "getPoolsByAccount(address)": "a3ed91c6", + "getPoolsOfUser(address)": "f348960d", + "getPublicPools()": "4ae26ea1", + "getPublicPoolsByVerification(bool)": "218a3bbe", + "getVerifiedPoolsOfWhitelistedAccount(address)": "448ca558", + "initialize(bool,address[])": "b86579d4", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "poolExists(address)": "1e1c6a07", + "pools(uint256)": "ac4afa38", + "poolsCounter()": "5d0eb31a", + "renounceOwnership()": "715018a6", + "setPoolName(uint256,string)": "20c32bfe", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/PoolDirectory_Proxy.json b/packages/sdk/deployments/bob/PoolDirectory_Proxy.json new file mode 100644 index 000000000..d3e6006b7 --- /dev/null +++ b/packages/sdk/deployments/bob/PoolDirectory_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "transactionIndex": 1, + "gasUsed": "775682", + "logsBloom": "0x00000000000000000000000000000000400000000008000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000000000020000000000000000000800000000800000000000000000400000400000000000200000000000000000000000000000000080000000000000c00000000000020000000000000000000404000010000000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d", + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000e451047f3a6c8dc595cf305dc21f32add5ff42fd" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + }, + { + "transactionIndex": 1, + "blockNumber": 3777847, + "transactionHash": "0xc902dc9c2d39c44bd277bceab352392ab2683963f9d67b113a2a301911443e28", + "address": "0x7AABEfD7d8d2576Dc932EbE97bE8Ba90299a4ee4", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0x8e709cbb46e9e4fba5e67230fedde820e5e9c2b6d070eb7d0d8c66237773b85d" + } + ], + "blockNumber": 3777847, + "cumulativeGasUsed": "827909", + "status": 1, + "byzantium": true + }, + "args": [ + "0xe451047f3A6C8Dc595Cf305DC21F32adD5fF42Fd", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xb86579d4000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000400000000000000000000000000000000000000000000000000000000000000000" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/PoolLens.json b/packages/sdk/deployments/bob/PoolLens.json new file mode 100644 index 000000000..799ad39c6 --- /dev/null +++ b/packages/sdk/deployments/bob/PoolLens.json @@ -0,0 +1,2751 @@ +{ + "address": "0xEF0E186A4E4E3E66601ae9A3e670491Ca7772f5F", + "abi": [ + { + "type": "function", + "name": "directory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract PoolDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBorrowCapsDataForAsset", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "collateral", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "borrowCapsPerCollateral", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "collateralBlacklisted", + "type": "bool[]", + "internalType": "bool[]" + }, + { + "name": "totalBorrowCap", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "nonWhitelistedTotalBorrows", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getBorrowCapsForAsset", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "collateral", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "borrowCapsPerCollateral", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "collateralBlacklisted", + "type": "bool[]", + "internalType": "bool[]" + }, + { + "name": "totalBorrowCap", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHealthFactor", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + }, + { + "name": "pool", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getHealthFactorHypothetical", + "inputs": [ + { + "name": "pool", + "type": "address", + "internalType": "contract IonicComptroller" + }, + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenModify", + "type": "address", + "internalType": "address" + }, + { + "name": "redeemTokens", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "repayAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getPoolAssetsByUser", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + }, + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolLens.PoolAsset[]", + "components": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "underlyingToken", + "type": "address", + "internalType": "address" + }, + { + "name": "underlyingName", + "type": "string", + "internalType": "string" + }, + { + "name": "underlyingSymbol", + "type": "string", + "internalType": "string" + }, + { + "name": "underlyingDecimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "supplyRatePerBlock", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowRatePerBlock", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalBorrow", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "supplyBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "liquidity", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "membership", + "type": "bool", + "internalType": "bool" + }, + { + "name": "exchangeRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "oracle", + "type": "address", + "internalType": "address" + }, + { + "name": "collateralFactor", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reserveFactor", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adminFee", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "ionicFee", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowGuardianPaused", + "type": "bool", + "internalType": "bool" + }, + { + "name": "mintGuardianPaused", + "type": "bool", + "internalType": "bool" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPoolAssetsWithData", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolLens.PoolAsset[]", + "components": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "underlyingToken", + "type": "address", + "internalType": "address" + }, + { + "name": "underlyingName", + "type": "string", + "internalType": "string" + }, + { + "name": "underlyingSymbol", + "type": "string", + "internalType": "string" + }, + { + "name": "underlyingDecimals", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "supplyRatePerBlock", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowRatePerBlock", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalBorrow", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "supplyBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowBalance", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "liquidity", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "membership", + "type": "bool", + "internalType": "bool" + }, + { + "name": "exchangeRate", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingPrice", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "oracle", + "type": "address", + "internalType": "address" + }, + { + "name": "collateralFactor", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "reserveFactor", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "adminFee", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "ionicFee", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "borrowGuardianPaused", + "type": "bool", + "internalType": "bool" + }, + { + "name": "mintGuardianPaused", + "type": "bool", + "internalType": "bool" + } + ] + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPoolSummary", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "", + "type": "bool", + "internalType": "bool" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPoolsByAccountWithData", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolLens.IonicPoolData[]", + "components": [ + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalBorrow", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingTokens", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingSymbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "whitelistedAdmin", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "name": "", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPoolsOIonicrWithData", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolLens.IonicPoolData[]", + "components": [ + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalBorrow", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingTokens", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingSymbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "whitelistedAdmin", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "name": "", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPublicPoolsByVerificationWithData", + "inputs": [ + { + "name": "whitelistedAdmin", + "type": "bool", + "internalType": "bool" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolLens.IonicPoolData[]", + "components": [ + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalBorrow", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingTokens", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingSymbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "whitelistedAdmin", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "name": "", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPublicPoolsWithData", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolLens.IonicPoolData[]", + "components": [ + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalBorrow", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingTokens", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingSymbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "whitelistedAdmin", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "name": "", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getSupplyCapsDataForPool", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getSupplyCapsForPool", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWhitelistedPoolsByAccount", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getWhitelistedPoolsByAccountWithData", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolDirectory.Pool[]", + "components": [ + { + "name": "name", + "type": "string", + "internalType": "string" + }, + { + "name": "creator", + "type": "address", + "internalType": "address" + }, + { + "name": "comptroller", + "type": "address", + "internalType": "address" + }, + { + "name": "blockPosted", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "timestampPosted", + "type": "uint256", + "internalType": "uint256" + } + ] + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolLens.IonicPoolData[]", + "components": [ + { + "name": "totalSupply", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "totalBorrow", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "underlyingTokens", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "underlyingSymbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "whitelistedAdmin", + "type": "bool", + "internalType": "bool" + } + ] + }, + { + "name": "", + "type": "bool[]", + "internalType": "bool[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_directory", + "type": "address", + "internalType": "contract PoolDirectory" + }, + { + "name": "_name", + "type": "string", + "internalType": "string" + }, + { + "name": "_symbol", + "type": "string", + "internalType": "string" + }, + { + "name": "_hardcodedAddresses", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "_hardcodedNames", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "_hardcodedSymbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "_uniswapLPTokenNames", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "_uniswapLPTokenSymbols", + "type": "string[]", + "internalType": "string[]" + }, + { + "name": "_uniswapLPTokenDisplayNames", + "type": "string[]", + "internalType": "string[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "symbol", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "view" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "error", + "name": "ComptrollerError", + "inputs": [ + { + "name": "errCode", + "type": "uint256", + "internalType": "uint256" + } + ] + } + ], + "transactionHash": "0x0b2110a2024b21889f59514affa5e1bf22f95bf8917123b49503a33171c4224f", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xEF0E186A4E4E3E66601ae9A3e670491Ca7772f5F", + "transactionIndex": 1, + "gasUsed": "3887650", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xa17cc58181db0b0c85a71b13e4dfe4a224f745c457ba4a6f2705aceb27b0c762", + "transactionHash": "0x0b2110a2024b21889f59514affa5e1bf22f95bf8917123b49503a33171c4224f", + "logs": [], + "blockNumber": 3778051, + "cumulativeGasUsed": "3939877", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint256", + "name": "errCode", + "type": "uint256" + } + ], + "type": "error", + "name": "ComptrollerError" + }, + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "directory", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowCapsDataForAsset", + "outputs": [ + { + "internalType": "address[]", + "name": "collateral", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "borrowCapsPerCollateral", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "collateralBlacklisted", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "totalBorrowCap", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "nonWhitelistedTotalBorrows", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getBorrowCapsForAsset", + "outputs": [ + { + "internalType": "address[]", + "name": "collateral", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "borrowCapsPerCollateral", + "type": "uint256[]" + }, + { + "internalType": "bool[]", + "name": "collateralBlacklisted", + "type": "bool[]" + }, + { + "internalType": "uint256", + "name": "totalBorrowCap", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + }, + { + "internalType": "contract IonicComptroller", + "name": "pool", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getHealthFactor", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "pool", + "type": "address" + }, + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "address", + "name": "cTokenModify", + "type": "address" + }, + { + "internalType": "uint256", + "name": "redeemTokens", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowAmount", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "repayAmount", + "type": "uint256" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getHealthFactorHypothetical", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolAssetsByUser", + "outputs": [ + { + "internalType": "struct PoolLens.PoolAsset[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + }, + { + "internalType": "string", + "name": "underlyingName", + "type": "string" + }, + { + "internalType": "string", + "name": "underlyingSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "underlyingDecimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "membership", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "exchangeRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "collateralFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ionicFee", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "borrowGuardianPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "mintGuardianPaused", + "type": "bool" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolAssetsWithData", + "outputs": [ + { + "internalType": "struct PoolLens.PoolAsset[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "underlyingToken", + "type": "address" + }, + { + "internalType": "string", + "name": "underlyingName", + "type": "string" + }, + { + "internalType": "string", + "name": "underlyingSymbol", + "type": "string" + }, + { + "internalType": "uint256", + "name": "underlyingDecimals", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowRatePerBlock", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "supplyBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "borrowBalance", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "liquidity", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "membership", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "exchangeRate", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "underlyingPrice", + "type": "uint256" + }, + { + "internalType": "address", + "name": "oracle", + "type": "address" + }, + { + "internalType": "uint256", + "name": "collateralFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "reserveFactor", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "adminFee", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "ionicFee", + "type": "uint256" + }, + { + "internalType": "bool", + "name": "borrowGuardianPaused", + "type": "bool" + }, + { + "internalType": "bool", + "name": "mintGuardianPaused", + "type": "bool" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolSummary", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolsByAccountWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPoolsOIonicrWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPublicPoolsByVerificationWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "getPublicPoolsWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSupplyCapsDataForPool", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getSupplyCapsForPool", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getWhitelistedPoolsByAccount", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getWhitelistedPoolsByAccountWithData", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "struct PoolDirectory.Pool[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "string", + "name": "name", + "type": "string" + }, + { + "internalType": "address", + "name": "creator", + "type": "address" + }, + { + "internalType": "address", + "name": "comptroller", + "type": "address" + }, + { + "internalType": "uint256", + "name": "blockPosted", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "timestampPosted", + "type": "uint256" + } + ] + }, + { + "internalType": "struct PoolLens.IonicPoolData[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "uint256", + "name": "totalSupply", + "type": "uint256" + }, + { + "internalType": "uint256", + "name": "totalBorrow", + "type": "uint256" + }, + { + "internalType": "address[]", + "name": "underlyingTokens", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "underlyingSymbols", + "type": "string[]" + }, + { + "internalType": "bool", + "name": "whitelistedAdmin", + "type": "bool" + } + ] + }, + { + "internalType": "bool[]", + "name": "", + "type": "bool[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_directory", + "type": "address" + }, + { + "internalType": "string", + "name": "_name", + "type": "string" + }, + { + "internalType": "string", + "name": "_symbol", + "type": "string" + }, + { + "internalType": "address[]", + "name": "_hardcodedAddresses", + "type": "address[]" + }, + { + "internalType": "string[]", + "name": "_hardcodedNames", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_hardcodedSymbols", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenNames", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenSymbols", + "type": "string[]" + }, + { + "internalType": "string[]", + "name": "_uniswapLPTokenDisplayNames", + "type": "string[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "symbol", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getBorrowCapsDataForAsset(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getBorrowCapsForAsset(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPoolAssetsByUser(address,address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getPoolAssetsWithData(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state.", + "params": { + "comptroller": "The Comptroller proxy contract of the Ionic pool." + }, + "returns": { + "_0": "An array of Ionic pool assets." + } + }, + "getPoolsByAccountWithData(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getPoolsOIonicrWithData(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getPublicPoolsByVerificationWithData(bool)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getPublicPoolsWithData()": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getSupplyCapsDataForPool(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getSupplyCapsForPool(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getWhitelistedPoolsByAccount(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getWhitelistedPoolsByAccountWithData(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "initialize(address,string,string,address[],string[],string[],string[],string[],string[])": { + "params": { + "_directory": "The PoolDirectory", + "_hardcodedAddresses": "Underlying token addresses for a token like maker which are DSToken and/or use bytes32 for `symbol`", + "_hardcodedNames": "Harcoded name for these tokens", + "_hardcodedSymbols": "Harcoded symbol for these tokens", + "_name": "Name for the nativeToken", + "_symbol": "Symbol for the nativeToken", + "_uniswapLPTokenDisplayNames": "Harcoded display names for underlying uniswap LpToken", + "_uniswapLPTokenNames": "Harcoded names for underlying uniswap LpToken", + "_uniswapLPTokenSymbols": "Harcoded symbols for underlying uniswap LpToken" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "directory()": { + "notice": "`PoolDirectory` contract object." + }, + "getBorrowCapsDataForAsset(address)": { + "notice": "returns the total borrow cap, the per collateral borrowing cap/blacklist for the asset and the total non-whitelist borrows" + }, + "getBorrowCapsForAsset(address)": { + "notice": "returns the total borrow cap and the per collateral borrowing cap/blacklist for the asset" + }, + "getPoolAssetsByUser(address,address)": { + "notice": "Returns arrays of PoolAsset for a specific user" + }, + "getPoolAssetsWithData(address)": { + "notice": "Returns the assets of the specified Ionic pool." + }, + "getPoolSummary(address)": { + "notice": "Returns total supply balance (in ETH), total borrow balance (in ETH), underlying token addresses, and underlying token symbols of a Ionic pool." + }, + "getPoolsByAccountWithData(address)": { + "notice": "Returns arrays of the indexes of Ionic pools created by `account`, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "getPoolsOIonicrWithData(address)": { + "notice": "Returns arrays of the indexes of Ionic pools used by `user`, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "getPublicPoolsByVerificationWithData(bool)": { + "notice": "Returns arrays of all whitelisted public Ionic pool indexes, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "getPublicPoolsWithData()": { + "notice": "Returns arrays of all public Ionic pool indexes, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "getSupplyCapsDataForPool(address)": { + "notice": "returns the total supply cap for each asset in the pool and the total non-whitelist supplied assets" + }, + "getSupplyCapsForPool(address)": { + "notice": "returns the total supply cap for each asset in the pool" + }, + "getWhitelistedPoolsByAccount(address)": { + "notice": "Returns arrays of Ionic pool indexes and data with a whitelist containing `account`. Note that the whitelist does not have to be enforced." + }, + "getWhitelistedPoolsByAccountWithData(address)": { + "notice": "Returns arrays of the indexes of Ionic pools with a whitelist containing `account`, data, total supply balances (in ETH), total borrow balances (in ETH), arrays of underlying token addresses, arrays of underlying asset symbols, and booleans indicating if retrieving each pool's data failed." + }, + "initialize(address,string,string,address[],string[],string[],string[],string[],string[])": { + "notice": "Initialize the `PoolDirectory` contract object." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/PoolLens.sol": "PoolLens" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/PoolDirectory.sol": { + "keccak256": "0xd3d28cd044a0205a86f0c2d82021a36018ec4b0e95f72064c92bcad99f84f6c8", + "urls": [ + "bzz-raw://0c8ab6e3f922b9165cae038507497be2aed81df002ffe7921e0aa1f10f690531", + "dweb:/ipfs/QmNpfDhHaVPyxXZDY7Si2Bpidneh6Ckr8C4dGhRmA9pEEa" + ], + "license": "UNLICENSED" + }, + "contracts/PoolLens.sol": { + "keccak256": "0xc543340778024b4d9b16e08b31139196fa60282270145713862864e318286da5", + "urls": [ + "bzz-raw://b2cbc0ebb7655a151b5da18e9530f38fc54dda463db478dad0b749af02284a85", + "dweb:/ipfs/QmXmN3fAtHg6WZg1oXxeZZVXR3xB5mkzYpMSGwQp3SDMhN" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x1e1f9dda1735929b60cf601e3b39b8394ceb284a582ab4f0d0614b76a84fc4bd", + "urls": [ + "bzz-raw://1670338a3d0c64b13c2e623acaad068ccb6a7f7650d5d43d555099071bcfd03d", + "dweb:/ipfs/QmSMje4u1Zn7kf8DAybkLs8GPmcggTukTq754RE9eq99YR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x8748b7e74b8f789617f0b387cd2e2259a0fa3639d54234d7e6c99cb3eae6fc9a", + "urls": [ + "bzz-raw://a4e46033c3a440f48bfe45adb3b06db2b5870e3179f5170cd708c3030d240f39", + "dweb:/ipfs/QmPQZwCprBqi8BASL8nJpP63BpFGUS48ioyhS29GSAWp2r" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50614558806100206000396000f3fe608060405234801561001057600080fd5b50600436106101215760003560e01c806370733375116100ad578063c3530a6311610071578063c3530a63146102ac578063c41c2f24146102cd578063d0a164fb146102f8578063d64996e514610300578063ef88b53c1461031357600080fd5b8063707333751461022a578063798b97801461023d57806395d89b411461025e578063a079548714610266578063a505596a1461028857600080fd5b806327e16c1f116100f457806327e16c1f146101a85780633a1eb656146101bb57806351678684146101d057806357c89a7d146101f357806359d2fea61461020657600080fd5b806306fdde03146101265780630c5eb5a4146101445780631568683a146101645780631bb998ba14610187575b600080fd5b61012e610326565b60405161013b919061358e565b60405180910390f35b6101576101523660046135b9565b6103b4565b60405161013b91906135f2565b61017761017236600461377f565b61043c565b60405161013b9493929190613842565b61019a61019536600461388d565b61052f565b60405190815260200161013b565b6101576101b636600461377f565b610653565b6101ce6101c9366004613afe565b6106cb565b005b6101e36101de36600461377f565b610b3b565b60405161013b9493929190613d20565b61019a6102013660046135b9565b610bde565b61021961021436600461377f565b610bf7565b60405161013b959493929190613e00565b6101e361023836600461377f565b61135a565b61025061024b36600461377f565b61136c565b60405161013b929190613e46565b61012e61158f565b61027961027436600461377f565b61159c565b60405161013b93929190613e74565b61029b61029636600461377f565b61197c565b60405161013b959493929190613ead565b6102bf6102ba36600461377f565b611b68565b60405161013b929190613efb565b6005546102e0906001600160a01b031681565b6040516001600160a01b03909116815260200161013b565b6101e3611ed0565b6101e361030e366004613f2e565b611f75565b6101e361032136600461377f565b611fb5565b6001805461033390613f4b565b80601f016020809104026020016040519081016040528092919081815260200182805461035f90613f4b565b80156103ac5780601f10610381576101008083540402835291602001916103ac565b820191906000526020600020905b81548152906001019060200180831161038f57829003601f168201915b505050505081565b604051632aff3bff60e21b81526001600160a01b03828116600483015260609160009161043491869182169063abfceffc90602401600060405180830381865afa158015610406573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261042e9190810190613f86565b85611ff5565b949350505050565b6060806060600080856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a6919061401f565b90506104b28682612c8b565b60405163252c221960e11b81526001600160a01b038a81166004830152939850919650945090821690634a58443290602401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610525919061403c565b9150509193509193565b604051637e361b1160e01b81526001600160a01b03868116600483015285811660248301526044820185905260648201849052608482018390526000918291829182918291908c1690637e361b119060a401608060405180830381865afa15801561059e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c29190614055565b9350935093509350836000146105f35760405163255a0eef60e11b8152600481018590526024015b60405180910390fd5b801561062a5761060381846140a1565b61061584670de0b6b3a76400006140b9565b61061f91906140d8565b945050505050610649565b81831161063f57600019945050505050610649565b61060382846140fa565b9695505050505050565b60606106c582836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106bf9190810190613f86565b33611ff5565b92915050565b600054610100900460ff16158080156106eb5750600054600160ff909116105b806107055750303b158015610705575060005460ff166001145b6107685760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105ea565b6000805460ff19166001179055801561078b576000805461ff0019166101001790555b6001600160a01b038a166107fc5760405162461bcd60e51b815260206004820152603260248201527f506f6f6c4469726563746f727920696e7374616e63652063616e6e6f74206265604482015271103a3432903d32b9379030b2323932b9b99760711b60648201526084016105ea565b8551875114801561080e575084518751145b6108695760405162461bcd60e51b815260206004820152602660248201527f48617264636f64656420616464726573736573206c656e67746873206e6f742060448201526532b8bab0b61760d11b60648201526084016105ea565b8251845114801561087b575081518451145b6108d95760405162461bcd60e51b815260206004820152602960248201527f556e6973776170204c5020746f6b656e206e616d6573206c656e67746873206e60448201526837ba1032b8bab0b61760b91b60648201526084016105ea565b600580546001600160a01b0319166001600160a01b038c1617905588516109079060019060208c01906133ca565b50875161091b9060029060208b01906133ca565b5060005b87518110156109f957604051806040016040528088838151811061094557610945614111565b6020026020010151815260200187838151811061096457610964614111565b6020026020010151815250600360008a848151811061098557610985614111565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000190805190602001906109c99291906133ca565b5060208281015180516109e292600185019201906133ca565b5090505080806109f190614127565b91505061091f565b5060005b8451811015610ae85760046040518060600160405280878481518110610a2557610a25614111565b60200260200101518152602001868481518110610a4457610a44614111565b60200260200101518152602001858481518110610a6357610a63614111565b602090810291909101810151909152825460018101845560009384529281902082518051939460030290910192610a9d92849201906133ca565b506020828101518051610ab692600185019201906133ca565b5060408201518051610ad29160028401916020909101906133ca565b5050508080610ae090614127565b9150506109fd565b508015610b2f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6005546040516351f6c8e360e11b81526001600160a01b03838116600483015260609283928392839260009283929091169063a3ed91c6906024015b600060405180830381865afa158015610b94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bbc919081019061427c565b91509150600080610bcc83612f6e565b949a9399509750929550909350505050565b6000610bf0828460008060008061052f565b9392505050565b60008060608060008060009050600080886001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c6d9190810190613f86565b9050600081516001600160401b03811115610c8a57610c8a613902565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b509050600082516001600160401b03811115610cd157610cd1613902565b604051908082528060200260200182016040528015610d0457816020015b6060815260200190600190039081610cef5790505b50905060008b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b919061401f565b905060005b8451811015611252576000858281518110610d8d57610d8d614111565b6020026020010151905060008e6001600160a01b0316638e8f294b836040518263ffffffff1660e01b8152600401610dd491906001600160a01b0391909116815260200190565b6040805180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e149190614342565b50905080610e23575050611240565b816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e87919061403c565b506000826001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eec919061403c565b90506000836001600160a01b0316639826394b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f52919061403c565b846001600160a01b03166361feacff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb4919061403c565b856001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611016919061403c565b61102091906140a1565b61102a91906140a1565b82856001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d919061403c565b61109791906140a1565b6110a191906140fa565b60405163fc57d4df60e01b81526001600160a01b03868116600483015291925060009188169063fc57d4df90602401602060405180830381865afa1580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611111919061403c565b9050670de0b6b3a764000061112682856140b9565b61113091906140d8565b61113a908d6140a1565b9b50670de0b6b3a764000061114f82846140b9565b61115991906140d8565b611163908c6140a1565b9a50846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c7919061401f565b8987815181106111d9576111d9614111565b60200260200101906001600160a01b031690816001600160a01b03168152505061121b89878151811061120e5761120e614111565b6020026020010151613175565b905088878151811061122f5761122f614111565b602002602001018190525050505050505b8061124a81614127565b915050610d70565b506000600560009054906101000a90046001600160a01b03166001600160a01b03166343e20a1d8e6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112db919061401f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561131f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113439190614370565b959d969c50929a5090985092965092945050505050565b606080606080600080610bbc87611b68565b6060806000836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156113af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113d79190810190613f86565b9050600081516001600160401b038111156113f4576113f4613902565b60405190808252806020026020018201604052801561141d578160200160208202803683370190505b509050600082516001600160401b0381111561143b5761143b613902565b604051908082528060200260200182016040528015611464578160200160208202803683370190505b50905060005b83518110156115835783818151811061148557611485614111565b602002602001015183828151811061149f5761149f614111565b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b03166302c3bcbb8483815181106114e0576114e0614111565b60200260200101516040518263ffffffff1660e01b815260040161151391906001600160a01b0391909116815260200190565b602060405180830381865afa158015611530573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611554919061403c565b82828151811061156657611566614111565b60209081029190910101528061157b81614127565b91505061146a565b50909590945092505050565b6002805461033390613f4b565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156115e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116099190810190613f86565b9050600081516001600160401b0381111561162657611626613902565b60405190808252806020026020018201604052801561164f578160200160208202803683370190505b509050600082516001600160401b0381111561166d5761166d613902565b604051908082528060200260200182016040528015611696578160200160208202803683370190505b509050600083516001600160401b038111156116b4576116b4613902565b6040519080825280602002602001820160405280156116dd578160200160208202803683370190505b50905060005b845181101561196d578481815181106116fe576116fe614111565b602002602001015184828151811061171857611718614111565b60200260200101906001600160a01b031690816001600160a01b031681525050886001600160a01b03166302c3bcbb85838151811061175957611759614111565b60200260200101516040518263ffffffff1660e01b815260040161178c91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156117a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cd919061403c565b8382815181106117df576117df614111565b60200260200101818152505060008582815181106117ff576117ff614111565b60200260200101516001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611844573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611868919061403c565b905060008a6001600160a01b031663fb6243fa87858151811061188d5761188d614111565b60200260200101516040518263ffffffff1660e01b81526004016118c091906001600160a01b0391909116815260200190565b602060405180830381865afa1580156118dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611901919061403c565b905081811061192f57600084848151811061191e5761191e614111565b602002602001018181525050611958565b61193981836140fa565b84848151811061194b5761194b614111565b6020026020010181815250505b5050808061196590614127565b9150506116e3565b50919790965090945092505050565b60608060606000806000866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e8919061401f565b90506119f48782612c8b565b60405163252c221960e11b81526001600160a01b038b81166004830152939950919750955090821690634a58443290602401602060405180830381865afa158015611a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a67919061403c565b92506000876001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acd919061403c565b604051631d3965af60e11b81526001600160a01b038a81166004830152919250600091841690633a72cb5e90602401602060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3d919061403c565b9050818110611b4f5760009350611b5c565b611b5981836140fa565b93505b50505091939590929450565b6060806000600560009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015611bc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611be8919081019061427c565b9150506000805b8251811015611cbc576000838281518110611c0c57611c0c614111565b6020026020010151604001519050806001600160a01b0316639b19251a886040518263ffffffff1660e01b8152600401611c5591906001600160a01b0391909116815260200190565b602060405180830381865afa158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190614370565b15611ca95782611ca581614127565b9350505b5080611cb481614127565b915050611bef565b506000816001600160401b03811115611cd757611cd7613902565b604051908082528060200260200182016040528015611d00578160200160208202803683370190505b5090506000826001600160401b03811115611d1d57611d1d613902565b604051908082528060200260200182016040528015611d9257816020015b611d7f6040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611d3b5790505b5090506000805b8551811015611ec2576000868281518110611db657611db6614111565b6020026020010151604001519050806001600160a01b0316639b19251a8b6040518263ffffffff1660e01b8152600401611dff91906001600160a01b0391909116815260200190565b602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190614370565b15611eaf5781858481518110611e5857611e58614111565b602002602001018181525050868281518110611e7657611e76614111565b6020026020010151848481518110611e9057611e90614111565b60200260200101819052508280611ea690614127565b93505050611ec2565b5080611eba81614127565b915050611d99565b509197909650945050505050565b606080606080600080600560009054906101000a90046001600160a01b03166001600160a01b0316634ae26ea16040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f54919081019061427c565b91509150600080611f6483612f6e565b949993985096509294509092505050565b6005546040516310c51ddf60e11b8152821515600482015260609182918291829160009182916001600160a01b039091169063218a3bbe90602401610b77565b60055460405163f348960d60e01b81526001600160a01b03838116600483015260609283928392839260009283929091169063f348960d90602401610b77565b60606000805b84518110156120c4576000866001600160a01b0316638e8f294b87848151811061202757612027614111565b60200260200101516040518263ffffffff1660e01b815260040161205a91906001600160a01b0391909116815260200190565b6040805180830381865afa158015612076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209a9190614342565b50905080156120b157826120ad81614127565b9350505b50806120bc81614127565b915050611ffb565b506000816001600160401b038111156120df576120df613902565b60405190808252806020026020018201604052801561211857816020015b61210561344e565b8152602001906001900390816120fd5790505b509050600080876001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612180919061401f565b905060005b8751811015612c7e576000808a6001600160a01b0316638e8f294b8b85815181106121b2576121b2614111565b60200260200101516040518263ffffffff1660e01b81526004016121e591906001600160a01b0391909116815260200190565b6040805180830381865afa158015612201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122259190614342565b9150915081612235575050612c6c565b61223d61344e565b60008b858151811061225157612251614111565b6020908102919091018101516001600160a01b0381168085526040805163a6afed9560e01b81529051929450909263a6afed959260048084019382900301816000875af11580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca919061403c565b50806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232d919061401f565b6001600160a01b03166020830181905261234681613175565b84604001856060018290528290525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b8919061438d565b60ff1660808401526040516370a0823160e01b81526001600160a01b038d811660048301528216906370a0823190602401602060405180830381865afa158015612406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242a919061403c565b8360a0018181525050816001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612471573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612495919061403c565b8360c0018181525050816001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612500919061403c565b8360e0018181525050816001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256b919061403c565b83610180018181525050816001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d7919061403c565b83610120018181525050816001600160a01b0316639826394b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612643919061403c565b826001600160a01b03166361feacff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a5919061403c565b836001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612707919061403c565b61271191906140a1565b61271b91906140a1565b83610120015184610180015161273191906140a1565b61273b91906140fa565b610100840152604051633af9e66960e01b81526001600160a01b038d81166004830152831690633af9e66990602401602060405180830381865afa158015612787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ab919061403c565b6101408401526040516305eff7ef60e21b81526001600160a01b038d811660048301528316906317bfdfbc90602401602060405180830381865afa1580156127f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281b919061403c565b61016084015260405163929fe9a160e01b81526001600160a01b038d8116600483015283811660248301528f169063929fe9a190604401602060405180830381865afa15801561286f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128939190614370565b15156101a08401526040805163bd6d894d60e01b815290516001600160a01b0384169163bd6d894d9160048083019260209291908290030181865afa1580156128e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612904919061403c565b6101c084015260208301516040516315d5220f60e31b81526001600160a01b0391821660048201529088169063aea9107890602401602060405180830381865afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a919061403c565b6101e08401526001600160a01b038781166102008501819052602085015160405163addd509960e01b8152921660048301529063addd509990602401602060405180830381865afa9250505080156129ef575060408051601f3d908101601f191682019092526129ec9181019061401f565b60015b6129f857612a08565b6001600160a01b03166102008401525b8383610220018181525050816001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a75919061403c565b83610240018181525050816001600160a01b0316638d02d9a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae1919061403c565b83610260018181525050816001600160a01b031663c3bf11cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4d919061403c565b610280840152604051636d154ea560e01b81526001600160a01b0383811660048301528f1690636d154ea590602401602060405180830381865afa158015612b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbd9190614370565b15156102a084015260405163731f0c2b60e01b81526001600160a01b0383811660048301528f169063731f0c2b90602401602060405180830381865afa158015612c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2f9190614370565b15156102c0840152885183908a908a908110612c4d57612c4d614111565b60200260200101819052508780612c6390614127565b98505050505050505b80612c7681614127565b915050612185565b5091979650505050505050565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612cd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cf89190810190613f86565b905080516001600160401b03811115612d1357612d13613902565b604051908082528060200260200182016040528015612d3c578160200160208202803683370190505b50935080516001600160401b03811115612d5857612d58613902565b604051908082528060200260200182016040528015612d81578160200160208202803683370190505b50925080516001600160401b03811115612d9d57612d9d613902565b604051908082528060200260200182016040528015612dc6578160200160208202803683370190505b50915060005b8151811015612f65576000828281518110612de957612de9614111565b60200260200101519050876001600160a01b0316816001600160a01b031614612f525780868381518110612e1f57612e1f614111565b6001600160a01b03928316602091820292909201015260405163940cd6f160e01b8152898216600482015282821660248201529088169063940cd6f190604401602060405180830381865afa158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea0919061403c565b858381518110612eb257612eb2614111565b6020908102919091010152604051631c819e4360e01b81526001600160a01b0389811660048301528281166024830152881690631c819e4390604401602060405180830381865afa158015612f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2f9190614370565b848381518110612f4157612f41614111565b911515602092830291909101909101525b5080612f5d81614127565b915050612dcc565b50509250925092565b606080600083516001600160401b03811115612f8c57612f8c613902565b604051908082528060200260200182016040528015612ff157816020015b612fde6040518060a00160405280600081526020016000815260200160608152602001606081526020016000151581525090565b815260200190600190039081612faa5790505b509050600084516001600160401b0381111561300f5761300f613902565b604051908082528060200260200182016040528015613038578160200160208202803683370190505b50905060005b855181101561316a57306001600160a01b03166359d2fea687838151811061306857613068614111565b6020026020010151604001516040518263ffffffff1660e01b815260040161309f91906001600160a01b0391909116815260200190565b6000604051808303816000875af19250505080156130df57506040513d6000823e601f3d908101601f191682016040526130dc919081019061442f565b60015b61310c5760018282815181106130f7576130f7614111565b91151560209283029190910190910152613158565b6040518060a0016040528086815260200185815260200184815260200183815260200182151581525088878151811061314757613147614111565b602002602001018190525050505050505b8061316281614127565b91505061303e565b509094909350915050565b6001600160a01b0381166000908152600360205260409020600101805460609182916131a090613f4b565b1590506132e6576001600160a01b03831660009081526003602052604090208054600182019082906131d190613f4b565b80601f01602080910402602001604051908101604052809291908181526020018280546131fd90613f4b565b801561324a5780601f1061321f5761010080835404028352916020019161324a565b820191906000526020600020905b81548152906001019060200180831161322d57829003601f168201915b5050505050915080805461325d90613f4b565b80601f016020809104026020016040519081016040528092919081815260200182805461328990613f4b565b80156132d65780601f106132ab576101008083540402835291602001916132d6565b820191906000526020600020905b8154815290600101906020018083116132b957829003601f168201915b5050505050905091509150915091565b60008390506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561332b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133539190810190614517565b90506000826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015613395573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133bd9190810190614517565b9196919550909350505050565b8280546133d690613f4b565b90600052602060002090601f0160209004810192826133f8576000855561343e565b82601f1061341157805160ff191683800117855561343e565b8280016001018555821561343e579182015b8281111561343e578251825591602001919060010190613423565b5061344a92915061351d565b5090565b604051806102e0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b5b8082111561344a576000815560010161351e565b60005b8381101561354d578181015183820152602001613535565b8381111561355c576000848401525b50505050565b6000815180845261357a816020860160208601613532565b601f01601f19169290920160200192915050565b602081526000610bf06020830184613562565b6001600160a01b03811681146135b657600080fd5b50565b600080604083850312156135cc57600080fd5b82356135d7816135a1565b915060208301356135e7816135a1565b809150509250929050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561377157888303603f19018552815180516001600160a01b031684526102e0818901516001600160a01b038116868b01525087820151818987015261366482870182613562565b9150506060808301518683038288015261367e8382613562565b6080858101519089015260a0808601519089015260c0808601519089015260e08086015190890152610100808601519089015261012080860151908901526101408086015190890152610160808601519089015261018080860151908901526101a0808601511515908901526101c080860151908901526101e08086015190890152610200808601516001600160a01b03169089015261022080860151908901526102408086015190890152610260808601519089015261028080860151908901526102a0808601511515908901526102c094850151151594909701939093525050509386019390860190600101613619565b509098975050505050505050565b60006020828403121561379157600080fd5b8135610bf0816135a1565b600081518084526020808501945080840160005b838110156137d55781516001600160a01b0316875295820195908201906001016137b0565b509495945050505050565b600081518084526020808501945080840160005b838110156137d5578151875295820195908201906001016137f4565b600081518084526020808501945080840160005b838110156137d5578151151587529582019590820190600101613824565b608081526000613855608083018761379c565b828103602084015261386781876137e0565b9050828103604084015261387b8186613810565b91505082606083015295945050505050565b60008060008060008060c087890312156138a657600080fd5b86356138b1816135a1565b955060208701356138c1816135a1565b945060408701356138d1816135a1565b959894975094956060810135955060808101359460a0909101359350915050565b80356138fd816135a1565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561393a5761393a613902565b60405290565b604051601f8201601f191681016001600160401b038111828210171561396857613968613902565b604052919050565b60006001600160401b0382111561398957613989613902565b50601f01601f191660200190565b600082601f8301126139a857600080fd5b81356139bb6139b682613970565b613940565b8181528460208386010111156139d057600080fd5b816020850160208301376000918101602001919091529392505050565b60006001600160401b03821115613a0657613a06613902565b5060051b60200190565b600082601f830112613a2157600080fd5b81356020613a316139b6836139ed565b82815260059290921b84018101918181019086841115613a5057600080fd5b8286015b84811015613a74578035613a67816135a1565b8352918301918301613a54565b509695505050505050565b600082601f830112613a9057600080fd5b81356020613aa06139b6836139ed565b82815260059290921b84018101918181019086841115613abf57600080fd5b8286015b84811015613a745780356001600160401b03811115613ae25760008081fd5b613af08986838b0101613997565b845250918301918301613ac3565b60008060008060008060008060006101208a8c031215613b1d57600080fd5b613b268a6138f2565b985060208a01356001600160401b0380821115613b4257600080fd5b613b4e8d838e01613997565b995060408c0135915080821115613b6457600080fd5b613b708d838e01613997565b985060608c0135915080821115613b8657600080fd5b613b928d838e01613a10565b975060808c0135915080821115613ba857600080fd5b613bb48d838e01613a7f565b965060a08c0135915080821115613bca57600080fd5b613bd68d838e01613a7f565b955060c08c0135915080821115613bec57600080fd5b613bf88d838e01613a7f565b945060e08c0135915080821115613c0e57600080fd5b613c1a8d838e01613a7f565b93506101008c0135915080821115613c3157600080fd5b50613c3e8c828d01613a7f565b9150509295985092959850929598565b600081518084526020808501808196508360051b8101915082860160005b85811015612c7e578284038952815160a08151818752613c8e82880182613562565b838901516001600160a01b03908116898b01526040808601519091169089015260608085015190890152608093840151939097019290925250509784019790840190600101613c6c565b600081518084526020808501808196508360051b8101915082860160005b85811015612c7e578284038952613d0e848351613562565b98850198935090840190600101613cf6565b60006080808352613d33818401886137e0565b602084820381860152613d468289613c4e565b91506040858303818701528288518085528385019150838160051b860101848b0160005b83811015613ddb57601f19888403018552815160a0815185528882015189860152878201518189870152613da08287018261379c565b91505060608083015186830382880152613dba8382613cd8565b938d01511515968d0196909652505094870194925090860190600101613d6a565b505088810360608a0152613def818b613810565b9d9c50505050505050505050505050565b85815284602082015260a060408201526000613e1f60a083018661379c565b8281036060840152613e318186613cd8565b91505082151560808301529695505050505050565b604081526000613e59604083018561379c565b8281036020840152613e6b81856137e0565b95945050505050565b606081526000613e87606083018661379c565b8281036020840152613e9981866137e0565b9050828103604084015261064981856137e0565b60a081526000613ec060a083018861379c565b8281036020840152613ed281886137e0565b90508281036040840152613ee68187613810565b60608401959095525050608001529392505050565b604081526000613f0e60408301856137e0565b8281036020840152613e6b8185613c4e565b80151581146135b657600080fd5b600060208284031215613f4057600080fd5b8135610bf081613f20565b600181811c90821680613f5f57607f821691505b60208210811415613f8057634e487b7160e01b600052602260045260246000fd5b50919050565b60006020808385031215613f9957600080fd5b82516001600160401b03811115613faf57600080fd5b8301601f81018513613fc057600080fd5b8051613fce6139b6826139ed565b81815260059190911b82018301908381019087831115613fed57600080fd5b928401925b82841015614014578351614005816135a1565b82529284019290840190613ff2565b979650505050505050565b60006020828403121561403157600080fd5b8151610bf0816135a1565b60006020828403121561404e57600080fd5b5051919050565b6000806000806080858703121561406b57600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601160045260246000fd5b600082198211156140b4576140b461408b565b500190565b60008160001904831182151516156140d3576140d361408b565b500290565b6000826140f557634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561410c5761410c61408b565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561413b5761413b61408b565b5060010190565b600082601f83011261415357600080fd5b81516141616139b682613970565b81815284602083860101111561417657600080fd5b610434826020830160208701613532565b600082601f83011261419857600080fd5b815160206141a86139b6836139ed565b82815260059290921b840181019181810190868411156141c757600080fd5b8286015b84811015613a745780516001600160401b03808211156141eb5760008081fd5b9088019060a0828b03601f19018113156142055760008081fd5b61420d613918565b878401518381111561421f5760008081fd5b61422d8d8a83880101614142565b8252506040925082840151614241816135a1565b81890152606084810151614254816135a1565b93820193909352608084810151938201939093529201519082015283529183019183016141cb565b6000806040838503121561428f57600080fd5b82516001600160401b03808211156142a657600080fd5b818501915085601f8301126142ba57600080fd5b815160206142ca6139b6836139ed565b82815260059290921b840181019181810190898411156142e957600080fd5b948201945b83861015614307578551825294820194908201906142ee565b9188015191965090935050508082111561432057600080fd5b5061432d85828601614187565b9150509250929050565b80516138fd81613f20565b6000806040838503121561435557600080fd5b825161436081613f20565b6020939093015192949293505050565b60006020828403121561438257600080fd5b8151610bf081613f20565b60006020828403121561439f57600080fd5b815160ff81168114610bf057600080fd5b600082601f8301126143c157600080fd5b815160206143d16139b6836139ed565b82815260059290921b840181019181810190868411156143f057600080fd5b8286015b84811015613a745780516001600160401b038111156144135760008081fd5b6144218986838b0101614142565b8452509183019183016143f4565b600080600080600060a0868803121561444757600080fd5b85519450602080870151945060408701516001600160401b038082111561446d57600080fd5b818901915089601f83011261448157600080fd5b815161448f6139b6826139ed565b81815260059190911b8301840190848101908c8311156144ae57600080fd5b938501935b828510156144d55784516144c6816135a1565b825293850193908501906144b3565b60608c015190985094505050808311156144ee57600080fd5b50506144fc888289016143b0565b92505061450b60808701614337565b90509295509295909350565b60006020828403121561452957600080fd5b81516001600160401b0381111561453f57600080fd5b6104348482850161414256fea164736f6c634300080a000a", + "sourceMap": "765:23865:6:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106101215760003560e01c806370733375116100ad578063c3530a6311610071578063c3530a63146102ac578063c41c2f24146102cd578063d0a164fb146102f8578063d64996e514610300578063ef88b53c1461031357600080fd5b8063707333751461022a578063798b97801461023d57806395d89b411461025e578063a079548714610266578063a505596a1461028857600080fd5b806327e16c1f116100f457806327e16c1f146101a85780633a1eb656146101bb57806351678684146101d057806357c89a7d146101f357806359d2fea61461020657600080fd5b806306fdde03146101265780630c5eb5a4146101445780631568683a146101645780631bb998ba14610187575b600080fd5b61012e610326565b60405161013b919061358e565b60405180910390f35b6101576101523660046135b9565b6103b4565b60405161013b91906135f2565b61017761017236600461377f565b61043c565b60405161013b9493929190613842565b61019a61019536600461388d565b61052f565b60405190815260200161013b565b6101576101b636600461377f565b610653565b6101ce6101c9366004613afe565b6106cb565b005b6101e36101de36600461377f565b610b3b565b60405161013b9493929190613d20565b61019a6102013660046135b9565b610bde565b61021961021436600461377f565b610bf7565b60405161013b959493929190613e00565b6101e361023836600461377f565b61135a565b61025061024b36600461377f565b61136c565b60405161013b929190613e46565b61012e61158f565b61027961027436600461377f565b61159c565b60405161013b93929190613e74565b61029b61029636600461377f565b61197c565b60405161013b959493929190613ead565b6102bf6102ba36600461377f565b611b68565b60405161013b929190613efb565b6005546102e0906001600160a01b031681565b6040516001600160a01b03909116815260200161013b565b6101e3611ed0565b6101e361030e366004613f2e565b611f75565b6101e361032136600461377f565b611fb5565b6001805461033390613f4b565b80601f016020809104026020016040519081016040528092919081815260200182805461035f90613f4b565b80156103ac5780601f10610381576101008083540402835291602001916103ac565b820191906000526020600020905b81548152906001019060200180831161038f57829003601f168201915b505050505081565b604051632aff3bff60e21b81526001600160a01b03828116600483015260609160009161043491869182169063abfceffc90602401600060405180830381865afa158015610406573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261042e9190810190613f86565b85611ff5565b949350505050565b6060806060600080856001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610482573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104a6919061401f565b90506104b28682612c8b565b60405163252c221960e11b81526001600160a01b038a81166004830152939850919650945090821690634a58443290602401602060405180830381865afa158015610501573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610525919061403c565b9150509193509193565b604051637e361b1160e01b81526001600160a01b03868116600483015285811660248301526044820185905260648201849052608482018390526000918291829182918291908c1690637e361b119060a401608060405180830381865afa15801561059e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906105c29190614055565b9350935093509350836000146105f35760405163255a0eef60e11b8152600481018590526024015b60405180910390fd5b801561062a5761060381846140a1565b61061584670de0b6b3a76400006140b9565b61061f91906140d8565b945050505050610649565b81831161063f57600019945050505050610649565b61060382846140fa565b9695505050505050565b60606106c582836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610697573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106bf9190810190613f86565b33611ff5565b92915050565b600054610100900460ff16158080156106eb5750600054600160ff909116105b806107055750303b158015610705575060005460ff166001145b6107685760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016105ea565b6000805460ff19166001179055801561078b576000805461ff0019166101001790555b6001600160a01b038a166107fc5760405162461bcd60e51b815260206004820152603260248201527f506f6f6c4469726563746f727920696e7374616e63652063616e6e6f74206265604482015271103a3432903d32b9379030b2323932b9b99760711b60648201526084016105ea565b8551875114801561080e575084518751145b6108695760405162461bcd60e51b815260206004820152602660248201527f48617264636f64656420616464726573736573206c656e67746873206e6f742060448201526532b8bab0b61760d11b60648201526084016105ea565b8251845114801561087b575081518451145b6108d95760405162461bcd60e51b815260206004820152602960248201527f556e6973776170204c5020746f6b656e206e616d6573206c656e67746873206e60448201526837ba1032b8bab0b61760b91b60648201526084016105ea565b600580546001600160a01b0319166001600160a01b038c1617905588516109079060019060208c01906133ca565b50875161091b9060029060208b01906133ca565b5060005b87518110156109f957604051806040016040528088838151811061094557610945614111565b6020026020010151815260200187838151811061096457610964614111565b6020026020010151815250600360008a848151811061098557610985614111565b60200260200101516001600160a01b03166001600160a01b0316815260200190815260200160002060008201518160000190805190602001906109c99291906133ca565b5060208281015180516109e292600185019201906133ca565b5090505080806109f190614127565b91505061091f565b5060005b8451811015610ae85760046040518060600160405280878481518110610a2557610a25614111565b60200260200101518152602001868481518110610a4457610a44614111565b60200260200101518152602001858481518110610a6357610a63614111565b602090810291909101810151909152825460018101845560009384529281902082518051939460030290910192610a9d92849201906133ca565b506020828101518051610ab692600185019201906133ca565b5060408201518051610ad29160028401916020909101906133ca565b5050508080610ae090614127565b9150506109fd565b508015610b2f576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050505050505050565b6005546040516351f6c8e360e11b81526001600160a01b03838116600483015260609283928392839260009283929091169063a3ed91c6906024015b600060405180830381865afa158015610b94573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610bbc919081019061427c565b91509150600080610bcc83612f6e565b949a9399509750929550909350505050565b6000610bf0828460008060008061052f565b9392505050565b60008060608060008060009050600080886001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610c45573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610c6d9190810190613f86565b9050600081516001600160401b03811115610c8a57610c8a613902565b604051908082528060200260200182016040528015610cb3578160200160208202803683370190505b509050600082516001600160401b03811115610cd157610cd1613902565b604051908082528060200260200182016040528015610d0457816020015b6060815260200190600190039081610cef5790505b50905060008b6001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa158015610d47573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6b919061401f565b905060005b8451811015611252576000858281518110610d8d57610d8d614111565b6020026020010151905060008e6001600160a01b0316638e8f294b836040518263ffffffff1660e01b8152600401610dd491906001600160a01b0391909116815260200190565b6040805180830381865afa158015610df0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e149190614342565b50905080610e23575050611240565b816001600160a01b031663a6afed956040518163ffffffff1660e01b81526004016020604051808303816000875af1158015610e63573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e87919061403c565b506000826001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ec8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610eec919061403c565b90506000836001600160a01b0316639826394b6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f2e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f52919061403c565b846001600160a01b03166361feacff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f90573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fb4919061403c565b856001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ff2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611016919061403c565b61102091906140a1565b61102a91906140a1565b82856001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611069573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061108d919061403c565b61109791906140a1565b6110a191906140fa565b60405163fc57d4df60e01b81526001600160a01b03868116600483015291925060009188169063fc57d4df90602401602060405180830381865afa1580156110ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611111919061403c565b9050670de0b6b3a764000061112682856140b9565b61113091906140d8565b61113a908d6140a1565b9b50670de0b6b3a764000061114f82846140b9565b61115991906140d8565b611163908c6140a1565b9a50846001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156111a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111c7919061401f565b8987815181106111d9576111d9614111565b60200260200101906001600160a01b031690816001600160a01b03168152505061121b89878151811061120e5761120e614111565b6020026020010151613175565b905088878151811061122f5761122f614111565b602002602001018190525050505050505b8061124a81614127565b915050610d70565b506000600560009054906101000a90046001600160a01b03166001600160a01b03166343e20a1d8e6001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112b7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112db919061401f565b6040516001600160e01b031960e084901b1681526001600160a01b039091166004820152602401602060405180830381865afa15801561131f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113439190614370565b959d969c50929a5090985092965092945050505050565b606080606080600080610bbc87611b68565b6060806000836001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156113af573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526113d79190810190613f86565b9050600081516001600160401b038111156113f4576113f4613902565b60405190808252806020026020018201604052801561141d578160200160208202803683370190505b509050600082516001600160401b0381111561143b5761143b613902565b604051908082528060200260200182016040528015611464578160200160208202803683370190505b50905060005b83518110156115835783818151811061148557611485614111565b602002602001015183828151811061149f5761149f614111565b60200260200101906001600160a01b031690816001600160a01b031681525050866001600160a01b03166302c3bcbb8483815181106114e0576114e0614111565b60200260200101516040518263ffffffff1660e01b815260040161151391906001600160a01b0391909116815260200190565b602060405180830381865afa158015611530573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611554919061403c565b82828151811061156657611566614111565b60209081029190910101528061157b81614127565b91505061146a565b50909590945092505050565b6002805461033390613f4b565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156115e1573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116099190810190613f86565b9050600081516001600160401b0381111561162657611626613902565b60405190808252806020026020018201604052801561164f578160200160208202803683370190505b509050600082516001600160401b0381111561166d5761166d613902565b604051908082528060200260200182016040528015611696578160200160208202803683370190505b509050600083516001600160401b038111156116b4576116b4613902565b6040519080825280602002602001820160405280156116dd578160200160208202803683370190505b50905060005b845181101561196d578481815181106116fe576116fe614111565b602002602001015184828151811061171857611718614111565b60200260200101906001600160a01b031690816001600160a01b031681525050886001600160a01b03166302c3bcbb85838151811061175957611759614111565b60200260200101516040518263ffffffff1660e01b815260040161178c91906001600160a01b0391909116815260200190565b602060405180830381865afa1580156117a9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117cd919061403c565b8382815181106117df576117df614111565b60200260200101818152505060008582815181106117ff576117ff614111565b60200260200101516001600160a01b0316634aeb3d9a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611844573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611868919061403c565b905060008a6001600160a01b031663fb6243fa87858151811061188d5761188d614111565b60200260200101516040518263ffffffff1660e01b81526004016118c091906001600160a01b0391909116815260200190565b602060405180830381865afa1580156118dd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611901919061403c565b905081811061192f57600084848151811061191e5761191e614111565b602002602001018181525050611958565b61193981836140fa565b84848151811061194b5761194b614111565b6020026020010181815250505b5050808061196590614127565b9150506116e3565b50919790965090945092505050565b60608060606000806000866001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa1580156119c4573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119e8919061401f565b90506119f48782612c8b565b60405163252c221960e11b81526001600160a01b038b81166004830152939950919750955090821690634a58443290602401602060405180830381865afa158015611a43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611a67919061403c565b92506000876001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa158015611aa9573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611acd919061403c565b604051631d3965af60e11b81526001600160a01b038a81166004830152919250600091841690633a72cb5e90602401602060405180830381865afa158015611b19573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b3d919061403c565b9050818110611b4f5760009350611b5c565b611b5981836140fa565b93505b50505091939590929450565b6060806000600560009054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015611bc0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611be8919081019061427c565b9150506000805b8251811015611cbc576000838281518110611c0c57611c0c614111565b6020026020010151604001519050806001600160a01b0316639b19251a886040518263ffffffff1660e01b8152600401611c5591906001600160a01b0391909116815260200190565b602060405180830381865afa158015611c72573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611c969190614370565b15611ca95782611ca581614127565b9350505b5080611cb481614127565b915050611bef565b506000816001600160401b03811115611cd757611cd7613902565b604051908082528060200260200182016040528015611d00578160200160208202803683370190505b5090506000826001600160401b03811115611d1d57611d1d613902565b604051908082528060200260200182016040528015611d9257816020015b611d7f6040518060a001604052806060815260200160006001600160a01b0316815260200160006001600160a01b0316815260200160008152602001600081525090565b815260200190600190039081611d3b5790505b5090506000805b8551811015611ec2576000868281518110611db657611db6614111565b6020026020010151604001519050806001600160a01b0316639b19251a8b6040518263ffffffff1660e01b8152600401611dff91906001600160a01b0391909116815260200190565b602060405180830381865afa158015611e1c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e409190614370565b15611eaf5781858481518110611e5857611e58614111565b602002602001018181525050868281518110611e7657611e76614111565b6020026020010151848481518110611e9057611e90614111565b60200260200101819052508280611ea690614127565b93505050611ec2565b5080611eba81614127565b915050611d99565b509197909650945050505050565b606080606080600080600560009054906101000a90046001600160a01b03166001600160a01b0316634ae26ea16040518163ffffffff1660e01b8152600401600060405180830381865afa158015611f2c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611f54919081019061427c565b91509150600080611f6483612f6e565b949993985096509294509092505050565b6005546040516310c51ddf60e11b8152821515600482015260609182918291829160009182916001600160a01b039091169063218a3bbe90602401610b77565b60055460405163f348960d60e01b81526001600160a01b03838116600483015260609283928392839260009283929091169063f348960d90602401610b77565b60606000805b84518110156120c4576000866001600160a01b0316638e8f294b87848151811061202757612027614111565b60200260200101516040518263ffffffff1660e01b815260040161205a91906001600160a01b0391909116815260200190565b6040805180830381865afa158015612076573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061209a9190614342565b50905080156120b157826120ad81614127565b9350505b50806120bc81614127565b915050611ffb565b506000816001600160401b038111156120df576120df613902565b60405190808252806020026020018201604052801561211857816020015b61210561344e565b8152602001906001900390816120fd5790505b509050600080876001600160a01b0316637dc0d1d06040518163ffffffff1660e01b8152600401602060405180830381865afa15801561215c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612180919061401f565b905060005b8751811015612c7e576000808a6001600160a01b0316638e8f294b8b85815181106121b2576121b2614111565b60200260200101516040518263ffffffff1660e01b81526004016121e591906001600160a01b0391909116815260200190565b6040805180830381865afa158015612201573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122259190614342565b9150915081612235575050612c6c565b61223d61344e565b60008b858151811061225157612251614111565b6020908102919091018101516001600160a01b0381168085526040805163a6afed9560e01b81529051929450909263a6afed959260048084019382900301816000875af11580156122a6573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122ca919061403c565b50806001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015612309573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061232d919061401f565b6001600160a01b03166020830181905261234681613175565b84604001856060018290528290525050806001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015612394573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123b8919061438d565b60ff1660808401526040516370a0823160e01b81526001600160a01b038d811660048301528216906370a0823190602401602060405180830381865afa158015612406573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061242a919061403c565b8360a0018181525050816001600160a01b031663ae9d70b06040518163ffffffff1660e01b8152600401602060405180830381865afa158015612471573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612495919061403c565b8360c0018181525050816001600160a01b031663f8f9da286040518163ffffffff1660e01b8152600401602060405180830381865afa1580156124dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612500919061403c565b8360e0018181525050816001600160a01b0316633b1d21a26040518163ffffffff1660e01b8152600401602060405180830381865afa158015612547573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061256b919061403c565b83610180018181525050816001600160a01b03166373acee986040518163ffffffff1660e01b8152600401602060405180830381865afa1580156125b3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125d7919061403c565b83610120018181525050816001600160a01b0316639826394b6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561261f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612643919061403c565b826001600160a01b03166361feacff6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612681573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906126a5919061403c565b836001600160a01b0316638f840ddd6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156126e3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612707919061403c565b61271191906140a1565b61271b91906140a1565b83610120015184610180015161273191906140a1565b61273b91906140fa565b610100840152604051633af9e66960e01b81526001600160a01b038d81166004830152831690633af9e66990602401602060405180830381865afa158015612787573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906127ab919061403c565b6101408401526040516305eff7ef60e21b81526001600160a01b038d811660048301528316906317bfdfbc90602401602060405180830381865afa1580156127f7573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061281b919061403c565b61016084015260405163929fe9a160e01b81526001600160a01b038d8116600483015283811660248301528f169063929fe9a190604401602060405180830381865afa15801561286f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906128939190614370565b15156101a08401526040805163bd6d894d60e01b815290516001600160a01b0384169163bd6d894d9160048083019260209291908290030181865afa1580156128e0573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612904919061403c565b6101c084015260208301516040516315d5220f60e31b81526001600160a01b0391821660048201529088169063aea9107890602401602060405180830381865afa158015612956573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061297a919061403c565b6101e08401526001600160a01b038781166102008501819052602085015160405163addd509960e01b8152921660048301529063addd509990602401602060405180830381865afa9250505080156129ef575060408051601f3d908101601f191682019092526129ec9181019061401f565b60015b6129f857612a08565b6001600160a01b03166102008401525b8383610220018181525050816001600160a01b031663173b99046040518163ffffffff1660e01b8152600401602060405180830381865afa158015612a51573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612a75919061403c565b83610240018181525050816001600160a01b0316638d02d9a16040518163ffffffff1660e01b8152600401602060405180830381865afa158015612abd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ae1919061403c565b83610260018181525050816001600160a01b031663c3bf11cd6040518163ffffffff1660e01b8152600401602060405180830381865afa158015612b29573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b4d919061403c565b610280840152604051636d154ea560e01b81526001600160a01b0383811660048301528f1690636d154ea590602401602060405180830381865afa158015612b99573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612bbd9190614370565b15156102a084015260405163731f0c2b60e01b81526001600160a01b0383811660048301528f169063731f0c2b90602401602060405180830381865afa158015612c0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612c2f9190614370565b15156102c0840152885183908a908a908110612c4d57612c4d614111565b60200260200101819052508780612c6390614127565b98505050505050505b80612c7681614127565b915050612185565b5091979650505050505050565b60608060606000846001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015612cd0573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052612cf89190810190613f86565b905080516001600160401b03811115612d1357612d13613902565b604051908082528060200260200182016040528015612d3c578160200160208202803683370190505b50935080516001600160401b03811115612d5857612d58613902565b604051908082528060200260200182016040528015612d81578160200160208202803683370190505b50925080516001600160401b03811115612d9d57612d9d613902565b604051908082528060200260200182016040528015612dc6578160200160208202803683370190505b50915060005b8151811015612f65576000828281518110612de957612de9614111565b60200260200101519050876001600160a01b0316816001600160a01b031614612f525780868381518110612e1f57612e1f614111565b6001600160a01b03928316602091820292909201015260405163940cd6f160e01b8152898216600482015282821660248201529088169063940cd6f190604401602060405180830381865afa158015612e7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612ea0919061403c565b858381518110612eb257612eb2614111565b6020908102919091010152604051631c819e4360e01b81526001600160a01b0389811660048301528281166024830152881690631c819e4390604401602060405180830381865afa158015612f0b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612f2f9190614370565b848381518110612f4157612f41614111565b911515602092830291909101909101525b5080612f5d81614127565b915050612dcc565b50509250925092565b606080600083516001600160401b03811115612f8c57612f8c613902565b604051908082528060200260200182016040528015612ff157816020015b612fde6040518060a00160405280600081526020016000815260200160608152602001606081526020016000151581525090565b815260200190600190039081612faa5790505b509050600084516001600160401b0381111561300f5761300f613902565b604051908082528060200260200182016040528015613038578160200160208202803683370190505b50905060005b855181101561316a57306001600160a01b03166359d2fea687838151811061306857613068614111565b6020026020010151604001516040518263ffffffff1660e01b815260040161309f91906001600160a01b0391909116815260200190565b6000604051808303816000875af19250505080156130df57506040513d6000823e601f3d908101601f191682016040526130dc919081019061442f565b60015b61310c5760018282815181106130f7576130f7614111565b91151560209283029190910190910152613158565b6040518060a0016040528086815260200185815260200184815260200183815260200182151581525088878151811061314757613147614111565b602002602001018190525050505050505b8061316281614127565b91505061303e565b509094909350915050565b6001600160a01b0381166000908152600360205260409020600101805460609182916131a090613f4b565b1590506132e6576001600160a01b03831660009081526003602052604090208054600182019082906131d190613f4b565b80601f01602080910402602001604051908101604052809291908181526020018280546131fd90613f4b565b801561324a5780601f1061321f5761010080835404028352916020019161324a565b820191906000526020600020905b81548152906001019060200180831161322d57829003601f168201915b5050505050915080805461325d90613f4b565b80601f016020809104026020016040519081016040528092919081815260200182805461328990613f4b565b80156132d65780601f106132ab576101008083540402835291602001916132d6565b820191906000526020600020905b8154815290600101906020018083116132b957829003601f168201915b5050505050905091509150915091565b60008390506000816001600160a01b03166306fdde036040518163ffffffff1660e01b8152600401600060405180830381865afa15801561332b573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133539190810190614517565b90506000826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa158015613395573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526133bd9190810190614517565b9196919550909350505050565b8280546133d690613f4b565b90600052602060002090601f0160209004810192826133f8576000855561343e565b82601f1061341157805160ff191683800117855561343e565b8280016001018555821561343e579182015b8281111561343e578251825591602001919060010190613423565b5061344a92915061351d565b5090565b604051806102e0016040528060006001600160a01b0316815260200160006001600160a01b031681526020016060815260200160608152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600081526020016000815260200160008152602001600015158152602001600081526020016000815260200160006001600160a01b03168152602001600081526020016000815260200160008152602001600081526020016000151581526020016000151581525090565b5b8082111561344a576000815560010161351e565b60005b8381101561354d578181015183820152602001613535565b8381111561355c576000848401525b50505050565b6000815180845261357a816020860160208601613532565b601f01601f19169290920160200192915050565b602081526000610bf06020830184613562565b6001600160a01b03811681146135b657600080fd5b50565b600080604083850312156135cc57600080fd5b82356135d7816135a1565b915060208301356135e7816135a1565b809150509250929050565b60006020808301818452808551808352604092508286019150828160051b87010184880160005b8381101561377157888303603f19018552815180516001600160a01b031684526102e0818901516001600160a01b038116868b01525087820151818987015261366482870182613562565b9150506060808301518683038288015261367e8382613562565b6080858101519089015260a0808601519089015260c0808601519089015260e08086015190890152610100808601519089015261012080860151908901526101408086015190890152610160808601519089015261018080860151908901526101a0808601511515908901526101c080860151908901526101e08086015190890152610200808601516001600160a01b03169089015261022080860151908901526102408086015190890152610260808601519089015261028080860151908901526102a0808601511515908901526102c094850151151594909701939093525050509386019390860190600101613619565b509098975050505050505050565b60006020828403121561379157600080fd5b8135610bf0816135a1565b600081518084526020808501945080840160005b838110156137d55781516001600160a01b0316875295820195908201906001016137b0565b509495945050505050565b600081518084526020808501945080840160005b838110156137d5578151875295820195908201906001016137f4565b600081518084526020808501945080840160005b838110156137d5578151151587529582019590820190600101613824565b608081526000613855608083018761379c565b828103602084015261386781876137e0565b9050828103604084015261387b8186613810565b91505082606083015295945050505050565b60008060008060008060c087890312156138a657600080fd5b86356138b1816135a1565b955060208701356138c1816135a1565b945060408701356138d1816135a1565b959894975094956060810135955060808101359460a0909101359350915050565b80356138fd816135a1565b919050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b038111828210171561393a5761393a613902565b60405290565b604051601f8201601f191681016001600160401b038111828210171561396857613968613902565b604052919050565b60006001600160401b0382111561398957613989613902565b50601f01601f191660200190565b600082601f8301126139a857600080fd5b81356139bb6139b682613970565b613940565b8181528460208386010111156139d057600080fd5b816020850160208301376000918101602001919091529392505050565b60006001600160401b03821115613a0657613a06613902565b5060051b60200190565b600082601f830112613a2157600080fd5b81356020613a316139b6836139ed565b82815260059290921b84018101918181019086841115613a5057600080fd5b8286015b84811015613a74578035613a67816135a1565b8352918301918301613a54565b509695505050505050565b600082601f830112613a9057600080fd5b81356020613aa06139b6836139ed565b82815260059290921b84018101918181019086841115613abf57600080fd5b8286015b84811015613a745780356001600160401b03811115613ae25760008081fd5b613af08986838b0101613997565b845250918301918301613ac3565b60008060008060008060008060006101208a8c031215613b1d57600080fd5b613b268a6138f2565b985060208a01356001600160401b0380821115613b4257600080fd5b613b4e8d838e01613997565b995060408c0135915080821115613b6457600080fd5b613b708d838e01613997565b985060608c0135915080821115613b8657600080fd5b613b928d838e01613a10565b975060808c0135915080821115613ba857600080fd5b613bb48d838e01613a7f565b965060a08c0135915080821115613bca57600080fd5b613bd68d838e01613a7f565b955060c08c0135915080821115613bec57600080fd5b613bf88d838e01613a7f565b945060e08c0135915080821115613c0e57600080fd5b613c1a8d838e01613a7f565b93506101008c0135915080821115613c3157600080fd5b50613c3e8c828d01613a7f565b9150509295985092959850929598565b600081518084526020808501808196508360051b8101915082860160005b85811015612c7e578284038952815160a08151818752613c8e82880182613562565b838901516001600160a01b03908116898b01526040808601519091169089015260608085015190890152608093840151939097019290925250509784019790840190600101613c6c565b600081518084526020808501808196508360051b8101915082860160005b85811015612c7e578284038952613d0e848351613562565b98850198935090840190600101613cf6565b60006080808352613d33818401886137e0565b602084820381860152613d468289613c4e565b91506040858303818701528288518085528385019150838160051b860101848b0160005b83811015613ddb57601f19888403018552815160a0815185528882015189860152878201518189870152613da08287018261379c565b91505060608083015186830382880152613dba8382613cd8565b938d01511515968d0196909652505094870194925090860190600101613d6a565b505088810360608a0152613def818b613810565b9d9c50505050505050505050505050565b85815284602082015260a060408201526000613e1f60a083018661379c565b8281036060840152613e318186613cd8565b91505082151560808301529695505050505050565b604081526000613e59604083018561379c565b8281036020840152613e6b81856137e0565b95945050505050565b606081526000613e87606083018661379c565b8281036020840152613e9981866137e0565b9050828103604084015261064981856137e0565b60a081526000613ec060a083018861379c565b8281036020840152613ed281886137e0565b90508281036040840152613ee68187613810565b60608401959095525050608001529392505050565b604081526000613f0e60408301856137e0565b8281036020840152613e6b8185613c4e565b80151581146135b657600080fd5b600060208284031215613f4057600080fd5b8135610bf081613f20565b600181811c90821680613f5f57607f821691505b60208210811415613f8057634e487b7160e01b600052602260045260246000fd5b50919050565b60006020808385031215613f9957600080fd5b82516001600160401b03811115613faf57600080fd5b8301601f81018513613fc057600080fd5b8051613fce6139b6826139ed565b81815260059190911b82018301908381019087831115613fed57600080fd5b928401925b82841015614014578351614005816135a1565b82529284019290840190613ff2565b979650505050505050565b60006020828403121561403157600080fd5b8151610bf0816135a1565b60006020828403121561404e57600080fd5b5051919050565b6000806000806080858703121561406b57600080fd5b505082516020840151604085015160609095015191969095509092509050565b634e487b7160e01b600052601160045260246000fd5b600082198211156140b4576140b461408b565b500190565b60008160001904831182151516156140d3576140d361408b565b500290565b6000826140f557634e487b7160e01b600052601260045260246000fd5b500490565b60008282101561410c5761410c61408b565b500390565b634e487b7160e01b600052603260045260246000fd5b600060001982141561413b5761413b61408b565b5060010190565b600082601f83011261415357600080fd5b81516141616139b682613970565b81815284602083860101111561417657600080fd5b610434826020830160208701613532565b600082601f83011261419857600080fd5b815160206141a86139b6836139ed565b82815260059290921b840181019181810190868411156141c757600080fd5b8286015b84811015613a745780516001600160401b03808211156141eb5760008081fd5b9088019060a0828b03601f19018113156142055760008081fd5b61420d613918565b878401518381111561421f5760008081fd5b61422d8d8a83880101614142565b8252506040925082840151614241816135a1565b81890152606084810151614254816135a1565b93820193909352608084810151938201939093529201519082015283529183019183016141cb565b6000806040838503121561428f57600080fd5b82516001600160401b03808211156142a657600080fd5b818501915085601f8301126142ba57600080fd5b815160206142ca6139b6836139ed565b82815260059290921b840181019181810190898411156142e957600080fd5b948201945b83861015614307578551825294820194908201906142ee565b9188015191965090935050508082111561432057600080fd5b5061432d85828601614187565b9150509250929050565b80516138fd81613f20565b6000806040838503121561435557600080fd5b825161436081613f20565b6020939093015192949293505050565b60006020828403121561438257600080fd5b8151610bf081613f20565b60006020828403121561439f57600080fd5b815160ff81168114610bf057600080fd5b600082601f8301126143c157600080fd5b815160206143d16139b6836139ed565b82815260059290921b840181019181810190868411156143f057600080fd5b8286015b84811015613a745780516001600160401b038111156144135760008081fd5b6144218986838b0101614142565b8452509183019183016143f4565b600080600080600060a0868803121561444757600080fd5b85519450602080870151945060408701516001600160401b038082111561446d57600080fd5b818901915089601f83011261448157600080fd5b815161448f6139b6826139ed565b81815260059190911b8301840190848101908c8311156144ae57600080fd5b938501935b828510156144d55784516144c6816135a1565b825293850193908501906144b3565b60608c015190985094505050808311156144ee57600080fd5b50506144fc888289016143b0565b92505061450b60808701614337565b90509295509295909350565b60006020828403121561452957600080fd5b81516001600160401b0381111561453f57600080fd5b6104348482850161414256fea164736f6c634300080a000a", + "sourceMap": "765:23865:6:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2979:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17392:238;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;19864:498::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;23836:792::-;;;;;;:::i;:::-;;:::i;:::-;;;8249:25:504;;;8237:2;8222:18;23836:792:6;8103:177:504;16850:192:6;;;;;;:::i;:::-;;:::i;1562:1413::-;;;;;;:::i;:::-;;:::i;:::-;;6062:452;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;23660:172::-;;;;;;:::i;:::-;;:::i;8882:1479::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;23192:464::-;;;;;;:::i;:::-;;:::i;17811:540::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3001:20::-;;;:::i;18576:1073::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;20610:869::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;21748:926::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;3404:30::-;;;;;-1:-1:-1;;;;;3404:30:6;;;;;;-1:-1:-1;;;;;21983:32:504;;;21965:51;;21953:2;21938:18;3404:30:6;21797:225:504;4147:421:6;;;:::i;5063:498::-;;;;;;:::i;:::-;;:::i;7009:432::-;;;;;;:::i;:::-;;:::i;2979:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;17392:238::-;17570:29;;-1:-1:-1;;;17570:29:6;;-1:-1:-1;;;;;21983:32:504;;;17570:29:6;;;21965:51:504;17481:18:6;;17507:25;;17535:71;;17557:11;;17570:23;;;;;21938:18:504;;17570:29:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17570:29:6;;;;;;;;;;;;:::i;:::-;17601:4;17535:21;:71::i;:::-;17507:99;17392:238;-1:-1:-1;;;;17392:238:6:o;19864:498::-;19950:27;19985:40;20033:35;20076:22;20113:28;20161:5;-1:-1:-1;;;;;20161:17:6;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20113:68;;20250:46;20277:5;20284:11;20250:26;:46::i;:::-;20319:38;;-1:-1:-1;;;20319:38:6;;-1:-1:-1;;;;;21983:32:504;;;20319:38:6;;;21965:51:504;20187:109:6;;-1:-1:-1;20187:109:6;;-1:-1:-1;20187:109:6;-1:-1:-1;20319:22:6;;;;;;21938:18:504;;20319:38:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20302:55;;20107:255;19864:498;;;;;:::o;23836:792::-;24143:136;;-1:-1:-1;;;24143:136:6;;-1:-1:-1;;;;;24789:15:504;;;24143:136:6;;;24771:34:504;24841:15;;;24821:18;;;24814:43;24873:18;;;24866:34;;;24916:18;;;24909:34;;;24959:19;;;24952:35;;;24049:7:6;;;;;;;;;;24143:36;;;;;;24705:19:504;;24143:136:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;24064:215;;;;;;;;24290:3;24297:1;24290:8;24286:42;;24307:21;;-1:-1:-1;;;24307:21:6;;;;;8249:25:504;;;8222:18;;24307:21:6;;;;;;;;24286:42;24339:13;;24335:289;;24415:27;24433:9;24415:15;:27;:::i;:::-;24388:22;:15;24406:4;24388:22;:::i;:::-;24387:56;;;;:::i;:::-;24380:63;;;;;;;;24335:289;24506:9;24487:15;:28;24483:134;;-1:-1:-1;;24517:24:6;;;;;;;;24483:134;24589:27;24607:9;24589:15;:27;:::i;23836:792::-;;;;;;;;;:::o;16850:192::-;16929:18;16962:75;16984:11;16997;-1:-1:-1;;;;;16997:25:6;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16997:27:6;;;;;;;;;;;;:::i;:::-;17026:10;16962:21;:75::i;:::-;16955:82;16850:192;-1:-1:-1;;16850:192:6:o;1562:1413::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;26363:2:504;3314:201:457;;;26345:21:504;26402:2;26382:18;;;26375:30;26441:34;26421:18;;;26414:62;-1:-1:-1;;;26492:18:504;;;26485:44;26546:19;;3314:201:457;26161:410:504;3314:201:457;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;-1:-1:-1;;;;;1954:33:6;::::1;1946:96;;;::::0;-1:-1:-1;;;1946:96:6;;26778:2:504;1946:96:6::1;::::0;::::1;26760:21:504::0;26817:2;26797:18;;;26790:30;26856:34;26836:18;;;26829:62;-1:-1:-1;;;26907:18:504;;;26900:48;26965:19;;1946:96:6::1;26576:414:504::0;1946:96:6::1;2093:15;:22;2063:19;:26;:52;:110;;;;;2149:17;:24;2119:19;:26;:54;2063:110;2048:179;;;::::0;-1:-1:-1;;;2048:179:6;;27197:2:504;2048:179:6::1;::::0;::::1;27179:21:504::0;27236:2;27216:18;;;27209:30;27275:34;27255:18;;;27248:62;-1:-1:-1;;;27326:18:504;;;27319:36;27372:19;;2048:179:6::1;26995:402:504::0;2048:179:6::1;2279:22;:29;2248:20;:27;:60;:137;;;;;2351:27;:34;2320:20;:27;:65;2248:137;2233:209;;;::::0;-1:-1:-1;;;2233:209:6;;27604:2:504;2233:209:6::1;::::0;::::1;27586:21:504::0;27643:2;27623:18;;;27616:30;27682:34;27662:18;;;27655:62;-1:-1:-1;;;27733:18:504;;;27726:39;27782:19;;2233:209:6::1;27402:405:504::0;2233:209:6::1;2449:9;:22:::0;;-1:-1:-1;;;;;;2449:22:6::1;-1:-1:-1::0;;;;;2449:22:6;::::1;;::::0;;2477:12;;::::1;::::0;-1:-1:-1;;2477:12:6::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2495:16:6;;::::1;::::0;:6:::1;::::0;:16:::1;::::0;::::1;::::0;::::1;:::i;:::-;;2522:9;2517:177;2541:19;:26;2537:1;:30;2517:177;;;2618:69;;;;;;;;2636:15;2652:1;2636:18;;;;;;;;:::i;:::-;;;;;;;2618:69;;;;2664:17;2682:1;2664:20;;;;;;;;:::i;:::-;;;;;;;2618:69;;::::0;2582:9:::1;:33;2592:19;2612:1;2592:22;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;2582:33:6::1;-1:-1:-1::0;;;;;2582:33:6::1;;;;;;;;;;;;:105;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;2582:105:6::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;;;;;2569:3;;;;;:::i;:::-;;;;2517:177;;;;2705:9;2700:271;2724:20;:27;2720:1;:31;2700:271;;;2766:11;2792:164;;;;;;;;2822:20;2843:1;2822:23;;;;;;;;:::i;:::-;;;;;;;2792:164;;;;2865:22;2888:1;2865:25;;;;;;;;:::i;:::-;;;;;;;2792:164;;;;2915:27;2943:1;2915:30;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;2792:164;;;2766:198;;::::1;::::0;::::1;::::0;;-1:-1:-1;2766:198:6;;;;;;;;;;;;;::::1;;::::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2766:198:6::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;::::1;:::i;:::-;-1:-1:-1::0;2766:198:6::1;::::0;::::1;::::0;;;::::1;::::0;::::1;::::0;::::1;::::0;::::1;::::0;;::::1;::::0;::::1;:::i;:::-;;;;2753:3;;;;;:::i;:::-;;;;2700:271;;;;3640:14:457::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;28236:36:504;;3710:14:457;;28224:2:504;28209:18;3710:14:457;;;;;;;3636:99;3258:483;1562:1413:6;;;;;;;;;:::o;6062:452::-;6335:9;;:36;;-1:-1:-1;;;6335:36:6;;-1:-1:-1;;;;;21983:32:504;;;6335:36:6;;;21965:51:504;6147:16:6;;;;;;;;6265:24;;;;6335:9;;;;:27;;21938:18:504;;6335:36:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6335:36:6;;;;;;;;;;;;:::i;:::-;6264:107;;;;6378:27;6407:21;6432:26;6445:12;6432;:26::i;:::-;6472:7;;6481:12;;-1:-1:-1;6481:12:6;-1:-1:-1;6472:7:6;;-1:-1:-1;6062:452:6;;-1:-1:-1;;;;6062:452:6:o;23660:172::-;23745:7;23767:60;23795:4;23801;23815:1;23819;23822;23825;23767:27;:60::i;:::-;23760:67;23660:172;-1:-1:-1;;;23660:172:6:o;8882:1479::-;8969:7;8984;8999:16;9023:15;9046:4;9065:19;9087:1;9065:23;;9094:19;9123:24;9150:11;-1:-1:-1;;;;;9150:25:6;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9150:27:6;;;;;;;;;;;;:::i;:::-;9123:54;;9183:33;9233:7;:14;-1:-1:-1;;;;;9219:29:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9219:29:6;;9183:65;;9254:33;9303:7;:14;-1:-1:-1;;;;;9290:28:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9254:64;;9324:22;9349:11;-1:-1:-1;;;;;9349:18:6;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9324:45;;9381:9;9376:811;9400:7;:14;9396:1;:18;9376:811;;;9429:14;9446:7;9454:1;9446:10;;;;;;;;:::i;:::-;;;;;;;9429:27;;9465:13;9484:11;-1:-1:-1;;;;;9484:19:6;;9512:6;9484:36;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;9484:36:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9464:56;;;9533:8;9528:23;;9543:8;;;;9528:23;9559:6;-1:-1:-1;;;;;9559:21:6;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;9590:24;9617:6;-1:-1:-1;;;;;9617:26:6;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9590:55;;9653:24;9786:6;-1:-1:-1;;;;;9786:21:6;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9760:6;-1:-1:-1;;;;;9760:21:6;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9735:6;-1:-1:-1;;;;;9735:20:6;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;:74;;;;:::i;:::-;9707:16;9680:6;-1:-1:-1;;;;;9680:14:6;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:43;;;;:::i;:::-;:130;;;;:::i;:::-;9844:33;;-1:-1:-1;;;9844:33:6;;-1:-1:-1;;;;;21983:32:504;;;9844:33:6;;;21965:51:504;9653:157:6;;-1:-1:-1;9818:23:6;;9844:25;;;;;21938:18:504;;9844:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9818:59;-1:-1:-1;9952:4:6;9914:34;9818:59;9914:16;:34;:::i;:::-;9913:43;;;;:::i;:::-;9899:57;;:11;:57;:::i;:::-;9885:71;-1:-1:-1;10031:4:6;9993:34;10012:15;9993:16;:34;:::i;:::-;9992:43;;;;:::i;:::-;9978:57;;:11;:57;:::i;:::-;9964:71;;10082:6;-1:-1:-1;;;;;10066:35:6;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10044:16;10061:1;10044:19;;;;;;;;:::i;:::-;;;;;;:59;-1:-1:-1;;;;;10044:59:6;;;-1:-1:-1;;;;;10044:59:6;;;;;10138:42;10160:16;10177:1;10160:19;;;;;;;;:::i;:::-;;;;;;;10138:21;:42::i;:::-;10111:69;;10114:17;10132:1;10114:20;;;;;;;;:::i;:::-;;;;;;10111:69;;;;9421:766;;;;;9376:811;9416:3;;;;:::i;:::-;;;;9376:811;;;;10193:21;10217:9;;;;;;;;;-1:-1:-1;;;;;10217:9:6;-1:-1:-1;;;;;10217:24:6;;10242:11;-1:-1:-1;;;;;10242:17:6;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10217:45;;-1:-1:-1;;;;;;10217:45:6;;;;;;;-1:-1:-1;;;;;21983:32:504;;;10217:45:6;;;21965:51:504;21938:18;;10217:45:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;10276:11;;10289;;-1:-1:-1;10302:16:6;;-1:-1:-1;10320:17:6;;-1:-1:-1;10276:11:6;;-1:-1:-1;8882:1479:6;;-1:-1:-1;;;;;8882:1479:6:o;23192:464::-;23288:16;23312:27;23347:22;23377:13;23406:24;23432:40;23476:37;23505:7;23476:28;:37::i;17811:540::-;17892:16;17910;17934:28;17965:11;-1:-1:-1;;;;;17965:25:6;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17965:27:6;;;;;;;;;;;;:::i;:::-;17934:58;;17999:23;18039:11;:18;-1:-1:-1;;;;;18025:33:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18025:33:6;;17999:59;;18064:35;18116:11;:18;-1:-1:-1;;;;;18102:33:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18102:33:6;;18064:71;;18146:9;18141:164;18165:11;:18;18161:1;:22;18141:164;;;18218:11;18230:1;18218:14;;;;;;;;:::i;:::-;;;;;;;18198:6;18205:1;18198:9;;;;;;;;:::i;:::-;;;;;;:35;-1:-1:-1;;;;;18198:35:6;;;-1:-1:-1;;;;;18198:35:6;;;;;18265:11;-1:-1:-1;;;;;18265:22:6;;18288:6;18295:1;18288:9;;;;;;;;:::i;:::-;;;;;;;18265:33;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;18265:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18241:18;18260:1;18241:21;;;;;;;;:::i;:::-;;;;;;;;;;:57;18185:3;;;;:::i;:::-;;;;18141:164;;;-1:-1:-1;18319:6:6;;18327:18;;-1:-1:-1;17811:540:6;-1:-1:-1;;;17811:540:6:o;3001:20::-;;;;;;;:::i;18576:1073::-;18680:16;18704;18728;18759:28;18790:11;-1:-1:-1;;;;;18790:25:6;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18790:27:6;;;;;;;;;;;;:::i;:::-;18759:58;;18824:23;18864:11;:18;-1:-1:-1;;;;;18850:33:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18850:33:6;;18824:59;;18889:35;18941:11;:18;-1:-1:-1;;;;;18927:33:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;18927:33:6;;18889:71;;18966:42;19025:11;:18;-1:-1:-1;;;;;19011:33:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;19011:33:6;;18966:78;;19055:9;19050:526;19074:11;:18;19070:1;:22;19050:526;;;19127:11;19139:1;19127:14;;;;;;;;:::i;:::-;;;;;;;19107:6;19114:1;19107:9;;;;;;;;:::i;:::-;;;;;;:35;-1:-1:-1;;;;;19107:35:6;;;-1:-1:-1;;;;;19107:35:6;;;;;19174:11;-1:-1:-1;;;;;19174:22:6;;19197:6;19204:1;19197:9;;;;;;;;:::i;:::-;;;;;;;19174:33;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;19174:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19150:18;19169:1;19150:21;;;;;;;;:::i;:::-;;;;;;:57;;;;;19215:26;19244:11;19256:1;19244:14;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;19244:41:6;;:43;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19215:72;;19295:34;19332:11;-1:-1:-1;;;;;19332:41:6;;19374:6;19381:1;19374:9;;;;;;;;:::i;:::-;;;;;;;19332:52;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;19332:52:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;19295:89;;19426:18;19396:26;:48;19392:177;;19477:1;19446:25;19472:1;19446:28;;;;;;;;:::i;:::-;;;;;;:32;;;;;19392:177;;;19522:47;19543:26;19522:18;:47;:::i;:::-;19491:25;19517:1;19491:28;;;;;;;;:::i;:::-;;;;;;:78;;;;;19392:177;19099:477;;19094:3;;;;;:::i;:::-;;;;19050:526;;;-1:-1:-1;19590:6:6;;19598:18;;-1:-1:-1;19590:6:6;;-1:-1:-1;18576:1073:6;-1:-1:-1;;;18576:1073:6:o;20610:869::-;20700:27;20735:40;20783:35;20826:22;20856:34;20905:28;20953:5;-1:-1:-1;;;;;20953:17:6;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;20905:68;;21042:46;21069:5;21076:11;21042:26;:46::i;:::-;21111:38;;-1:-1:-1;;;21111:38:6;;-1:-1:-1;;;;;21983:32:504;;;21111:38:6;;;21965:51:504;20979:109:6;;-1:-1:-1;20979:109:6;;-1:-1:-1;20979:109:6;-1:-1:-1;21111:22:6;;;;;;21938:18:504;;21111:38:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21094:55;;21155:20;21178:5;-1:-1:-1;;;;;21178:25:6;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21249:58;;-1:-1:-1;;;21249:58:6;;-1:-1:-1;;;;;21983:32:504;;;21249:58:6;;;21965:51:504;21155:50:6;;-1:-1:-1;21211:35:6;;21249:42;;;;;21938:18:504;;21249:58:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;21211:96;;21348:12;21317:27;:43;21313:161;;21391:1;21362:30;;21313:161;;;21432:42;21447:27;21432:12;:42;:::i;:::-;21403:71;;21313:161;20899:580;;;20610:869;;;;;;;:::o;21748:926::-;21836:16;21854:27;21894:33;21931:9;;;;;;;;;-1:-1:-1;;;;;21931:9:6;-1:-1:-1;;;;;21931:24:6;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21931:26:6;;;;;;;;;;;;:::i;:::-;21891:66;;;21963:19;21998:9;21993:185;22017:5;:12;22013:1;:16;21993:185;;;22044:28;22092:5;22098:1;22092:8;;;;;;;;:::i;:::-;;;;;;;:20;;;22044:69;;22126:11;-1:-1:-1;;;;;22126:21:6;;22148:7;22126:30;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;22126:30:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22122:49;;;22158:13;;;;:::i;:::-;;;;22122:49;-1:-1:-1;22031:3:6;;;;:::i;:::-;;;;21993:185;;;;22184:24;22225:11;-1:-1:-1;;;;;22211:26:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;22211:26:6;;22184:53;;22243:40;22311:11;-1:-1:-1;;;;;22286:37:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22286:37:6;;;;;;;;;;;;;;;;;22243:80;;22329:13;22358:9;22353:280;22377:5;:12;22373:1;:16;22353:280;;;22404:28;22452:5;22458:1;22452:8;;;;;;;;:::i;:::-;;;;;;;:20;;;22404:69;;22486:11;-1:-1:-1;;;;;22486:21:6;;22508:7;22486:30;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;22486:30:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;22482:145;;;22545:1;22528:7;22536:5;22528:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;22578:5;22584:1;22578:8;;;;;;;;:::i;:::-;;;;;;;22556:12;22569:5;22556:19;;;;;;;;:::i;:::-;;;;;;:30;;;;22596:7;;;;;:::i;:::-;;;;22613:5;;;22482:145;-1:-1:-1;22391:3:6;;;;:::i;:::-;;;;22353:280;;;-1:-1:-1;22647:7:6;;22656:12;;-1:-1:-1;21748:926:6;-1:-1:-1;;;;;21748:926:6:o;4147:421::-;4214:16;4238:27;4273:22;4303:13;4332:24;4358:39;4401:9;;;;;;;;;-1:-1:-1;;;;;4401:9:6;-1:-1:-1;;;;;4401:24:6;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;4401:26:6;;;;;;;;;;;;:::i;:::-;4331:96;;;;4434:27;4463:21;4488:25;4501:11;4488:12;:25::i;:::-;4527:7;;4536:11;;-1:-1:-1;4536:11:6;-1:-1:-1;4527:7:6;;-1:-1:-1;4147:421:6;;-1:-1:-1;;;4147:421:6:o;5063:498::-;5352:9;;:68;;-1:-1:-1;;;5352:68:6;;33427:14:504;;33420:22;5352:68:6;;;33402:41:504;5165:16:6;;;;;;;;5283:24;;;;-1:-1:-1;;;;;5352:9:6;;;;:38;;33375:18:504;;5352:68:6;33262:187:504;7009:432:6;7274:9;;:30;;-1:-1:-1;;;7274:30:6;;-1:-1:-1;;;;;21983:32:504;;;7274:30:6;;;21965:51:504;7089:16:6;;;;;;;;7207:24;;;;7274:9;;;;:24;;21938:18:504;;7274:30:6;21797:225:504;11710:2937:6;11845:18;11871:19;11906:9;11901:155;11925:7;:14;11921:1;:18;11901:155;;;11955:13;11974:11;-1:-1:-1;;;;;11974:19:6;;12002:7;12010:1;12002:10;;;;;;;;:::i;:::-;;;;;;;11974:40;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;11974:40:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11954:60;;;12026:8;12022:27;;;12036:13;;;;:::i;:::-;;;;12022:27;-1:-1:-1;11941:3:6;;;;:::i;:::-;;;;11901:155;;;;12062:33;12114:11;-1:-1:-1;;;;;12098:28:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;12062:64;;12132:13;12155:22;12204:11;-1:-1:-1;;;;;12204:18:6;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12155:71;;12238:9;12233:2380;12257:7;:14;12253:1;:18;12233:2380;;;12348:13;12363:32;12399:11;-1:-1:-1;;;;;12399:19:6;;12427:7;12435:1;12427:10;;;;;;;;:::i;:::-;;;;;;;12399:40;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;12399:40:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12347:92;;;;12452:8;12447:23;;12462:8;;;;12447:23;12519:22;;:::i;:::-;12549:14;12566:7;12574:1;12566:10;;;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;12584:30:6;;;;;12623:23;;;-1:-1:-1;;;12623:23:6;;;;12566:10;;-1:-1:-1;12584:30:6;;12623:21;;:23;;;;;;;;;;12584:12;:30;12623:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;12730:6;-1:-1:-1;;;;;12714:35:6;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;12690:61:6;:21;;;:61;;;12885:44;12690:61;12885:21;:44::i;:::-;12837:5;:20;;12859:5;:22;;12836:93;;;;;;;;12964:10;-1:-1:-1;;;;;12964:19:6;;:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12937:48;;:24;;;:48;13019:26;;-1:-1:-1;;;13019:26:6;;-1:-1:-1;;;;;21983:32:504;;;13019:26:6;;;21965:51:504;13019:20:6;;;;;21938:18:504;;13019:26:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;12993:5;:23;;:52;;;;;13106:6;-1:-1:-1;;;;;13106:25:6;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13079:5;:24;;:54;;;;;13168:6;-1:-1:-1;;;;;13168:25:6;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13141:5;:24;;:54;;;;;13221:6;-1:-1:-1;;;;;13221:14:6;;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13203:5;:15;;:34;;;;;13265:6;-1:-1:-1;;;;;13265:26:6;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13245:5;:17;;:48;;;;;13435:6;-1:-1:-1;;;;;13435:21:6;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13409:6;-1:-1:-1;;;;;13409:21:6;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13384:6;-1:-1:-1;;;;;13384:20:6;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;;;;:::i;:::-;:74;;;;:::i;:::-;13355:5;:17;;;13329:5;:15;;;:43;;;;:::i;:::-;:130;;;;:::i;:::-;13301:17;;;:158;13489:32;;-1:-1:-1;;;13489:32:6;;-1:-1:-1;;;;;21983:32:504;;;13489::6;;;21965:51:504;13489:26:6;;;;;21938:18:504;;13489:32:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13467:19;;;:54;13551:33;;-1:-1:-1;;;13551:33:6;;-1:-1:-1;;;;;21983:32:504;;;13551:33:6;;;21965:51:504;13551:27:6;;;;;21938:18:504;;13551:33:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13529:19;;;:55;13611:41;;-1:-1:-1;;;13611:41:6;;-1:-1:-1;;;;;33979:15:504;;;13611:41:6;;;33961:34:504;34031:15;;;34011:18;;;34004:43;13611:27:6;;;;;33896:18:504;;13611:41:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13592:60;;:16;;;:60;13681:28;;;-1:-1:-1;;;13681:28:6;;;;-1:-1:-1;;;;;13681:26:6;;;;;:28;;;;;;;;;;;;;;:26;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13660:18;;;:49;13827:21;;;;13814:35;;-1:-1:-1;;;13814:35:6;;-1:-1:-1;;;;;21983:32:504;;;13814:35:6;;;21965:51:504;13814:12:6;;;;;;21938:18:504;;13814:35:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;13790:21;;;:59;-1:-1:-1;;;;;13894:30:6;;;:12;;;:30;;;13977:21;;;;13937:62;;-1:-1:-1;;;13937:62:6;;21983:32:504;;13937:62:6;;;21965:51:504;13894:30:6;13937:39;;21938:18:504;;13937:62:6;;;;;;;;;;;;;;;;;;-1:-1:-1;13937:62:6;;;;;;;;-1:-1:-1;;13937:62:6;;;;;;;;;;;;:::i;:::-;;;13933:160;;;;;-1:-1:-1;;;;;14044:31:6;:12;;;:31;13933:160;14152:24;14127:5;:22;;:49;;;;;14206:6;-1:-1:-1;;;;;14206:28:6;;:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14184:5;:19;;:52;;;;;14261:6;-1:-1:-1;;;;;14261:23:6;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14244:5;:14;;:42;;;;;14311:6;-1:-1:-1;;;;;14311:23:6;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14294:14;;;:42;14373:49;;-1:-1:-1;;;14373:49:6;;-1:-1:-1;;;;;21983:32:504;;;14373:49:6;;;21965:51:504;14373:32:6;;;;;21938:18:504;;14373:49:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14344:78;;:26;;;:78;14457:47;;-1:-1:-1;;;14457:47:6;;-1:-1:-1;;;;;21983:32:504;;;14457:47:6;;;21965:51:504;14457:30:6;;;;;21938:18:504;;14457:47:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;14430:74;;:24;;;:74;14562:21;;14430:5;;14562:14;;14577:5;;14562:21;;;;;;:::i;:::-;;;;;;:29;;;;14599:7;;;;;:::i;:::-;;;;12278:2335;;;;;12233:2380;12273:3;;;;:::i;:::-;;;;12233:2380;;;-1:-1:-1;14627:14:6;;11710:2937;-1:-1:-1;;;;;;;11710:2937:6:o;14651:1067::-;14782:27;14817:44;14869:51;14935:28;14966:11;-1:-1:-1;;;;;14966:25:6;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14966:27:6;;;;;;;;;;;;:::i;:::-;14935:58;;15027:11;:18;-1:-1:-1;;;;;15013:33:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15013:33:6;;15000:46;;15096:11;:18;-1:-1:-1;;;;;15082:33:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15082:33:6;;15052:63;;15172:11;:18;-1:-1:-1;;;;;15161:30:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;15161:30:6;;15121:70;;15203:9;15198:516;15222:11;:18;15218:1;:22;15198:516;;;15255:25;15291:11;15303:1;15291:14;;;;;;;;:::i;:::-;;;;;;;15255:51;;15347:13;-1:-1:-1;;;;;15318:43:6;:17;-1:-1:-1;;;;;15318:43:6;;15314:394;;15389:17;15373:10;15384:1;15373:13;;;;;;;;:::i;:::-;-1:-1:-1;;;;;15373:33:6;;;:13;;;;;;;;;:33;15449:77;;-1:-1:-1;;;15449:77:6;;33979:15:504;;;15449:77:6;;;33961:34:504;34031:15;;;34011:18;;;34004:43;15449:34:6;;;;;;33896:18:504;;15449:77:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15416:27;15444:1;15416:30;;;;;;;;:::i;:::-;;;;;;;;;;:110;15579:120;;-1:-1:-1;;;15579:120:6;;-1:-1:-1;;;;;33979:15:504;;;15579:120:6;;;33961:34:504;34031:15;;;34011:18;;;34004:43;15579:47:6;;;;;33896:18:504;;15579:120:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;15536:37;15574:1;15536:40;;;;;;;;:::i;:::-;:163;;;:40;;;;;;;;;;;:163;15314:394;-1:-1:-1;15242:3:6;;;;:::i;:::-;;;;15198:516;;;;14929:789;14651:1067;;;;;:::o;7943:766::-;8018:22;8042:13;8063:27;8113:5;:12;-1:-1:-1;;;;;8093:33:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8093:33:6;;;;;;;;;;;;;;;;;8063:63;;8132:21;8167:5;:12;-1:-1:-1;;;;;8156:24:6;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;8156:24:6;;8132:48;;8192:9;8187:489;8211:5;:12;8207:1;:16;8187:489;;;8242:4;-1:-1:-1;;;;;8242:19:6;;8279:5;8285:1;8279:8;;;;;;;;:::i;:::-;;;;;;;:20;;;8242:59;;;;;;;;;;;;;;-1:-1:-1;;;;;21983:32:504;;;;21965:51;;21953:2;21938:18;;21797:225;8242:59:6;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;8242:59:6;;;;;;;;;;;;:::i;:::-;;;8238:432;;8657:4;8644:7;8652:1;8644:10;;;;;;;;:::i;:::-;:17;;;:10;;;;;;;;;;;:17;8238:432;;;8519:99;;;;;;;;8533:12;8519:99;;;;8547:12;8519:99;;;;8561:17;8519:99;;;;8580:18;8519:99;;;;8600:17;8519:99;;;;;8509:4;8514:1;8509:7;;;;;;;;:::i;:::-;;;;;;:109;;;;8302:325;;;;;8238:432;8225:3;;;;:::i;:::-;;;;8187:489;;;-1:-1:-1;8690:4:6;;8696:7;;-1:-1:-1;7943:766:6;-1:-1:-1;;7943:766:6:o;15944:513::-;-1:-1:-1;;;;;16105:16:6;;;;;;:9;:16;;;;;:23;;16099:37;;16013:13;;;;16099:37;;;:::i;:::-;:42;;-1:-1:-1;16095:118:6;;-1:-1:-1;;;;;16159:16:6;;;;;;:9;:16;;;;;16151:55;;16182:23;;;;16159:16;;16151:55;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15944:513;;;:::o;16095:118::-;16266:30;16316:5;16266:56;;16328:19;16350:13;-1:-1:-1;;;;;16350:18:6;;:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16350:20:6;;;;;;;;;;;;:::i;:::-;16328:42;;16376:21;16400:13;-1:-1:-1;;;;;16400:20:6;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16400:22:6;;;;;;;;;;;;:::i;:::-;16437:5;;16376:46;;-1:-1:-1;15944:513:6;;-1:-1:-1;;;;15944:513:6:o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;14:258:504;86:1;96:113;110:6;107:1;104:13;96:113;;;186:11;;;180:18;167:11;;;160:39;132:2;125:10;96:113;;;227:6;224:1;221:13;218:48;;;262:1;253:6;248:3;244:16;237:27;218:48;;14:258;;;:::o;277:::-;319:3;357:5;351:12;384:6;379:3;372:19;400:63;456:6;449:4;444:3;440:14;433:4;426:5;422:16;400:63;:::i;:::-;517:2;496:15;-1:-1:-1;;492:29:504;483:39;;;;524:4;479:50;;277:258;-1:-1:-1;;277:258:504:o;540:220::-;689:2;678:9;671:21;652:4;709:45;750:2;739:9;735:18;727:6;709:45;:::i;765:149::-;-1:-1:-1;;;;;858:31:504;;848:42;;838:70;;904:1;901;894:12;838:70;765:149;:::o;919:450::-;1013:6;1021;1074:2;1062:9;1053:7;1049:23;1045:32;1042:52;;;1090:1;1087;1080:12;1042:52;1129:9;1116:23;1148:49;1191:5;1148:49;:::i;:::-;1216:5;-1:-1:-1;1273:2:504;1258:18;;1245:32;1286:51;1245:32;1286:51;:::i;:::-;1356:7;1346:17;;;919:450;;;;;:::o;1579:3314::-;1775:4;1804:2;1844;1833:9;1829:18;1874:2;1863:9;1856:21;1897:6;1932;1926:13;1963:6;1955;1948:22;1989:2;1979:12;;2022:2;2011:9;2007:18;2000:25;;2084:2;2074:6;2071:1;2067:14;2056:9;2052:30;2048:39;2122:2;2114:6;2110:15;2143:1;2153:2711;2167:6;2164:1;2161:13;2153:2711;;;2232:22;;;-1:-1:-1;;2228:36:504;2216:49;;2288:13;;2362:9;;-1:-1:-1;;;;;1440:31:504;1428:44;;2324:6;2419:11;;;2413:18;-1:-1:-1;;;;;1440:31:504;;2477:15;;;1428:44;2444:49;2542:2;2538;2534:11;2528:18;2583:2;2578;2570:6;2566:15;2559:27;2613:50;2659:2;2651:6;2647:15;2631:14;2613:50;:::i;:::-;2599:64;;;2686:4;2739:2;2735;2731:11;2725:18;2792:6;2784;2780:19;2775:2;2767:6;2763:15;2756:44;2827:41;2861:6;2845:14;2827:41;:::i;:::-;2891:4;2938:11;;;2932:18;2915:15;;;2908:43;2974:4;3021:11;;;3015:18;2998:15;;;2991:43;3057:4;3104:11;;;3098:18;3081:15;;;3074:43;3140:4;3187:11;;;3181:18;3164:15;;;3157:43;3224:6;3274:12;;;3268:19;3250:16;;;3243:45;3312:6;3362:12;;;3356:19;3338:16;;;3331:45;3400:6;3450:12;;;3444:19;3426:16;;;3419:45;3488:6;3538:12;;;3532:19;3514:16;;;3507:45;3576:6;3626:12;;;3620:19;3602:16;;;3595:45;3664:6;3711:12;;;3705:19;1553:13;1546:21;3769:16;;;1534:34;3810:6;3860:12;;;3854:19;3836:16;;;3829:45;3898:6;3948:12;;;3942:19;3924:16;;;3917:45;3986:6;4033:12;;;4027:19;-1:-1:-1;;;;;1440:31:504;4094:16;;;1428:44;4135:6;4185:12;;;4179:19;4161:16;;;4154:45;4223:6;4273:12;;;4267:19;4249:16;;;4242:45;4311:6;4361:12;;;4355:19;4337:16;;;4330:45;4399:6;4449:12;;;4443:19;4425:16;;;4418:45;4487:6;4534:12;;;4528:19;1553:13;1546:21;4592:16;;;1534:34;4633:6;4680:12;;;4674:19;1553:13;1546:21;4738:16;;;;1534:34;;;;-1:-1:-1;;;4842:12:504;;;;4807:15;;;;2189:1;2182:9;2153:2711;;;-1:-1:-1;4881:6:504;;1579:3314;-1:-1:-1;;;;;;;;1579:3314:504:o;4898:282::-;4974:6;5027:2;5015:9;5006:7;5002:23;4998:32;4995:52;;;5043:1;5040;5033:12;4995:52;5082:9;5069:23;5101:49;5144:5;5101:49;:::i;5185:461::-;5238:3;5276:5;5270:12;5303:6;5298:3;5291:19;5329:4;5358:2;5353:3;5349:12;5342:19;;5395:2;5388:5;5384:14;5416:1;5426:195;5440:6;5437:1;5434:13;5426:195;;;5505:13;;-1:-1:-1;;;;;5501:39:504;5489:52;;5561:12;;;;5596:15;;;;5537:1;5455:9;5426:195;;;-1:-1:-1;5637:3:504;;5185:461;-1:-1:-1;;;;;5185:461:504:o;5651:435::-;5704:3;5742:5;5736:12;5769:6;5764:3;5757:19;5795:4;5824:2;5819:3;5815:12;5808:19;;5861:2;5854:5;5850:14;5882:1;5892:169;5906:6;5903:1;5900:13;5892:169;;;5967:13;;5955:26;;6001:12;;;;6036:15;;;;5928:1;5921:9;5892:169;;6091:448;6141:3;6179:5;6173:12;6206:6;6201:3;6194:19;6232:4;6261:2;6256:3;6252:12;6245:19;;6298:2;6291:5;6287:14;6319:1;6329:185;6343:6;6340:1;6337:13;6329:185;;;6418:13;;6411:21;6404:29;6392:42;;6454:12;;;;6489:15;;;;6365:1;6358:9;6329:185;;6544:733;6901:3;6890:9;6883:22;6864:4;6928:57;6980:3;6969:9;6965:19;6957:6;6928:57;:::i;:::-;7033:9;7025:6;7021:22;7016:2;7005:9;7001:18;6994:50;7067:44;7104:6;7096;7067:44;:::i;:::-;7053:58;;7159:9;7151:6;7147:22;7142:2;7131:9;7127:18;7120:50;7187:41;7221:6;7213;7187:41;:::i;:::-;7179:49;;;7264:6;7259:2;7248:9;7244:18;7237:34;6544:733;;;;;;;:::o;7282:816::-;7412:6;7420;7428;7436;7444;7452;7505:3;7493:9;7484:7;7480:23;7476:33;7473:53;;;7522:1;7519;7512:12;7473:53;7561:9;7548:23;7580:49;7623:5;7580:49;:::i;:::-;7648:5;-1:-1:-1;7705:2:504;7690:18;;7677:32;7718:51;7677:32;7718:51;:::i;:::-;7788:7;-1:-1:-1;7847:2:504;7832:18;;7819:32;7860:51;7819:32;7860:51;:::i;:::-;7282:816;;;;-1:-1:-1;7930:7:504;;7984:2;7969:18;;7956:32;;-1:-1:-1;8035:3:504;8020:19;;8007:33;;8087:3;8072:19;;;8059:33;;-1:-1:-1;7282:816:504;-1:-1:-1;;7282:816:504:o;8581:167::-;8664:20;;8693:49;8664:20;8693:49;:::i;:::-;8581:167;;;:::o;8753:127::-;8814:10;8809:3;8805:20;8802:1;8795:31;8845:4;8842:1;8835:15;8869:4;8866:1;8859:15;8885:253;8957:2;8951:9;8999:4;8987:17;;-1:-1:-1;;;;;9019:34:504;;9055:22;;;9016:62;9013:88;;;9081:18;;:::i;:::-;9117:2;9110:22;8885:253;:::o;9143:275::-;9214:2;9208:9;9279:2;9260:13;;-1:-1:-1;;9256:27:504;9244:40;;-1:-1:-1;;;;;9299:34:504;;9335:22;;;9296:62;9293:88;;;9361:18;;:::i;:::-;9397:2;9390:22;9143:275;;-1:-1:-1;9143:275:504:o;9423:187::-;9472:4;-1:-1:-1;;;;;9497:6:504;9494:30;9491:56;;;9527:18;;:::i;:::-;-1:-1:-1;9593:2:504;9572:15;-1:-1:-1;;9568:29:504;9599:4;9564:40;;9423:187::o;9615:464::-;9658:5;9711:3;9704:4;9696:6;9692:17;9688:27;9678:55;;9729:1;9726;9719:12;9678:55;9765:6;9752:20;9796:49;9812:32;9841:2;9812:32;:::i;:::-;9796:49;:::i;:::-;9870:2;9861:7;9854:19;9916:3;9909:4;9904:2;9896:6;9892:15;9888:26;9885:35;9882:55;;;9933:1;9930;9923:12;9882:55;9998:2;9991:4;9983:6;9979:17;9972:4;9963:7;9959:18;9946:55;10046:1;10021:16;;;10039:4;10017:27;10010:38;;;;10025:7;9615:464;-1:-1:-1;;;9615:464:504:o;10084:183::-;10144:4;-1:-1:-1;;;;;10169:6:504;10166:30;10163:56;;;10199:18;;:::i;:::-;-1:-1:-1;10244:1:504;10240:14;10256:4;10236:25;;10084:183::o;10272:755::-;10326:5;10379:3;10372:4;10364:6;10360:17;10356:27;10346:55;;10397:1;10394;10387:12;10346:55;10433:6;10420:20;10459:4;10483:60;10499:43;10539:2;10499:43;:::i;10483:60::-;10577:15;;;10663:1;10659:10;;;;10647:23;;10643:32;;;10608:12;;;;10687:15;;;10684:35;;;10715:1;10712;10705:12;10684:35;10751:2;10743:6;10739:15;10763:235;10779:6;10774:3;10771:15;10763:235;;;10859:3;10846:17;10876:49;10919:5;10876:49;:::i;:::-;10938:18;;10976:12;;;;10796;;10763:235;;;-1:-1:-1;11016:5:504;10272:755;-1:-1:-1;;;;;;10272:755:504:o;11032:888::-;11085:5;11138:3;11131:4;11123:6;11119:17;11115:27;11105:55;;11156:1;11153;11146:12;11105:55;11192:6;11179:20;11218:4;11242:60;11258:43;11298:2;11258:43;:::i;11242:60::-;11336:15;;;11422:1;11418:10;;;;11406:23;;11402:32;;;11367:12;;;;11446:15;;;11443:35;;;11474:1;11471;11464:12;11443:35;11510:2;11502:6;11498:15;11522:369;11538:6;11533:3;11530:15;11522:369;;;11624:3;11611:17;-1:-1:-1;;;;;11647:11:504;11644:35;11641:125;;;11720:1;11749:2;11745;11738:14;11641:125;11791:57;11844:3;11839:2;11825:11;11817:6;11813:24;11809:33;11791:57;:::i;:::-;11779:70;;-1:-1:-1;11869:12:504;;;;11555;;11522:369;;11925:2061;12298:6;12306;12314;12322;12330;12338;12346;12354;12362;12415:3;12403:9;12394:7;12390:23;12386:33;12383:53;;;12432:1;12429;12422:12;12383:53;12455:44;12489:9;12455:44;:::i;:::-;12445:54;;12550:2;12539:9;12535:18;12522:32;-1:-1:-1;;;;;12614:2:504;12606:6;12603:14;12600:34;;;12630:1;12627;12620:12;12600:34;12653:50;12695:7;12686:6;12675:9;12671:22;12653:50;:::i;:::-;12643:60;;12756:2;12745:9;12741:18;12728:32;12712:48;;12785:2;12775:8;12772:16;12769:36;;;12801:1;12798;12791:12;12769:36;12824:52;12868:7;12857:8;12846:9;12842:24;12824:52;:::i;:::-;12814:62;;12929:2;12918:9;12914:18;12901:32;12885:48;;12958:2;12948:8;12945:16;12942:36;;;12974:1;12971;12964:12;12942:36;12997:63;13052:7;13041:8;13030:9;13026:24;12997:63;:::i;:::-;12987:73;;13113:3;13102:9;13098:19;13085:33;13069:49;;13143:2;13133:8;13130:16;13127:36;;;13159:1;13156;13149:12;13127:36;13182:62;13236:7;13225:8;13214:9;13210:24;13182:62;:::i;:::-;13172:72;;13297:3;13286:9;13282:19;13269:33;13253:49;;13327:2;13317:8;13314:16;13311:36;;;13343:1;13340;13333:12;13311:36;13366:62;13420:7;13409:8;13398:9;13394:24;13366:62;:::i;:::-;13356:72;;13481:3;13470:9;13466:19;13453:33;13437:49;;13511:2;13501:8;13498:16;13495:36;;;13527:1;13524;13517:12;13495:36;13550:62;13604:7;13593:8;13582:9;13578:24;13550:62;:::i;:::-;13540:72;;13665:3;13654:9;13650:19;13637:33;13621:49;;13695:2;13685:8;13682:16;13679:36;;;13711:1;13708;13701:12;13679:36;13734:62;13788:7;13777:8;13766:9;13762:24;13734:62;:::i;:::-;13724:72;;13849:3;13838:9;13834:19;13821:33;13805:49;;13879:2;13869:8;13866:16;13863:36;;;13895:1;13892;13885:12;13863:36;;13918:62;13972:7;13961:8;13950:9;13946:24;13918:62;:::i;:::-;13908:72;;;11925:2061;;;;;;;;;;;:::o;14261:1202::-;14318:3;14356:5;14350:12;14383:6;14378:3;14371:19;14409:4;14450:2;14445:3;14441:12;14475:11;14502;14495:18;;14552:6;14549:1;14545:14;14538:5;14534:26;14522:38;;14594:2;14587:5;14583:14;14615:1;14625:812;14639:6;14636:1;14633:13;14625:812;;;14710:5;14704:4;14700:16;14695:3;14688:29;14746:6;14740:13;14776:4;14819:2;14813:9;14848:2;14842:4;14835:16;14878:46;14920:2;14914:4;14910:13;14896:12;14878:46;:::i;:::-;14965:11;;;14959:18;-1:-1:-1;;;;;15054:23:504;;;15039:13;;;15032:46;15101:4;15150:11;;;15144:18;15140:27;;;15125:13;;;15118:50;15191:4;15236:11;;;15230:18;15215:13;;;15208:41;15272:4;15317:11;;;15311:18;15296:13;;;;15289:41;;;;-1:-1:-1;;15415:12:504;;;;15380:15;;;;15017:1;14654:9;14625:812;;15468:616;15520:3;15558:5;15552:12;15585:6;15580:3;15573:19;15611:4;15652:2;15647:3;15643:12;15677:11;15704;15697:18;;15754:6;15751:1;15747:14;15740:5;15736:26;15724:38;;15796:2;15789:5;15785:14;15817:1;15827:231;15841:6;15838:1;15835:13;15827:231;;;15912:5;15906:4;15902:16;15897:3;15890:29;15940:38;15973:4;15964:6;15958:13;15940:38;:::i;:::-;16036:12;;;;15932:46;-1:-1:-1;16001:15:504;;;;15863:1;15856:9;15827:231;;16089:2061;16565:4;16594:3;16624:2;16613:9;16606:21;16650:56;16702:2;16691:9;16687:18;16679:6;16650:56;:::i;:::-;16725:2;16775:9;16767:6;16763:22;16758:2;16747:9;16743:18;16736:50;16809:48;16850:6;16842;16809:48;:::i;:::-;16795:62;;16876:2;16926:9;16918:6;16914:22;16909:2;16898:9;16894:18;16887:50;16957:6;16992;16986:13;17023:6;17015;17008:22;17058:2;17050:6;17046:15;17039:22;;17117:2;17107:6;17104:1;17100:14;17092:6;17088:27;17084:36;17155:2;17147:6;17143:15;17176:1;17186:839;17200:6;17197:1;17194:13;17186:839;;;17290:2;17286:7;17277:6;17269;17265:19;17261:33;17256:3;17249:46;17324:6;17318:13;17354:4;17392:2;17386:9;17378:6;17371:25;17447:2;17443;17439:11;17433:18;17428:2;17420:6;17416:15;17409:43;17499:2;17495;17491:11;17485:18;17540:2;17535;17527:6;17523:15;17516:27;17570:59;17625:2;17617:6;17613:15;17599:12;17570:59;:::i;:::-;17556:73;;;17652:4;17705:2;17701;17697:11;17691:18;17758:6;17750;17746:19;17741:2;17733:6;17729:15;17722:44;17793:51;17837:6;17821:14;17793:51;:::i;:::-;17901:11;;;17895:18;17888:26;17881:34;17864:15;;;17857:59;;;;-1:-1:-1;;18003:12:504;;;;17779:65;-1:-1:-1;17968:15:504;;;;17222:1;17215:9;17186:839;;;17190:3;;18075:9;18067:6;18063:22;18056:4;18045:9;18041:20;18034:52;18103:41;18137:6;18129;18103:41;:::i;:::-;18095:49;16089:2061;-1:-1:-1;;;;;;;;;;;;;16089:2061:504:o;18610:710::-;18965:6;18954:9;18947:25;19008:6;19003:2;18992:9;18988:18;18981:34;19051:3;19046:2;19035:9;19031:18;19024:31;18928:4;19078:57;19130:3;19119:9;19115:19;19107:6;19078:57;:::i;:::-;19183:9;19175:6;19171:22;19166:2;19155:9;19151:18;19144:50;19211:43;19247:6;19239;19211:43;:::i;:::-;19203:51;;;19305:6;19298:14;19291:22;19285:3;19274:9;19270:19;19263:51;18610:710;;;;;;;;:::o;19325:465::-;19582:2;19571:9;19564:21;19545:4;19608:56;19660:2;19649:9;19645:18;19637:6;19608:56;:::i;:::-;19712:9;19704:6;19700:22;19695:2;19684:9;19680:18;19673:50;19740:44;19777:6;19769;19740:44;:::i;:::-;19732:52;19325:465;-1:-1:-1;;;;;19325:465:504:o;19795:669::-;20130:2;20119:9;20112:21;20093:4;20156:56;20208:2;20197:9;20193:18;20185:6;20156:56;:::i;:::-;20260:9;20252:6;20248:22;20243:2;20232:9;20228:18;20221:50;20294:44;20331:6;20323;20294:44;:::i;:::-;20280:58;;20386:9;20378:6;20374:22;20369:2;20358:9;20354:18;20347:50;20414:44;20451:6;20443;20414:44;:::i;20469:805::-;20854:3;20843:9;20836:22;20817:4;20881:57;20933:3;20922:9;20918:19;20910:6;20881:57;:::i;:::-;20986:9;20978:6;20974:22;20969:2;20958:9;20954:18;20947:50;21020:44;21057:6;21049;21020:44;:::i;:::-;21006:58;;21112:9;21104:6;21100:22;21095:2;21084:9;21080:18;21073:50;21140:41;21174:6;21166;21140:41;:::i;:::-;21212:2;21197:18;;21190:34;;;;-1:-1:-1;;21255:3:504;21240:19;21233:35;21132:49;20469:805;-1:-1:-1;;;20469:805:504:o;21279:513::-;21580:2;21569:9;21562:21;21543:4;21606:56;21658:2;21647:9;21643:18;21635:6;21606:56;:::i;:::-;21710:9;21702:6;21698:22;21693:2;21682:9;21678:18;21671:50;21738:48;21779:6;21771;21738:48;:::i;22027:118::-;22113:5;22106:13;22099:21;22092:5;22089:32;22079:60;;22135:1;22132;22125:12;22150:241;22206:6;22259:2;22247:9;22238:7;22234:23;22230:32;22227:52;;;22275:1;22272;22265:12;22227:52;22314:9;22301:23;22333:28;22355:5;22333:28;:::i;22396:380::-;22475:1;22471:12;;;;22518;;;22539:61;;22593:4;22585:6;22581:17;22571:27;;22539:61;22646:2;22638:6;22635:14;22615:18;22612:38;22609:161;;;22692:10;22687:3;22683:20;22680:1;22673:31;22727:4;22724:1;22717:15;22755:4;22752:1;22745:15;22609:161;;22396:380;;;:::o;22989:991::-;23101:6;23132:2;23175;23163:9;23154:7;23150:23;23146:32;23143:52;;;23191:1;23188;23181:12;23143:52;23224:9;23218:16;-1:-1:-1;;;;;23249:6:504;23246:30;23243:50;;;23289:1;23286;23279:12;23243:50;23312:22;;23365:4;23357:13;;23353:27;-1:-1:-1;23343:55:504;;23394:1;23391;23384:12;23343:55;23423:2;23417:9;23446:60;23462:43;23502:2;23462:43;:::i;23446:60::-;23540:15;;;23622:1;23618:10;;;;23610:19;;23606:28;;;23571:12;;;;23646:19;;;23643:39;;;23678:1;23675;23668:12;23643:39;23702:11;;;;23722:228;23738:6;23733:3;23730:15;23722:228;;;23811:3;23805:10;23828:49;23871:5;23828:49;:::i;:::-;23890:18;;23755:12;;;;23928;;;;23722:228;;;23969:5;22989:991;-1:-1:-1;;;;;;;22989:991:504:o;23985:295::-;24081:6;24134:2;24122:9;24113:7;24109:23;24105:32;24102:52;;;24150:1;24147;24140:12;24102:52;24182:9;24176:16;24201:49;24244:5;24201:49;:::i;24285:184::-;24355:6;24408:2;24396:9;24387:7;24383:23;24379:32;24376:52;;;24424:1;24421;24414:12;24376:52;-1:-1:-1;24447:16:504;;24285:184;-1:-1:-1;24285:184:504:o;24998:368::-;25095:6;25103;25111;25119;25172:3;25160:9;25151:7;25147:23;25143:33;25140:53;;;25189:1;25186;25179:12;25140:53;-1:-1:-1;;25212:16:504;;25268:2;25253:18;;25247:25;25312:2;25297:18;;25291:25;25356:2;25341:18;;;25335:25;25212:16;;25247:25;;-1:-1:-1;25335:25:504;;-1:-1:-1;24998:368:504;-1:-1:-1;24998:368:504:o;25371:127::-;25432:10;25427:3;25423:20;25420:1;25413:31;25463:4;25460:1;25453:15;25487:4;25484:1;25477:15;25503:128;25543:3;25574:1;25570:6;25567:1;25564:13;25561:39;;;25580:18;;:::i;:::-;-1:-1:-1;25616:9:504;;25503:128::o;25636:168::-;25676:7;25742:1;25738;25734:6;25730:14;25727:1;25724:21;25719:1;25712:9;25705:17;25701:45;25698:71;;;25749:18;;:::i;:::-;-1:-1:-1;25789:9:504;;25636:168::o;25809:217::-;25849:1;25875;25865:132;;25919:10;25914:3;25910:20;25907:1;25900:31;25954:4;25951:1;25944:15;25982:4;25979:1;25972:15;25865:132;-1:-1:-1;26011:9:504;;25809:217::o;26031:125::-;26071:4;26099:1;26096;26093:8;26090:34;;;26104:18;;:::i;:::-;-1:-1:-1;26141:9:504;;26031:125::o;27812:127::-;27873:10;27868:3;27864:20;27861:1;27854:31;27904:4;27901:1;27894:15;27928:4;27925:1;27918:15;27944:135;27983:3;-1:-1:-1;;28004:17:504;;28001:43;;;28024:18;;:::i;:::-;-1:-1:-1;28071:1:504;28060:13;;27944:135::o;28283:430::-;28337:5;28390:3;28383:4;28375:6;28371:17;28367:27;28357:55;;28408:1;28405;28398:12;28357:55;28437:6;28431:13;28468:49;28484:32;28513:2;28484:32;:::i;28468:49::-;28542:2;28533:7;28526:19;28588:3;28581:4;28576:2;28568:6;28564:15;28560:26;28557:35;28554:55;;;28605:1;28602;28595:12;28554:55;28618:64;28679:2;28672:4;28663:7;28659:18;28652:4;28644:6;28640:17;28618:64;:::i;28718:1878::-;28787:5;28840:3;28833:4;28825:6;28821:17;28817:27;28807:55;;28858:1;28855;28848:12;28807:55;28887:6;28881:13;28913:4;28937:60;28953:43;28993:2;28953:43;:::i;28937:60::-;29031:15;;;29117:1;29113:10;;;;29101:23;;29097:32;;;29062:12;;;;29141:15;;;29138:35;;;29169:1;29166;29159:12;29138:35;29205:2;29197:6;29193:15;29217:1350;29233:6;29228:3;29225:15;29217:1350;;;29312:3;29306:10;-1:-1:-1;;;;;29389:2:504;29376:11;29373:19;29370:109;;;29433:1;29462:2;29458;29451:14;29370:109;29502:24;;;;29549:4;29577:12;;;-1:-1:-1;;29573:26:504;29569:35;-1:-1:-1;29566:125:504;;;29645:1;29674:2;29670;29663:14;29566:125;29717:22;;:::i;:::-;29782:2;29778;29774:11;29768:18;29815:2;29805:8;29802:16;29799:106;;;29859:1;29888:2;29884;29877:14;29799:106;29932:61;29989:3;29984:2;29973:8;29969:2;29965:17;29961:26;29932:61;:::i;:::-;29925:5;29918:76;;30017:2;30007:12;;30061:2;30057;30053:11;30047:18;30078:51;30121:7;30078:51;:::i;:::-;30149:14;;;30142:31;30197:2;30233:12;;;30227:19;30259:51;30227:19;30259:51;:::i;:::-;30330:14;;;30323:31;;;;30378:3;30424:12;;;30418:19;30401:15;;;30394:44;;;;30481:11;;30475:18;30458:15;;;30451:43;30507:18;;30545:12;;;;29250;;29217:1350;;30601:1160;30752:6;30760;30813:2;30801:9;30792:7;30788:23;30784:32;30781:52;;;30829:1;30826;30819:12;30781:52;30862:9;30856:16;-1:-1:-1;;;;;30932:2:504;30924:6;30921:14;30918:34;;;30948:1;30945;30938:12;30918:34;30986:6;30975:9;30971:22;30961:32;;31031:7;31024:4;31020:2;31016:13;31012:27;31002:55;;31053:1;31050;31043:12;31002:55;31082:2;31076:9;31104:4;31128:60;31144:43;31184:2;31144:43;:::i;31128:60::-;31222:15;;;31304:1;31300:10;;;;31292:19;;31288:28;;;31253:12;;;;31328:19;;;31325:39;;;31360:1;31357;31350:12;31325:39;31384:11;;;;31404:135;31420:6;31415:3;31412:15;31404:135;;;31486:10;;31474:23;;31437:12;;;;31517;;;;31404:135;;;31594:18;;;31588:25;31558:5;;-1:-1:-1;31588:25:504;;-1:-1:-1;;;31625:16:504;;;31622:36;;;31654:1;31651;31644:12;31622:36;;31677:78;31747:7;31736:8;31725:9;31721:24;31677:78;:::i;:::-;31667:88;;;30601:1160;;;;;:::o;32065:132::-;32141:13;;32163:28;32141:13;32163:28;:::i;32202:306::-;32278:6;32286;32339:2;32327:9;32318:7;32314:23;32310:32;32307:52;;;32355:1;32352;32345:12;32307:52;32387:9;32381:16;32406:28;32428:5;32406:28;:::i;:::-;32498:2;32483:18;;;;32477:25;32453:5;;32477:25;;-1:-1:-1;;;32202:306:504:o;33012:245::-;33079:6;33132:2;33120:9;33111:7;33107:23;33103:32;33100:52;;;33148:1;33145;33138:12;33100:52;33180:9;33174:16;33199:28;33221:5;33199:28;:::i;33454:273::-;33522:6;33575:2;33563:9;33554:7;33550:23;33546:32;33543:52;;;33591:1;33588;33581:12;33543:52;33623:9;33617:16;33673:4;33666:5;33662:16;33655:5;33652:27;33642:55;;33693:1;33690;33683:12;34601:896;34665:5;34718:3;34711:4;34703:6;34699:17;34695:27;34685:55;;34736:1;34733;34726:12;34685:55;34765:6;34759:13;34791:4;34815:60;34831:43;34871:2;34831:43;:::i;34815:60::-;34909:15;;;34995:1;34991:10;;;;34979:23;;34975:32;;;34940:12;;;;35019:15;;;35016:35;;;35047:1;35044;35037:12;35016:35;35083:2;35075:6;35071:15;35095:373;35111:6;35106:3;35103:15;35095:373;;;35190:3;35184:10;-1:-1:-1;;;;;35213:11:504;35210:35;35207:125;;;35286:1;35315:2;35311;35304:14;35207:125;35357:68;35421:3;35416:2;35402:11;35394:6;35390:24;35386:33;35357:68;:::i;:::-;35345:81;;-1:-1:-1;35446:12:504;;;;35128;;35095:373;;35502:1437;35665:6;35673;35681;35689;35697;35750:3;35738:9;35729:7;35725:23;35721:33;35718:53;;;35767:1;35764;35757:12;35718:53;35796:9;35790:16;35780:26;;35825:2;35867;35856:9;35852:18;35846:25;35836:35;;35915:2;35904:9;35900:18;35894:25;-1:-1:-1;;;;;35979:2:504;35971:6;35968:14;35965:34;;;35995:1;35992;35985:12;35965:34;36033:6;36022:9;36018:22;36008:32;;36078:7;36071:4;36067:2;36063:13;36059:27;36049:55;;36100:1;36097;36090:12;36049:55;36129:2;36123:9;36152:60;36168:43;36208:2;36168:43;:::i;36152:60::-;36246:15;;;36328:1;36324:10;;;;36316:19;;36312:28;;;36277:12;;;;36352:19;;;36349:39;;;36384:1;36381;36374:12;36349:39;36408:11;;;;36428:228;36444:6;36439:3;36436:15;36428:228;;;36517:3;36511:10;36534:49;36577:5;36534:49;:::i;:::-;36596:18;;36461:12;;;;36634;;;;36428:228;;;36726:2;36711:18;;36705:25;36675:5;;-1:-1:-1;36705:25:504;-1:-1:-1;;;36742:16:504;;;36739:36;;;36771:1;36768;36761:12;36739:36;;;36794:73;36859:7;36848:8;36837:9;36833:24;36794:73;:::i;:::-;36784:83;;;36886:47;36928:3;36917:9;36913:19;36886:47;:::i;:::-;36876:57;;35502:1437;;;;;;;;:::o;36944:337::-;37024:6;37077:2;37065:9;37056:7;37052:23;37048:32;37045:52;;;37093:1;37090;37083:12;37045:52;37126:9;37120:16;-1:-1:-1;;;;;37151:6:504;37148:30;37145:50;;;37191:1;37188;37181:12;37145:50;37214:61;37267:7;37258:6;37247:9;37243:22;37214:61;:::i", + "linkReferences": {} + }, + "methodIdentifiers": { + "directory()": "c41c2f24", + "getBorrowCapsDataForAsset(address)": "a505596a", + "getBorrowCapsForAsset(address)": "1568683a", + "getHealthFactor(address,address)": "57c89a7d", + "getHealthFactorHypothetical(address,address,address,uint256,uint256,uint256)": "1bb998ba", + "getPoolAssetsByUser(address,address)": "0c5eb5a4", + "getPoolAssetsWithData(address)": "27e16c1f", + "getPoolSummary(address)": "59d2fea6", + "getPoolsByAccountWithData(address)": "51678684", + "getPoolsOIonicrWithData(address)": "ef88b53c", + "getPublicPoolsByVerificationWithData(bool)": "d64996e5", + "getPublicPoolsWithData()": "d0a164fb", + "getSupplyCapsDataForPool(address)": "a0795487", + "getSupplyCapsForPool(address)": "798b9780", + "getWhitelistedPoolsByAccount(address)": "c3530a63", + "getWhitelistedPoolsByAccountWithData(address)": "70733375", + "initialize(address,string,string,address[],string[],string[],string[],string[],string[])": "3a1eb656", + "name()": "06fdde03", + "symbol()": "95d89b41" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/PoolLensSecondary.json b/packages/sdk/deployments/bob/PoolLensSecondary.json new file mode 100644 index 000000000..9b6cfc861 --- /dev/null +++ b/packages/sdk/deployments/bob/PoolLensSecondary.json @@ -0,0 +1,1142 @@ +{ + "address": "0x3242caC557419AA00270d5b11A7f6795dEBAd5a4", + "abi": [ + { + "type": "function", + "name": "directory", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract PoolDirectory" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getFlywheelsToClaim", + "inputs": [ + { + "name": "user", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "address[]", + "internalType": "contract IonicComptroller[]" + }, + { + "name": "", + "type": "address[][]", + "internalType": "address[][]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getMaxBorrow", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenModify", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getMaxRedeem", + "inputs": [ + { + "name": "account", + "type": "address", + "internalType": "address" + }, + { + "name": "cTokenModify", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getPoolOwnership", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + }, + { + "name": "", + "type": "bool", + "internalType": "bool" + }, + { + "name": "", + "type": "bool", + "internalType": "bool" + }, + { + "name": "", + "type": "tuple[]", + "internalType": "struct PoolLensSecondary.CTokenOwnership[]", + "components": [ + { + "name": "cToken", + "type": "address", + "internalType": "address" + }, + { + "name": "admin", + "type": "address", + "internalType": "address" + }, + { + "name": "adminHasRights", + "type": "bool", + "internalType": "bool" + }, + { + "name": "ionicAdminHasRights", + "type": "bool", + "internalType": "bool" + } + ] + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRewardSpeedsByPool", + "inputs": [ + { + "name": "comptroller", + "type": "address", + "internalType": "contract IonicComptroller" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "contract ICErc20[]" + }, + { + "name": "", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "", + "type": "uint256[][]", + "internalType": "uint256[][]" + }, + { + "name": "", + "type": "uint256[][]", + "internalType": "uint256[][]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRewardSpeedsByPools", + "inputs": [ + { + "name": "comptrollers", + "type": "address[]", + "internalType": "contract IonicComptroller[]" + } + ], + "outputs": [ + { + "name": "", + "type": "address[][]", + "internalType": "contract ICErc20[][]" + }, + { + "name": "", + "type": "address[][]", + "internalType": "address[][]" + }, + { + "name": "", + "type": "address[][]", + "internalType": "address[][]" + }, + { + "name": "", + "type": "uint256[][][]", + "internalType": "uint256[][][]" + }, + { + "name": "", + "type": "uint256[][][]", + "internalType": "uint256[][][]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getRewardsDistributorsBySupplier", + "inputs": [ + { + "name": "supplier", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "address[]", + "internalType": "contract IonicComptroller[]" + }, + { + "name": "", + "type": "address[][]", + "internalType": "address[][]" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUnclaimedRewardsByDistributors", + "inputs": [ + { + "name": "holder", + "type": "address", + "internalType": "address" + }, + { + "name": "distributors", + "type": "address[]", + "internalType": "contract IRewardsDistributor[]" + } + ], + "outputs": [ + { + "name": "", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + }, + { + "name": "", + "type": "address[][]", + "internalType": "contract ICErc20[][]" + }, + { + "name": "", + "type": "uint256[2][][]", + "internalType": "uint256[2][][]" + }, + { + "name": "", + "type": "uint256[]", + "internalType": "uint256[]" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "_directory", + "type": "address", + "internalType": "contract PoolDirectory" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x6c97343e51277e6ea0defbd0f4517713714c154bc881386a9f473044d4931fe6", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x3242caC557419AA00270d5b11A7f6795dEBAd5a4", + "transactionIndex": 2, + "gasUsed": "2627076", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x45af1095411d704a60fb214ef83799d76a88dc4c461e225bb35aab677a57e989", + "transactionHash": "0x6c97343e51277e6ea0defbd0f4517713714c154bc881386a9f473044d4931fe6", + "logs": [], + "blockNumber": 3778059, + "cumulativeGasUsed": "2726700", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "directory", + "outputs": [ + { + "internalType": "contract PoolDirectory", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "user", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getFlywheelsToClaim", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getMaxBorrow", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "account", + "type": "address" + }, + { + "internalType": "contract ICErc20", + "name": "cTokenModify", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getMaxRedeem", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getPoolOwnership", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "bool", + "name": "", + "type": "bool" + }, + { + "internalType": "struct PoolLensSecondary.CTokenOwnership[]", + "name": "", + "type": "tuple[]", + "components": [ + { + "internalType": "address", + "name": "cToken", + "type": "address" + }, + { + "internalType": "address", + "name": "admin", + "type": "address" + }, + { + "internalType": "bool", + "name": "adminHasRights", + "type": "bool" + }, + { + "internalType": "bool", + "name": "ionicAdminHasRights", + "type": "bool" + } + ] + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller", + "name": "comptroller", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRewardSpeedsByPool", + "outputs": [ + { + "internalType": "contract ICErc20[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[][]", + "name": "", + "type": "uint256[][]" + }, + { + "internalType": "uint256[][]", + "name": "", + "type": "uint256[][]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IonicComptroller[]", + "name": "comptrollers", + "type": "address[]" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRewardSpeedsByPools", + "outputs": [ + { + "internalType": "contract ICErc20[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "uint256[][][]", + "name": "", + "type": "uint256[][][]" + }, + { + "internalType": "uint256[][][]", + "name": "", + "type": "uint256[][][]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "supplier", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getRewardsDistributorsBySupplier", + "outputs": [ + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract IonicComptroller[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "address[][]", + "name": "", + "type": "address[][]" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "holder", + "type": "address" + }, + { + "internalType": "contract IRewardsDistributor[]", + "name": "distributors", + "type": "address[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "getUnclaimedRewardsByDistributors", + "outputs": [ + { + "internalType": "address[]", + "name": "", + "type": "address[]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + }, + { + "internalType": "contract ICErc20[][]", + "name": "", + "type": "address[][]" + }, + { + "internalType": "uint256[2][][]", + "name": "", + "type": "uint256[2][][]" + }, + { + "internalType": "uint256[]", + "name": "", + "type": "uint256[]" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract PoolDirectory", + "name": "_directory", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "getFlywheelsToClaim(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getMaxBorrow(address,address)": { + "params": { + "account": "The account to determine liquidity for.", + "cTokenModify": "The market to hypothetically borrow in." + }, + "returns": { + "_0": "Maximum borrow amount." + } + }, + "getMaxRedeem(address,address)": { + "params": { + "account": "The account to determine liquidity for.", + "cTokenModify": "The market to hypothetically redeem in." + }, + "returns": { + "_0": "Maximum redeem amount." + } + }, + "getPoolOwnership(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive. Ideally, we can add the `view` modifier, but many cToken functions potentially modify the state." + }, + "getRewardSpeedsByPool(address)": { + "params": { + "comptroller": "The Ionic pool Comptroller to check." + } + }, + "getRewardSpeedsByPools(address[])": { + "params": { + "comptrollers": "The Ionic pool Comptrollers to check." + } + }, + "getRewardsDistributorsBySupplier(address)": { + "details": "This function is not designed to be called in a transaction: it is too gas-intensive." + }, + "getUnclaimedRewardsByDistributors(address,address[])": { + "params": { + "distributors": "The `RewardsDistributor` contracts to check.", + "holder": "The address to check." + }, + "returns": { + "_0": "For each of `distributors`: total quantity of unclaimed rewards, array of cTokens, array of unaccrued (unclaimed) supply-side and borrow-side rewards per cToken, and quantity of funds available in the distributor." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "directory()": { + "notice": "`PoolDirectory` contract object." + }, + "getFlywheelsToClaim(address)": { + "notice": "The returned list of flywheels contains address(0) for flywheels for which the user has no rewards to claim" + }, + "getMaxBorrow(address,address)": { + "notice": "Determine the maximum borrow amount of a cToken." + }, + "getMaxRedeem(address,address)": { + "notice": "Determine the maximum redeem amount of a cToken." + }, + "getPoolOwnership(address)": { + "notice": "Returns the admin, admin rights, Ionic admin (constant), Ionic admin rights, and an array of cTokens with differing properties." + }, + "getRewardSpeedsByPool(address)": { + "notice": "Returns an array of all markets, an array of all `RewardsDistributor` contracts, an array of reward token addresses for each `RewardsDistributor`, an array of supply speeds for each distributor for each, and their borrow speeds." + }, + "getRewardSpeedsByPools(address[])": { + "notice": "For each `Comptroller`, returns an array of all markets, an array of all `RewardsDistributor` contracts, an array of reward token addresses for each `RewardsDistributor`, an array of supply speeds for each distributor for each, and their borrow speeds." + }, + "getRewardsDistributorsBySupplier(address)": { + "notice": "Returns arrays of indexes, `Comptroller` proxy contracts, and `RewardsDistributor` contracts for Ionic pools supplied to by `account`." + }, + "getUnclaimedRewardsByDistributors(address,address[])": { + "notice": "Returns all unclaimed rewards accrued by the `holder` on `distributors`." + }, + "initialize(address)": { + "notice": "Constructor to set the `PoolDirectory` contract object." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/PoolLensSecondary.sol": "PoolLensSecondary" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/PoolDirectory.sol": { + "keccak256": "0xd3d28cd044a0205a86f0c2d82021a36018ec4b0e95f72064c92bcad99f84f6c8", + "urls": [ + "bzz-raw://0c8ab6e3f922b9165cae038507497be2aed81df002ffe7921e0aa1f10f690531", + "dweb:/ipfs/QmNpfDhHaVPyxXZDY7Si2Bpidneh6Ckr8C4dGhRmA9pEEa" + ], + "license": "UNLICENSED" + }, + "contracts/PoolLensSecondary.sol": { + "keccak256": "0x8b0e06ebd7144d23ab214bf498b184e1a0d796ccc6a19dbc0689057ec23ffb15", + "urls": [ + "bzz-raw://a45254983f8c129fd7c41a12629b6aef4e187486f6a03e281cf1f60dd70378e5", + "dweb:/ipfs/QmXezfugsLvEcSFqxBpm4kA4hPCmUn8UMtyRZK3Q2qKbcG" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/CarefulMath.sol": { + "keccak256": "0x7425598d767521ba25277a7f95273c4705721aef0d7f2cd855cb6a61de709a7c", + "urls": [ + "bzz-raw://a49979cd69acda0dd1e91a6e5b394cd4f507cec7de72551e4b85635d16af4bab", + "dweb:/ipfs/QmT5gYwd9PcGmkopmiiWbJREyjkNdTRTcnAqaYVifTfhaJ" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Comptroller.sol": { + "keccak256": "0x1e1f9dda1735929b60cf601e3b39b8394ceb284a582ab4f0d0614b76a84fc4bd", + "urls": [ + "bzz-raw://1670338a3d0c64b13c2e623acaad068ccb6a7f7650d5d43d555099071bcfd03d", + "dweb:/ipfs/QmSMje4u1Zn7kf8DAybkLs8GPmcggTukTq754RE9eq99YR" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ErrorReporter.sol": { + "keccak256": "0xad342553cda4d7b7e40678c636a406bc2785be2117a29d9b1cb52e747726745e", + "urls": [ + "bzz-raw://86c794810f09043e4ccde9094d26e6a4469ed38e0e6f208834bf20ef84dd58c3", + "dweb:/ipfs/QmcMuo5jaEshUKrTYj17zBzweCzqxMdJkn88GFBm4su1ks" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Exponential.sol": { + "keccak256": "0xf1b6442cbde756ce56dc5507487b1769905147f390fdf88e1d59a66bc3e2161e", + "urls": [ + "bzz-raw://8b5e87572eb0a1a76f8a690892d4afbe22ff99eb57dbb1a387ddae1af977ec2f", + "dweb:/ipfs/QmNPs2jnS1uHN39TnZ3DgSaXsDK7xX1JxKWr1DiGGzdHVS" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ExponentialNoError.sol": { + "keccak256": "0xec0df0038026b4e9c272de575121befd31d3a306fec5f157aaf1625fc08cfe69", + "urls": [ + "bzz-raw://f4eb4f64e099db6dc47bafef030de8f7513060a5b19d743b2946618c527659a3", + "dweb:/ipfs/QmbYLydWAZ1ENxPqRLWTGTCp2eiQfgUn63v4GPf3f7fWs4" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/compound/Unitroller.sol": { + "keccak256": "0xcea89eb6bccd6ab62b57e42d483fd3638a0296ec9aae45d21f80a521004cc9e8", + "urls": [ + "bzz-raw://8454f1397a125363933c4f69241490d3de793ae31ebf770b91d3ba5fda41a289", + "dweb:/ipfs/QmTfmj4JxYvgZetYdEdfkjQ8LUNHyCkW6C849JG3vYdjs6" + ], + "license": "UNLICENSED" + }, + "contracts/external/uniswap/IUniswapV2Pair.sol": { + "keccak256": "0xc30635313c081ea723c128678f4d45c48aac88080d91578e8c4374774d26cba2", + "urls": [ + "bzz-raw://4241df34bd8644d60b50202e64e98decc57a196a48c1f6a4e24b9e989bf22ee5", + "dweb:/ipfs/QmNcTgxetxHYNUzZcHSK9cy2oWTyHveWFqAANueuXhgyL7" + ], + "license": "GPL-3.0-only" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/DiamondExtension.sol": { + "keccak256": "0x6d33291928e3c255f0276fa465dcc5ea88d74a6562241a39ad2e52ae8abaf7bc", + "urls": [ + "bzz-raw://63a90d486258188f5688c68b87fe6f6fa6c3b373cd3636d67ab73dcb3c96cdb4", + "dweb:/ipfs/Qmb6XesvMvz538H5raDriVaBWtE9j98UmfsAQkRXR7rd33" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/strategies/flywheel/IIonicFlywheel.sol": { + "keccak256": "0x2eac249377fab47a9b95faf87537b4413de689bbbb36b3c2d5c8e2d2fe7d799f", + "urls": [ + "bzz-raw://3cf954d5d139ac534943d37566019422424a74a05ee33fbdd5c13589a87bfe7a", + "dweb:/ipfs/QmRy7nLXrzh9AoFu9bh3Bvfn17bTGNmh2FkaUJdDrYumQ1" + ], + "license": "AGPL-3.0-only" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/Create2Upgradeable.sol": { + "keccak256": "0xd4f2e4c252119ec161cc4de7fc6631b0dd840c46e85bf1fc771252924957d5ab", + "urls": [ + "bzz-raw://6e54134f51725b0e057a0fa517e9bbe038888b641a11478d42454964fe4c48c9", + "dweb:/ipfs/QmT3vdhoPFD9HWEp9wgD8FVGUUTMF53FooUzgUDqHzNATB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/tokens/ERC20.sol": { + "keccak256": "0xcdfd8db76b2a3415620e4d18cc5545f3d50de792dbf2c3dd5adb40cbe6f94b10", + "urls": [ + "bzz-raw://57b3ab70cde374af1cf2c9888636e8de6cf660f087b1c9abd805e9271e19fa35", + "dweb:/ipfs/QmNrLDBAHYFjpjSd12jerm1AdBkDqEYUUaXgnT854BUZ97" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50612e8b806100206000396000f3fe608060405234801561001057600080fd5b506004361061009e5760003560e01c806397f35ff01161006657806397f35ff014610148578063998e2d4a1461016b578063c41c2f241461018d578063c4d66de8146101be578063d24eaf13146101d357600080fd5b80631ec18ec0146100a3578063338038fa146100c95780633fc5fab5146100ed578063641290421461011157806384b3403d14610124575b600080fd5b6100b66100b136600461233a565b6101e6565b6040519081526020015b60405180910390f35b6100dc6100d7366004612404565b6101fb565b6040516100c0959493929190612583565b6101006100fb36600461267c565b6107a4565b6040516100c0959493929190612859565b6100b661011f36600461233a565b610a26565b6101376101323660046128c6565b610a34565b6040516100c09594939291906128e3565b61015b6101563660046128c6565b610f51565b6040516100c09493929190612944565b61017e6101793660046128c6565b611659565b6040516100c0939291906129d4565b6000546101a6906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100c0565b6101d16101cc3660046128c6565b61188d565b005b61017e6101e13660046128c6565b611a2f565b60006101f483836001611e1e565b9392505050565b6060806060806060600086516001600160401b0381111561021e5761021e612373565b604051908082528060200260200182016040528015610247578160200160208202803683370190505b509050600087516001600160401b0381111561026557610265612373565b60405190808252806020026020018201604052801561028e578160200160208202803683370190505b509050600088516001600160401b038111156102ac576102ac612373565b6040519080825280602002602001820160405280156102df57816020015b60608152602001906001900390816102ca5790505b509050600089516001600160401b038111156102fd576102fd612373565b60405190808252806020026020018201604052801561033057816020015b606081526020019060019003908161031b5790505b50905060008a516001600160401b0381111561034e5761034e612373565b604051908082528060200260200182016040528015610377578160200160208202803683370190505b50905060005b8b518110156107905760008c828151811061039a5761039a612a3b565b60200260200101519050806001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104069190612a61565b87838151811061041857610418612a3b565b60200260200101906001600160a01b031690816001600160a01b031681525050806001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610476573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261049e9190810190612a7e565b8583815181106104b0576104b0612a3b565b60200260200101819052508482815181106104cd576104cd612a3b565b6020026020010151516001600160401b038111156104ed576104ed612373565b60405190808252806020026020018201604052801561052657816020015b610513612304565b81526020019060019003908161050b5790505b5084838151811061053957610539612a3b565b602002602001018190525060005b85838151811061055957610559612a3b565b60200260200101515181101561064f576105a68f8388868151811061058057610580612a3b565b6020026020010151848151811061059957610599612a3b565b6020026020010151611f0a565b8685815181106105b8576105b8612a3b565b602002602001015183815181106105d1576105d1612a3b565b60200260200101516000600281106105eb576105eb612a3b565b6020020187868151811061060157610601612a3b565b6020026020010151848151811061061a5761061a612a3b565b602002602001015160016002811061063457610634612a3b565b6020020191909152528061064781612b22565b915050610547565b5060405163331faf7160e21b81526001600160a01b038f8116600483015282169063cc7ebdc490602401602060405180830381865afa158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190612b3d565b8683815181106106cc576106cc612a3b565b6020026020010181815250508682815181106106ea576106ea612a3b565b60209081029190910101516040516370a0823160e01b81526001600160a01b038381166004830152909116906370a0823190602401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190612b3d565b83838151811061077257610772612a3b565b6020908102919091010152508061078881612b22565b91505061037d565b50939b929a50909850965090945092505050565b6060806060806060600086516001600160401b038111156107c7576107c7612373565b6040519080825280602002602001820160405280156107fa57816020015b60608152602001906001900390816107e55790505b509050600087516001600160401b0381111561081857610818612373565b60405190808252806020026020018201604052801561084b57816020015b60608152602001906001900390816108365790505b509050600088516001600160401b0381111561086957610869612373565b60405190808252806020026020018201604052801561089c57816020015b60608152602001906001900390816108875790505b509050600089516001600160401b038111156108ba576108ba612373565b6040519080825280602002602001820160405280156108ed57816020015b60608152602001906001900390816108d85790505b50905060008a516001600160401b0381111561090b5761090b612373565b60405190808252806020026020018201604052801561093e57816020015b60608152602001906001900390816109295790505b50905060005b8b51811015610a135761096f8c828151811061096257610962612a3b565b6020026020010151610a34565b8a868151811061098157610981612a3b565b602002602001018a878151811061099a5761099a612a3b565b602002602001018a88815181106109b3576109b3612a3b565b602002602001018a89815181106109cc576109cc612a3b565b602002602001018a8a815181106109e5576109e5612a3b565b6020026020010185905285905285905285905285905250505050508080610a0b90612b22565b915050610944565b50939a9299509097509550909350915050565b60006101f483836000611e1e565b60608060608060606000866001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa49190810190612a7e565b90506060876001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015610b0757506040513d6000823e601f3d908101601f19168201604052610b049190810190612b56565b60015b610b205750604080516000815260208101909152610b23565b90505b600081516001600160401b03811115610b3e57610b3e612373565b604051908082528060200260200182016040528015610b67578160200160208202803683370190505b509050600083516001600160401b03811115610b8557610b85612373565b604051908082528060200260200182016040528015610bb857816020015b6060815260200190600190039081610ba35790505b509050600084516001600160401b03811115610bd657610bd6612373565b604051908082528060200260200182016040528015610c0957816020015b6060815260200190600190039081610bf45790505b50905060005b8451811015610ccf57848181518110610c2a57610c2a612a3b565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c939190612a61565b848281518110610ca557610ca5612a3b565b6001600160a01b039092166020928302919091019091015280610cc781612b22565b915050610c0f565b5060005b8551811015610a13576000868281518110610cf057610cf0612a3b565b6020026020010151905085516001600160401b03811115610d1357610d13612373565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50848381518110610d4f57610d4f612a3b565b602002602001018190525085516001600160401b03811115610d7357610d73612373565b604051908082528060200260200182016040528015610d9c578160200160208202803683370190505b50838381518110610daf57610daf612a3b565b602002602001018190525060005b8651811015610f3c576000878281518110610dda57610dda612a3b565b6020908102919091010151604051636aa875b560e01b81526001600160a01b03858116600483015291925090821690636aa875b590602401602060405180830381865afa158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190612b3d565b868581518110610e6557610e65612a3b565b60200260200101518381518110610e7e57610e7e612a3b565b60209081029190910101526040516303d290cf60e61b81526001600160a01b03848116600483015282169063f4a433c090602401602060405180830381865afa158015610ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef39190612b3d565b858581518110610f0557610f05612a3b565b60200260200101518381518110610f1e57610f1e612a3b565b60209081029190910101525080610f3481612b22565b915050610dbd565b50508080610f4990612b22565b915050610cd3565b600080600060606000856001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190612a61565b90506000866001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110229190612bf4565b90506000876001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110889190612bf4565b90506000886001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110f29190810190612a7e565b90506000805b825181101561133357600083828151811061111557611115612a3b565b6020908102919091010151604051638e8f294b60e01b81526001600160a01b0380831660048301529192506000918e1690638e8f294b906024016040805180830381865afa15801561116b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118f9190612c0f565b5090508061119e575050611321565b6000826001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111fa575060408051601f3d908101601f191682019092526111f791810190612a61565b60015b61120657505050611321565b90506000836001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190612bf4565b90506000846001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d29190612bf4565b90508a6001600160a01b0316836001600160a01b03161415806112f9575089151582151514155b80611308575088151581151514155b1561131b578661131781612b22565b9750505b50505050505b8061132b81612b22565b9150506110f8565b506000816001600160401b0381111561134e5761134e612373565b6040519080825280602002602001820160405280156113a057816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161136c5790505b5090506000805b84518110156116445760008582815181106113c4576113c4612a3b565b6020026020010151905060008e6001600160a01b0316638e8f294b836040518263ffffffff1660e01b815260040161140b91906001600160a01b0391909116815260200190565b6040805180830381865afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b9190612c0f565b5090508061145a575050611632565b6000826001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114b6575060408051601f3d908101601f191682019092526114b391810190612a61565b60015b6114c257505050611632565b90506000836001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190612bf4565b90506000846001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158e9190612bf4565b90508c6001600160a01b0316836001600160a01b03161415806115b557508b151582151514155b806115c457508a151581151514155b1561162c576040518060800160405280866001600160a01b03168152602001846001600160a01b03168152602001831515815260200182151581525088888151811061161257611612612a3b565b6020026020010181905250868061162890612b22565b9750505b50505050505b8061163c81612b22565b9150506113a7565b50959b949a5092985091965091945050505050565b6060806060600080600060029054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116dc9190810190612dac565b91509150600081516001600160401b038111156116fb576116fb612373565b604051908082528060200260200182016040528015611724578160200160208202803683370190505b509050600082516001600160401b0381111561174257611742612373565b60405190808252806020026020018201604052801561177557816020015b60608152602001906001900390816117605790505b50905060005b835181101561187d57600084828151811061179857611798612a3b565b6020026020010151604001519050806001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561180557506040513d6000823e601f3d908101601f191682016040526118029190810190612b56565b60015b61180e5761186a565b8185848151811061182157611821612a3b565b60200260200101906001600160a01b031690816001600160a01b03168152505061184b8b826121b8565b84848151811061185d5761185d612a3b565b6020026020010181905250505b508061187581612b22565b91505061177b565b5092979096509194509092505050565b600054610100900460ff16158080156118ad5750600054600160ff909116105b806118c75750303b1580156118c7575060005460ff166001145b61192f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611952576000805461ff0019166101001790555b6001600160a01b0382166119c35760405162461bcd60e51b815260206004820152603260248201527f506f6f6c4469726563746f727920696e7374616e63652063616e6e6f74206265604482015271103a3432903d32b9379030b2323932b9b99760711b6064820152608401611926565b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611a2b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b606080606060008060029054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015611a88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab09190810190612dac565b9150506000805b8251811015611b8257828181518110611ad257611ad2612a3b565b6020026020010151604001516001600160a01b03166316dc15fe886040518263ffffffff1660e01b8152600401611b1891906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015611b51575060408051601f3d908101601f19168201909252611b4e91810190612bf4565b60015b611b5a57611b70565b8015611b6e5782611b6a81612b22565b9350505b505b80611b7a81612b22565b915050611ab7565b506000816001600160401b03811115611b9d57611b9d612373565b604051908082528060200260200182016040528015611bc6578160200160208202803683370190505b5090506000826001600160401b03811115611be357611be3612373565b604051908082528060200260200182016040528015611c0c578160200160208202803683370190505b5090506000836001600160401b03811115611c2957611c29612373565b604051908082528060200260200182016040528015611c5c57816020015b6060815260200190600190039081611c475790505b5090506000805b8651811015611e0e576000878281518110611c8057611c80612a3b565b6020026020010151604001519050806001600160a01b03166316dc15fe8d6040518263ffffffff1660e01b8152600401611cc991906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015611d02575060408051601f3d908101601f19168201909252611cff91810190612bf4565b60015b611d0b57611dfb565b8015611df95782878581518110611d2457611d24612a3b565b60200260200101818152505081868581518110611d4357611d43612a3b565b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611dc257506040513d6000823e601f3d908101601f19168201604052611dbf9190810190612b56565b60015b611dcb57611deb565b80868681518110611dde57611dde612a3b565b6020026020010181905250505b83611df581612b22565b9450505b505b5080611e0681612b22565b915050611c63565b5092999198509650945050505050565b600080836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e839190612a61565b604051630cbb414760e11b81526001600160a01b0387811660048301528681166024830152851515604483015291925090821690631976828e90606401602060405180830381865afa158015611edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f019190612b3d565b95945050505050565b60405163331faf7160e21b81526001600160a01b038481166004830152600091829182919086169063cc7ebdc490602401602060405180830381865afa158015611f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190612b3d565b60405162e48b0f60e51b81526001600160a01b038681166004830152888116602483015291925090861690631c9161e090604401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b505060405163331faf7160e21b81526001600160a01b0389811660048301526000935084925088169063cc7ebdc490602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120519190612b3d565b61205b9190612e67565b60405163331faf7160e21b81526001600160a01b0389811660048301529192509087169063cc7ebdc490602401602060405180830381865afa1580156120a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c99190612b3d565b604051631cdc2c5d60e31b81526001600160a01b03878116600483015289811660248301529193509087169063e6e162e890604401600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505060405163331faf7160e21b81526001600160a01b038a811660048301526000935085925089169063cc7ebdc490602401602060405180830381865afa15801561217b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219f9190612b3d565b6121a99190612e67565b91989197509095505050505050565b6060600082516001600160401b038111156121d5576121d5612373565b6040519080825280602002602001820160405280156121fe578160200160208202803683370190505b50905060005b83518110156122fc57600084828151811061222157612221612a3b565b602090810291909101015160405163331faf7160e21b81526001600160a01b0388811660048301529091169063cc7ebdc490602401602060405180830381865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122979190612b3d565b11156122ea578381815181106122af576122af612a3b565b60200260200101518282815181106122c9576122c9612a3b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b806122f481612b22565b915050612204565b509392505050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461233757600080fd5b50565b6000806040838503121561234d57600080fd5b823561235881612322565b9150602083013561236881612322565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156123ab576123ab612373565b60405290565b604051601f8201601f191681016001600160401b03811182821017156123d9576123d9612373565b604052919050565b60006001600160401b038211156123fa576123fa612373565b5060051b60200190565b6000806040838503121561241757600080fd5b823561242281612322565b91506020838101356001600160401b0381111561243e57600080fd5b8401601f8101861361244f57600080fd5b803561246261245d826123e1565b6123b1565b81815260059190911b8201830190838101908883111561248157600080fd5b928401925b828410156124a857833561249981612322565b82529284019290840190612486565b80955050505050509250929050565b600081518084526020808501945080840160005b838110156124f05781516001600160a01b0316875295820195908201906001016124cb565b509495945050505050565b600081518084526020808501945080840160005b838110156124f05781518752958201959082019060010161250f565b600082825180855260208086019550808260051b84010181860160005b8481101561257657601f198684030189526125648383516124b7565b98840198925090830190600101612548565b5090979650505050505050565b60a08152600061259660a08301886124b7565b6020838203818501526125a982896124fb565b91506040848303818601526125be838961252b565b925084830360608601528287518085528385019150838160051b860101848a0160005b8381101561265757878303601f1901855281518051808552908801908885019060005b818110156126425783518360005b600281101561262f5782518252918d0191908d0190600101612612565b505050928a019291890191600101612604565b505095880195935050908601906001016125e1565b5050878103608089015261266b818a6124fb565b9d9c50505050505050505050505050565b6000602080838503121561268f57600080fd5b82356001600160401b038111156126a557600080fd5b8301601f810185136126b657600080fd5b80356126c461245d826123e1565b81815260059190911b820183019083810190878311156126e357600080fd5b928401925b8284101561270a5783356126fb81612322565b825292840192908401906126e8565b979650505050505050565b600082825180855260208086019550808260051b8401018186016000805b8581101561278f57868403601f19018a52825180518086529086019086860190845b8181101561277a5783516001600160a01b031683529288019291880191600101612755565b50509a86019a94505091840191600101612733565b509198975050505050505050565b600082825180855260208086019550808260051b8401018186016000805b8581101561278f57868403601f19018a52825180518086529086019086860190845b818110156127f9578351835292880192918801916001016127dd565b50509a86019a945050918401916001016127bb565b600082825180855260208086019550808260051b84010181860160005b8481101561257657601f1986840301895261284783835161279d565b9884019892509083019060010161282b565b60a08152600061286c60a083018861252b565b828103602084015261287e8188612715565b905082810360408401526128928187612715565b905082810360608401526128a6818661280e565b905082810360808401526128ba818561280e565b98975050505050505050565b6000602082840312156128d857600080fd5b81356101f481612322565b60a0815260006128f660a08301886124b7565b828103602084015261290881886124b7565b9050828103604084015261291c81876124b7565b90508281036060840152612930818661279d565b905082810360808401526128ba818561279d565b6000608080830160018060a01b0380891685526020881515818701526040881515818801526060858189015284895180875260a08a019150848b01965060005b818110156129c157875180518816845286810151881687850152858101511515868501528401511515848401529685019691880191600101612984565b50909d9c50505050505050505050505050565b6060815260006129e760608301866124fb565b82810360208481019190915285518083528682019282019060005b81811015612a275784516001600160a01b031683529383019391830191600101612a02565b505084810360408601526128ba8187612715565b634e487b7160e01b600052603260045260246000fd5b8051612a5c81612322565b919050565b600060208284031215612a7357600080fd5b81516101f481612322565b60006020808385031215612a9157600080fd5b82516001600160401b03811115612aa757600080fd5b8301601f81018513612ab857600080fd5b8051612ac661245d826123e1565b81815260059190911b82018301908381019087831115612ae557600080fd5b928401925b8284101561270a578351612afd81612322565b82529284019290840190612aea565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612b3657612b36612b0c565b5060010190565b600060208284031215612b4f57600080fd5b5051919050565b60006020808385031215612b6957600080fd5b82516001600160401b03811115612b7f57600080fd5b8301601f81018513612b9057600080fd5b8051612b9e61245d826123e1565b81815260059190911b82018301908381019087831115612bbd57600080fd5b928401925b8284101561270a578351612bd581612322565b82529284019290840190612bc2565b80518015158114612a5c57600080fd5b600060208284031215612c0657600080fd5b6101f482612be4565b60008060408385031215612c2257600080fd5b612c2b83612be4565b9150602083015190509250929050565b6000601f8381840112612c4d57600080fd5b82516020612c5d61245d836123e1565b82815260059290921b85018101918181019087841115612c7c57600080fd5b8287015b84811015612da05780516001600160401b0380821115612ca05760008081fd5b9089019060a0601f19838d038101821315612cbb5760008081fd5b612cc3612389565b8885015184811115612cd55760008081fd5b8501603f81018f13612ce75760008081fd5b8981015185811115612cfb57612cfb612373565b612d0a8b858f840116016123b1565b9550808652604093508f84828401011115612d255760008081fd5b60005b81811015612d43578281018501518782018d01528b01612d28565b81811115612d545760008c83890101525b505050838152612d65828601612a51565b8982015260609350612d78848601612a51565b9181019190915260808481015193820193909352920151908201528352918301918301612c80565b50979650505050505050565b60008060408385031215612dbf57600080fd5b82516001600160401b0380821115612dd657600080fd5b818501915085601f830112612dea57600080fd5b81516020612dfa61245d836123e1565b82815260059290921b84018101918181019089841115612e1957600080fd5b948201945b83861015612e3757855182529482019490820190612e1e565b91880151919650909350505080821115612e5057600080fd5b50612e5d85828601612c3b565b9150509250929050565b600082821015612e7957612e79612b0c565b50039056fea164736f6c634300080a000a", + "sourceMap": "1256:13943:7:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061009e5760003560e01c806397f35ff01161006657806397f35ff014610148578063998e2d4a1461016b578063c41c2f241461018d578063c4d66de8146101be578063d24eaf13146101d357600080fd5b80631ec18ec0146100a3578063338038fa146100c95780633fc5fab5146100ed578063641290421461011157806384b3403d14610124575b600080fd5b6100b66100b136600461233a565b6101e6565b6040519081526020015b60405180910390f35b6100dc6100d7366004612404565b6101fb565b6040516100c0959493929190612583565b6101006100fb36600461267c565b6107a4565b6040516100c0959493929190612859565b6100b661011f36600461233a565b610a26565b6101376101323660046128c6565b610a34565b6040516100c09594939291906128e3565b61015b6101563660046128c6565b610f51565b6040516100c09493929190612944565b61017e6101793660046128c6565b611659565b6040516100c0939291906129d4565b6000546101a6906201000090046001600160a01b031681565b6040516001600160a01b0390911681526020016100c0565b6101d16101cc3660046128c6565b61188d565b005b61017e6101e13660046128c6565b611a2f565b60006101f483836001611e1e565b9392505050565b6060806060806060600086516001600160401b0381111561021e5761021e612373565b604051908082528060200260200182016040528015610247578160200160208202803683370190505b509050600087516001600160401b0381111561026557610265612373565b60405190808252806020026020018201604052801561028e578160200160208202803683370190505b509050600088516001600160401b038111156102ac576102ac612373565b6040519080825280602002602001820160405280156102df57816020015b60608152602001906001900390816102ca5790505b509050600089516001600160401b038111156102fd576102fd612373565b60405190808252806020026020018201604052801561033057816020015b606081526020019060019003908161031b5790505b50905060008a516001600160401b0381111561034e5761034e612373565b604051908082528060200260200182016040528015610377578160200160208202803683370190505b50905060005b8b518110156107905760008c828151811061039a5761039a612a3b565b60200260200101519050806001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa1580156103e2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906104069190612a61565b87838151811061041857610418612a3b565b60200260200101906001600160a01b031690816001600160a01b031681525050806001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610476573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f1916820160405261049e9190810190612a7e565b8583815181106104b0576104b0612a3b565b60200260200101819052508482815181106104cd576104cd612a3b565b6020026020010151516001600160401b038111156104ed576104ed612373565b60405190808252806020026020018201604052801561052657816020015b610513612304565b81526020019060019003908161050b5790505b5084838151811061053957610539612a3b565b602002602001018190525060005b85838151811061055957610559612a3b565b60200260200101515181101561064f576105a68f8388868151811061058057610580612a3b565b6020026020010151848151811061059957610599612a3b565b6020026020010151611f0a565b8685815181106105b8576105b8612a3b565b602002602001015183815181106105d1576105d1612a3b565b60200260200101516000600281106105eb576105eb612a3b565b6020020187868151811061060157610601612a3b565b6020026020010151848151811061061a5761061a612a3b565b602002602001015160016002811061063457610634612a3b565b6020020191909152528061064781612b22565b915050610547565b5060405163331faf7160e21b81526001600160a01b038f8116600483015282169063cc7ebdc490602401602060405180830381865afa158015610696573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106ba9190612b3d565b8683815181106106cc576106cc612a3b565b6020026020010181815250508682815181106106ea576106ea612a3b565b60209081029190910101516040516370a0823160e01b81526001600160a01b038381166004830152909116906370a0823190602401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190612b3d565b83838151811061077257610772612a3b565b6020908102919091010152508061078881612b22565b91505061037d565b50939b929a50909850965090945092505050565b6060806060806060600086516001600160401b038111156107c7576107c7612373565b6040519080825280602002602001820160405280156107fa57816020015b60608152602001906001900390816107e55790505b509050600087516001600160401b0381111561081857610818612373565b60405190808252806020026020018201604052801561084b57816020015b60608152602001906001900390816108365790505b509050600088516001600160401b0381111561086957610869612373565b60405190808252806020026020018201604052801561089c57816020015b60608152602001906001900390816108875790505b509050600089516001600160401b038111156108ba576108ba612373565b6040519080825280602002602001820160405280156108ed57816020015b60608152602001906001900390816108d85790505b50905060008a516001600160401b0381111561090b5761090b612373565b60405190808252806020026020018201604052801561093e57816020015b60608152602001906001900390816109295790505b50905060005b8b51811015610a135761096f8c828151811061096257610962612a3b565b6020026020010151610a34565b8a868151811061098157610981612a3b565b602002602001018a878151811061099a5761099a612a3b565b602002602001018a88815181106109b3576109b3612a3b565b602002602001018a89815181106109cc576109cc612a3b565b602002602001018a8a815181106109e5576109e5612a3b565b6020026020010185905285905285905285905285905250505050508080610a0b90612b22565b915050610944565b50939a9299509097509550909350915050565b60006101f483836000611e1e565b60608060608060606000866001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa158015610a7c573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052610aa49190810190612a7e565b90506060876001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015610b0757506040513d6000823e601f3d908101601f19168201604052610b049190810190612b56565b60015b610b205750604080516000815260208101909152610b23565b90505b600081516001600160401b03811115610b3e57610b3e612373565b604051908082528060200260200182016040528015610b67578160200160208202803683370190505b509050600083516001600160401b03811115610b8557610b85612373565b604051908082528060200260200182016040528015610bb857816020015b6060815260200190600190039081610ba35790505b509050600084516001600160401b03811115610bd657610bd6612373565b604051908082528060200260200182016040528015610c0957816020015b6060815260200190600190039081610bf45790505b50905060005b8451811015610ccf57848181518110610c2a57610c2a612a3b565b60200260200101516001600160a01b031663f7c618c16040518163ffffffff1660e01b8152600401602060405180830381865afa158015610c6f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c939190612a61565b848281518110610ca557610ca5612a3b565b6001600160a01b039092166020928302919091019091015280610cc781612b22565b915050610c0f565b5060005b8551811015610a13576000868281518110610cf057610cf0612a3b565b6020026020010151905085516001600160401b03811115610d1357610d13612373565b604051908082528060200260200182016040528015610d3c578160200160208202803683370190505b50848381518110610d4f57610d4f612a3b565b602002602001018190525085516001600160401b03811115610d7357610d73612373565b604051908082528060200260200182016040528015610d9c578160200160208202803683370190505b50838381518110610daf57610daf612a3b565b602002602001018190525060005b8651811015610f3c576000878281518110610dda57610dda612a3b565b6020908102919091010151604051636aa875b560e01b81526001600160a01b03858116600483015291925090821690636aa875b590602401602060405180830381865afa158015610e2f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e539190612b3d565b868581518110610e6557610e65612a3b565b60200260200101518381518110610e7e57610e7e612a3b565b60209081029190910101526040516303d290cf60e61b81526001600160a01b03848116600483015282169063f4a433c090602401602060405180830381865afa158015610ecf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef39190612b3d565b858581518110610f0557610f05612a3b565b60200260200101518381518110610f1e57610f1e612a3b565b60209081029190910101525080610f3481612b22565b915050610dbd565b50508080610f4990612b22565b915050610cd3565b600080600060606000856001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa158015610f98573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fbc9190612a61565b90506000866001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015610ffe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110229190612bf4565b90506000876001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611064573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110889190612bf4565b90506000886001600160a01b031663b0772d0b6040518163ffffffff1660e01b8152600401600060405180830381865afa1580156110ca573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526110f29190810190612a7e565b90506000805b825181101561133357600083828151811061111557611115612a3b565b6020908102919091010151604051638e8f294b60e01b81526001600160a01b0380831660048301529192506000918e1690638e8f294b906024016040805180830381865afa15801561116b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061118f9190612c0f565b5090508061119e575050611321565b6000826001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156111fa575060408051601f3d908101601f191682019092526111f791810190612a61565b60015b61120657505050611321565b90506000836001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c9190612bf4565b90506000846001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156112ae573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d29190612bf4565b90508a6001600160a01b0316836001600160a01b03161415806112f9575089151582151514155b80611308575088151581151514155b1561131b578661131781612b22565b9750505b50505050505b8061132b81612b22565b9150506110f8565b506000816001600160401b0381111561134e5761134e612373565b6040519080825280602002602001820160405280156113a057816020015b60408051608081018252600080825260208083018290529282018190526060820152825260001990920191018161136c5790505b5090506000805b84518110156116445760008582815181106113c4576113c4612a3b565b6020026020010151905060008e6001600160a01b0316638e8f294b836040518263ffffffff1660e01b815260040161140b91906001600160a01b0391909116815260200190565b6040805180830381865afa158015611427573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061144b9190612c0f565b5090508061145a575050611632565b6000826001600160a01b031663f851a4406040518163ffffffff1660e01b8152600401602060405180830381865afa9250505080156114b6575060408051601f3d908101601f191682019092526114b391810190612a61565b60015b6114c257505050611632565b90506000836001600160a01b0316630a755ec26040518163ffffffff1660e01b8152600401602060405180830381865afa158015611504573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115289190612bf4565b90506000846001600160a01b031663cf6bfd2d6040518163ffffffff1660e01b8152600401602060405180830381865afa15801561156a573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061158e9190612bf4565b90508c6001600160a01b0316836001600160a01b03161415806115b557508b151582151514155b806115c457508a151581151514155b1561162c576040518060800160405280866001600160a01b03168152602001846001600160a01b03168152602001831515815260200182151581525088888151811061161257611612612a3b565b6020026020010181905250868061162890612b22565b9750505b50505050505b8061163c81612b22565b9150506113a7565b50959b949a5092985091965091945050505050565b6060806060600080600060029054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa1580156116b4573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526116dc9190810190612dac565b91509150600081516001600160401b038111156116fb576116fb612373565b604051908082528060200260200182016040528015611724578160200160208202803683370190505b509050600082516001600160401b0381111561174257611742612373565b60405190808252806020026020018201604052801561177557816020015b60608152602001906001900390816117605790505b50905060005b835181101561187d57600084828151811061179857611798612a3b565b6020026020010151604001519050806001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa92505050801561180557506040513d6000823e601f3d908101601f191682016040526118029190810190612b56565b60015b61180e5761186a565b8185848151811061182157611821612a3b565b60200260200101906001600160a01b031690816001600160a01b03168152505061184b8b826121b8565b84848151811061185d5761185d612a3b565b6020026020010181905250505b508061187581612b22565b91505061177b565b5092979096509194509092505050565b600054610100900460ff16158080156118ad5750600054600160ff909116105b806118c75750303b1580156118c7575060005460ff166001145b61192f5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084015b60405180910390fd5b6000805460ff191660011790558015611952576000805461ff0019166101001790555b6001600160a01b0382166119c35760405162461bcd60e51b815260206004820152603260248201527f506f6f6c4469726563746f727920696e7374616e63652063616e6e6f74206265604482015271103a3432903d32b9379030b2323932b9b99760711b6064820152608401611926565b6000805462010000600160b01b031916620100006001600160a01b038516021790558015611a2b576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b5050565b606080606060008060029054906101000a90046001600160a01b03166001600160a01b0316638ec083546040518163ffffffff1660e01b8152600401600060405180830381865afa158015611a88573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f19168201604052611ab09190810190612dac565b9150506000805b8251811015611b8257828181518110611ad257611ad2612a3b565b6020026020010151604001516001600160a01b03166316dc15fe886040518263ffffffff1660e01b8152600401611b1891906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015611b51575060408051601f3d908101601f19168201909252611b4e91810190612bf4565b60015b611b5a57611b70565b8015611b6e5782611b6a81612b22565b9350505b505b80611b7a81612b22565b915050611ab7565b506000816001600160401b03811115611b9d57611b9d612373565b604051908082528060200260200182016040528015611bc6578160200160208202803683370190505b5090506000826001600160401b03811115611be357611be3612373565b604051908082528060200260200182016040528015611c0c578160200160208202803683370190505b5090506000836001600160401b03811115611c2957611c29612373565b604051908082528060200260200182016040528015611c5c57816020015b6060815260200190600190039081611c475790505b5090506000805b8651811015611e0e576000878281518110611c8057611c80612a3b565b6020026020010151604001519050806001600160a01b03166316dc15fe8d6040518263ffffffff1660e01b8152600401611cc991906001600160a01b0391909116815260200190565b602060405180830381865afa925050508015611d02575060408051601f3d908101601f19168201909252611cff91810190612bf4565b60015b611d0b57611dfb565b8015611df95782878581518110611d2457611d24612a3b565b60200260200101818152505081868581518110611d4357611d43612a3b565b60200260200101906001600160a01b031690816001600160a01b031681525050816001600160a01b0316633605b51b6040518163ffffffff1660e01b8152600401600060405180830381865afa925050508015611dc257506040513d6000823e601f3d908101601f19168201604052611dbf9190810190612b56565b60015b611dcb57611deb565b80868681518110611dde57611dde612a3b565b6020026020010181905250505b83611df581612b22565b9450505b505b5080611e0681612b22565b915050611c63565b5092999198509650945050505050565b600080836001600160a01b0316635fe3b5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015611e5f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611e839190612a61565b604051630cbb414760e11b81526001600160a01b0387811660048301528681166024830152851515604483015291925090821690631976828e90606401602060405180830381865afa158015611edd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f019190612b3d565b95945050505050565b60405163331faf7160e21b81526001600160a01b038481166004830152600091829182919086169063cc7ebdc490602401602060405180830381865afa158015611f58573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611f7c9190612b3d565b60405162e48b0f60e51b81526001600160a01b038681166004830152888116602483015291925090861690631c9161e090604401600060405180830381600087803b158015611fca57600080fd5b505af1158015611fde573d6000803e3d6000fd5b505060405163331faf7160e21b81526001600160a01b0389811660048301526000935084925088169063cc7ebdc490602401602060405180830381865afa15801561202d573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120519190612b3d565b61205b9190612e67565b60405163331faf7160e21b81526001600160a01b0389811660048301529192509087169063cc7ebdc490602401602060405180830381865afa1580156120a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906120c99190612b3d565b604051631cdc2c5d60e31b81526001600160a01b03878116600483015289811660248301529193509087169063e6e162e890604401600060405180830381600087803b15801561211857600080fd5b505af115801561212c573d6000803e3d6000fd5b505060405163331faf7160e21b81526001600160a01b038a811660048301526000935085925089169063cc7ebdc490602401602060405180830381865afa15801561217b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061219f9190612b3d565b6121a99190612e67565b91989197509095505050505050565b6060600082516001600160401b038111156121d5576121d5612373565b6040519080825280602002602001820160405280156121fe578160200160208202803683370190505b50905060005b83518110156122fc57600084828151811061222157612221612a3b565b602090810291909101015160405163331faf7160e21b81526001600160a01b0388811660048301529091169063cc7ebdc490602401602060405180830381865afa158015612273573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906122979190612b3d565b11156122ea578381815181106122af576122af612a3b565b60200260200101518282815181106122c9576122c9612a3b565b60200260200101906001600160a01b031690816001600160a01b0316815250505b806122f481612b22565b915050612204565b509392505050565b60405180604001604052806002906020820280368337509192915050565b6001600160a01b038116811461233757600080fd5b50565b6000806040838503121561234d57600080fd5b823561235881612322565b9150602083013561236881612322565b809150509250929050565b634e487b7160e01b600052604160045260246000fd5b60405160a081016001600160401b03811182821017156123ab576123ab612373565b60405290565b604051601f8201601f191681016001600160401b03811182821017156123d9576123d9612373565b604052919050565b60006001600160401b038211156123fa576123fa612373565b5060051b60200190565b6000806040838503121561241757600080fd5b823561242281612322565b91506020838101356001600160401b0381111561243e57600080fd5b8401601f8101861361244f57600080fd5b803561246261245d826123e1565b6123b1565b81815260059190911b8201830190838101908883111561248157600080fd5b928401925b828410156124a857833561249981612322565b82529284019290840190612486565b80955050505050509250929050565b600081518084526020808501945080840160005b838110156124f05781516001600160a01b0316875295820195908201906001016124cb565b509495945050505050565b600081518084526020808501945080840160005b838110156124f05781518752958201959082019060010161250f565b600082825180855260208086019550808260051b84010181860160005b8481101561257657601f198684030189526125648383516124b7565b98840198925090830190600101612548565b5090979650505050505050565b60a08152600061259660a08301886124b7565b6020838203818501526125a982896124fb565b91506040848303818601526125be838961252b565b925084830360608601528287518085528385019150838160051b860101848a0160005b8381101561265757878303601f1901855281518051808552908801908885019060005b818110156126425783518360005b600281101561262f5782518252918d0191908d0190600101612612565b505050928a019291890191600101612604565b505095880195935050908601906001016125e1565b5050878103608089015261266b818a6124fb565b9d9c50505050505050505050505050565b6000602080838503121561268f57600080fd5b82356001600160401b038111156126a557600080fd5b8301601f810185136126b657600080fd5b80356126c461245d826123e1565b81815260059190911b820183019083810190878311156126e357600080fd5b928401925b8284101561270a5783356126fb81612322565b825292840192908401906126e8565b979650505050505050565b600082825180855260208086019550808260051b8401018186016000805b8581101561278f57868403601f19018a52825180518086529086019086860190845b8181101561277a5783516001600160a01b031683529288019291880191600101612755565b50509a86019a94505091840191600101612733565b509198975050505050505050565b600082825180855260208086019550808260051b8401018186016000805b8581101561278f57868403601f19018a52825180518086529086019086860190845b818110156127f9578351835292880192918801916001016127dd565b50509a86019a945050918401916001016127bb565b600082825180855260208086019550808260051b84010181860160005b8481101561257657601f1986840301895261284783835161279d565b9884019892509083019060010161282b565b60a08152600061286c60a083018861252b565b828103602084015261287e8188612715565b905082810360408401526128928187612715565b905082810360608401526128a6818661280e565b905082810360808401526128ba818561280e565b98975050505050505050565b6000602082840312156128d857600080fd5b81356101f481612322565b60a0815260006128f660a08301886124b7565b828103602084015261290881886124b7565b9050828103604084015261291c81876124b7565b90508281036060840152612930818661279d565b905082810360808401526128ba818561279d565b6000608080830160018060a01b0380891685526020881515818701526040881515818801526060858189015284895180875260a08a019150848b01965060005b818110156129c157875180518816845286810151881687850152858101511515868501528401511515848401529685019691880191600101612984565b50909d9c50505050505050505050505050565b6060815260006129e760608301866124fb565b82810360208481019190915285518083528682019282019060005b81811015612a275784516001600160a01b031683529383019391830191600101612a02565b505084810360408601526128ba8187612715565b634e487b7160e01b600052603260045260246000fd5b8051612a5c81612322565b919050565b600060208284031215612a7357600080fd5b81516101f481612322565b60006020808385031215612a9157600080fd5b82516001600160401b03811115612aa757600080fd5b8301601f81018513612ab857600080fd5b8051612ac661245d826123e1565b81815260059190911b82018301908381019087831115612ae557600080fd5b928401925b8284101561270a578351612afd81612322565b82529284019290840190612aea565b634e487b7160e01b600052601160045260246000fd5b6000600019821415612b3657612b36612b0c565b5060010190565b600060208284031215612b4f57600080fd5b5051919050565b60006020808385031215612b6957600080fd5b82516001600160401b03811115612b7f57600080fd5b8301601f81018513612b9057600080fd5b8051612b9e61245d826123e1565b81815260059190911b82018301908381019087831115612bbd57600080fd5b928401925b8284101561270a578351612bd581612322565b82529284019290840190612bc2565b80518015158114612a5c57600080fd5b600060208284031215612c0657600080fd5b6101f482612be4565b60008060408385031215612c2257600080fd5b612c2b83612be4565b9150602083015190509250929050565b6000601f8381840112612c4d57600080fd5b82516020612c5d61245d836123e1565b82815260059290921b85018101918181019087841115612c7c57600080fd5b8287015b84811015612da05780516001600160401b0380821115612ca05760008081fd5b9089019060a0601f19838d038101821315612cbb5760008081fd5b612cc3612389565b8885015184811115612cd55760008081fd5b8501603f81018f13612ce75760008081fd5b8981015185811115612cfb57612cfb612373565b612d0a8b858f840116016123b1565b9550808652604093508f84828401011115612d255760008081fd5b60005b81811015612d43578281018501518782018d01528b01612d28565b81811115612d545760008c83890101525b505050838152612d65828601612a51565b8982015260609350612d78848601612a51565b9181019190915260808481015193820193909352920151908201528352918301918301612c80565b50979650505050505050565b60008060408385031215612dbf57600080fd5b82516001600160401b0380821115612dd657600080fd5b818501915085601f830112612dea57600080fd5b81516020612dfa61245d836123e1565b82815260059290921b84018101918181019089841115612e1957600080fd5b948201945b83861015612e3757855182529482019490820190612e1e565b91880151919650909350505080821115612e5057600080fd5b50612e5d85828601612c3b565b9150509250929050565b600082821015612e7957612e79612b0c565b50039056fea164736f6c634300080a000a", + "sourceMap": "1256:13943:7:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5239:155;;;;;;:::i;:::-;;:::i;:::-;;;706:25:504;;;694:2;679:18;5239:155:7;;;;;;;;10640:1421;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;8199:923::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;4844:156::-;;;;;;:::i;:::-;;:::i;6282:1572::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;;:::i;2220:2385::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;;:::i;13926:833::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;;:::i;1647:30::-;;;;;;;;-1:-1:-1;;;;;1647:30:7;;;;;;-1:-1:-1;;;;;17011:32:504;;;16993:51;;16981:2;16966:18;1647:30:7;16825:225:504;1385:200:7;;;;;;:::i;:::-;;:::i;:::-;;12321:1372;;;;;;:::i;:::-;;:::i;5239:155::-;5318:7;5340:49;5361:7;5370:12;5384:4;5340:20;:49::i;:::-;5333:56;5239:155;-1:-1:-1;;;5239:155:7:o;10640:1421::-;10775:16;10799;10823:18;10849:21;10878:16;10909:29;10955:12;:19;-1:-1:-1;;;;;10941:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10941:34:7;;10909:66;;10981:35;11033:12;:19;-1:-1:-1;;;;;11019:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11019:34:7;;10981:72;;11059:29;11107:12;:19;-1:-1:-1;;;;;11091:36:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11059:68;;11133:38;11193:12;:19;-1:-1:-1;;;;;11174:39:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11133:80;;11219:33;11269:12;:19;-1:-1:-1;;;;;11255:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11255:34:7;;11219:70;;11301:9;11296:665;11320:12;:19;11316:1;:23;11296:665;;;11354:31;11388:12;11401:1;11388:15;;;;;;;;:::i;:::-;;;;;;;11354:49;;11429:11;-1:-1:-1;;;;;11429:23:7;;:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11411:12;11424:1;11411:15;;;;;;;;:::i;:::-;;;;;;:43;-1:-1:-1;;;;;11411:43:7;;;-1:-1:-1;;;;;11411:43:7;;;;;11478:11;-1:-1:-1;;;;;11478:25:7;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11478:27:7;;;;;;;;;;;;:::i;:::-;11462:10;11473:1;11462:13;;;;;;;;:::i;:::-;;;;;;:43;;;;11552:10;11563:1;11552:13;;;;;;;;:::i;:::-;;;;;;;:20;-1:-1:-1;;;;;11535:38:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;11513:16;11530:1;11513:19;;;;;;;;:::i;:::-;;;;;;:60;;;;11586:9;11581:214;11605:10;11616:1;11605:13;;;;;;;;:::i;:::-;;;;;;;:20;11601:1;:24;11581:214;;;11697:98;11728:6;11746:11;11769:10;11780:1;11769:13;;;;;;;;:::i;:::-;;;;;;;11783:1;11769:16;;;;;;;;:::i;:::-;;;;;;;11697:19;:98::i;:::-;11641:16;11658:1;11641:19;;;;;;;;:::i;:::-;;;;;;;11661:1;11641:22;;;;;;;;:::i;:::-;;;;;;;11664:1;11641:25;;;;;;;:::i;:::-;;;;11668:16;11685:1;11668:19;;;;;;;;:::i;:::-;;;;;;;11688:1;11668:22;;;;;;;;:::i;:::-;;;;;;;11691:1;11668:25;;;;;;;:::i;:::-;;;;11640:155;;;;;11627:3;;;;:::i;:::-;;;;11581:214;;;-1:-1:-1;11827:31:7;;-1:-1:-1;;;11827:31:7;;-1:-1:-1;;;;;17011:32:504;;;11827:31:7;;;16993:51:504;11827:23:7;;;;;16966:18:504;;11827:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11803:18;11822:1;11803:21;;;;;;;;:::i;:::-;;;;;;:55;;;;;11906:12;11919:1;11906:15;;;;;;;;:::i;:::-;;;;;;;;;;;11888:66;;-1:-1:-1;;;11888:66:7;;-1:-1:-1;;;;;17011:32:504;;;11888:66:7;;;16993:51:504;11888:44:7;;;;;;16966:18:504;;11888:66:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;11866:16;11883:1;11866:19;;;;;;;;:::i;:::-;;;;;;;;;;:88;-1:-1:-1;11341:3:7;;;;:::i;:::-;;;;11296:665;;;-1:-1:-1;11975:12:7;;11989:18;;-1:-1:-1;12009:10:7;;-1:-1:-1;11989:18:7;-1:-1:-1;11975:12:7;;-1:-1:-1;10640:1421:7;-1:-1:-1;;;10640:1421:7:o;8199:923::-;8313:18;8339;8365;8391:20;8419;8454:29;8502:12;:19;-1:-1:-1;;;;;8486:36:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8454:68;;8528:31;8578:12;:19;-1:-1:-1;;;;;8562:36:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8528:70;;8604:31;8654:12;:19;-1:-1:-1;;;;;8638:36:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8604:70;;8680:33;8734:12;:19;-1:-1:-1;;;;;8716:38:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8680:74;;8760:33;8814:12;:19;-1:-1:-1;;;;;8796:38:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8760:74;;8845:9;8840:196;8864:12;:19;8860:1;:23;8840:196;;;8982:54;9013:12;9026:1;9013:15;;;;;;;;:::i;:::-;;;;;;;8982:21;:54::i;:::-;8897:10;8908:1;8897:13;;;;;;;;:::i;:::-;;;;;;8912:12;8925:1;8912:15;;;;;;;;:::i;:::-;;;;;;8929:12;8942:1;8929:15;;;;;;;;:::i;:::-;;;;;;8946:12;8959:1;8946:15;;;;;;;;:::i;:::-;;;;;;8963:12;8976:1;8963:15;;;;;;;;:::i;:::-;;;;;;8896:140;;;;;;;;;;;;;;;;;;;;8885:3;;;;;:::i;:::-;;;;8840:196;;;-1:-1:-1;9050:10:7;;9062:12;;-1:-1:-1;9076:12:7;;-1:-1:-1;9062:12:7;-1:-1:-1;9050:10:7;;-1:-1:-1;8199:923:7;-1:-1:-1;;8199:923:7:o;4844:156::-;4923:7;4945:50;4966:7;4975:12;4989:5;4945:20;:50::i;6282:1572::-;6383:16;6407;6431;6455:18;6481;6514:27;6544:11;-1:-1:-1;;;;;6544:25:7;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6544:27:7;;;;;;;;;;;;:::i;:::-;6514:57;;6577:29;6617:11;-1:-1:-1;;;;;6617:34:7;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;6617:36:7;;;;;;;;;;;;:::i;:::-;;;6613:178;;-1:-1:-1;6768:16:7;;;6782:1;6768:16;;;;;;;;6613:178;;;6718:13;-1:-1:-1;6613:178:7;6797:29;6843:12;:19;-1:-1:-1;;;;;6829:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6829:34:7;;6797:66;;6869:31;6919:10;:17;-1:-1:-1;;;;;6903:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6869:68;;6943:31;6993:10;:17;-1:-1:-1;;;;;6977:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6943:68;;7069:9;7064:133;7088:12;:19;7084:1;:23;7064:133;;;7160:12;7173:1;7160:15;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1;;;;;7140:48:7;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7122:12;7135:1;7122:15;;;;;;;;:::i;:::-;-1:-1:-1;;;;;7122:68:7;;;:15;;;;;;;;;;;:68;7109:3;;;;:::i;:::-;;;;7064:133;;;;7270:9;7265:503;7289:10;:17;7285:1;:21;7265:503;;;7321:14;7346:10;7357:1;7346:13;;;;;;;;:::i;:::-;;;;;;;7321:39;;7400:12;:19;-1:-1:-1;;;;;7386:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7386:34:7;;7368:12;7381:1;7368:15;;;;;;;;:::i;:::-;;;;;;:52;;;;7460:12;:19;-1:-1:-1;;;;;7446:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;7446:34:7;;7428:12;7441:1;7428:15;;;;;;;;:::i;:::-;;;;;;:52;;;;7494:9;7489:273;7513:12;:19;7509:1;:23;7489:273;;;7549:31;7603:12;7616:1;7603:15;;;;;;;;:::i;:::-;;;;;;;;;;;7650:36;;-1:-1:-1;;;7650:36:7;;-1:-1:-1;;;;;17011:32:504;;;7650:36:7;;;16993:51:504;7603:15:7;;-1:-1:-1;7650:28:7;;;;;;16966:18:504;;7650:36:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7629:12;7642:1;7629:15;;;;;;;;:::i;:::-;;;;;;;7645:1;7629:18;;;;;;;;:::i;:::-;;;;;;;;;;:57;7717:36;;-1:-1:-1;;;7717:36:7;;-1:-1:-1;;;;;17011:32:504;;;7717:36:7;;;16993:51:504;7717:28:7;;;;;16966:18:504;;7717:36:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;7696:12;7709:1;7696:15;;;;;;;;:::i;:::-;;;;;;;7712:1;7696:18;;;;;;;;:::i;:::-;;;;;;;;;;:57;-1:-1:-1;7534:3:7;;;;:::i;:::-;;;;7489:273;;;;7313:455;7308:3;;;;;:::i;:::-;;;;7265:503;;2220:2385;2318:7;2333:4;2345;2357:24;2422;2449:11;-1:-1:-1;;;;;2449:17:7;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2422:46;;2474:30;2507:11;-1:-1:-1;;;;;2507:26:7;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2474:61;;2541:35;2579:11;-1:-1:-1;;;;;2579:31:7;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2541:71;;2647:24;2674:11;-1:-1:-1;;;;;2674:25:7;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2674:27:7;;;;;;;;;;;;:::i;:::-;2647:54;;2707:19;2742:9;2737:716;2761:7;:14;2757:1;:18;2737:716;;;2790:14;2807:7;2815:1;2807:10;;;;;;;;:::i;:::-;;;;;;;;;;;2845:36;;-1:-1:-1;;;2845:36:7;;-1:-1:-1;;;;;17011:32:504;;;2845:36:7;;;16993:51:504;2807:10:7;;-1:-1:-1;2826:13:7;;2845:19;;;;;16966:18:504;;2845:36:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2825:56;;;2894:8;2889:23;;2904:8;;;;2889:23;2921:19;2952:6;-1:-1:-1;;;;;2952:12:7;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2952:14:7;;;;;;;;-1:-1:-1;;2952:14:7;;;;;;;;;;;;:::i;:::-;;;2948:129;;3060:8;;;;;2948:129;3022:12;-1:-1:-1;3084:25:7;3112:6;-1:-1:-1;;;;;3112:21:7;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3084:51;;3143:30;3176:6;-1:-1:-1;;;;;3176:26:7;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3143:61;;3276:16;-1:-1:-1;;;;;3261:31:7;:11;-1:-1:-1;;;;;3261:31:7;;;:92;;;;3328:25;3304:49;;:20;:49;;;;3261:92;:163;;;;3394:30;3365:59;;:25;:59;;;;3261:163;3248:198;;;3433:13;;;;:::i;:::-;;;;3248:198;2782:671;;;;;2737:716;2777:3;;;;:::i;:::-;;;;2737:716;;;;3459:33;3517:11;-1:-1:-1;;;;;3495:34:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3495:34:7;;-1:-1:-1;;3495:34:7;;;;;;;;;;;;3459:70;;3535:18;3569:9;3564:936;3588:7;:14;3584:1;:18;3564:936;;;3617:14;3634:7;3642:1;3634:10;;;;;;;;:::i;:::-;;;;;;;3617:27;;3653:13;3672:11;-1:-1:-1;;;;;3672:19:7;;3700:6;3672:36;;;;;;;;;;;;;;-1:-1:-1;;;;;17011:32:504;;;;16993:51;;16981:2;16966:18;;16825:225;3672:36:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3652:56;;;3721:8;3716:23;;3731:8;;;;3716:23;3748:19;3779:6;-1:-1:-1;;;;;3779:12:7;;:14;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3779:14:7;;;;;;;;-1:-1:-1;;3779:14:7;;;;;;;;;;;;:::i;:::-;;;3775:129;;3887:8;;;;;3775:129;3849:12;-1:-1:-1;3911:25:7;3939:6;-1:-1:-1;;;;;3939:21:7;;:23;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3911:51;;3970:30;4003:6;-1:-1:-1;;;;;4003:26:7;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3970:61;;4129:16;-1:-1:-1;;;;;4114:31:7;:11;-1:-1:-1;;;;;4114:31:7;;;:92;;;;4181:25;4157:49;;:20;:49;;;;4114:92;:163;;;;4247:30;4218:59;;:25;:59;;;;4114:163;4101:393;;;4319:144;;;;;;;;4354:6;-1:-1:-1;;;;;4319:144:7;;;;;4373:11;-1:-1:-1;;;;;4319:144:7;;;;;4396:20;4319:144;;;;;;4428:25;4319:144;;;;;4296:8;4305:10;4296:20;;;;;;;;:::i;:::-;;;;;;:167;;;;4473:12;;;;;:::i;:::-;;;;4101:393;3609:891;;;;;3564:936;3604:3;;;;:::i;:::-;;;;3564:936;;;-1:-1:-1;4514:16:7;;4532:25;;-1:-1:-1;4559:30:7;;-1:-1:-1;4532:25:7;;-1:-1:-1;2220:2385:7;;-1:-1:-1;;;;;2220:2385:7:o;13926:833::-;14011:16;14035:25;14068:18;14102:24;14128:33;14165:9;;;;;;;;;-1:-1:-1;;;;;14165:9:7;-1:-1:-1;;;;;14165:24:7;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14165:26:7;;;;;;;;;;;;:::i;:::-;14101:90;;;;14198:38;14262:5;:12;-1:-1:-1;;;;;14239:36:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14239:36:7;;14198:77;;14281:31;14331:5;:12;-1:-1:-1;;;;;14315:29:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14281:63;;14356:9;14351:353;14375:5;:12;14371:1;:16;14351:353;;;14402:28;14450:5;14456:1;14450:8;;;;;;;;:::i;:::-;;;;;;;:20;;;14402:69;;14483:11;-1:-1:-1;;;;;14483:34:7;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14483:36:7;;;;;;;;;;;;:::i;:::-;;;14479:219;;;;;14589:11;14571:12;14584:1;14571:15;;;;;;;;:::i;:::-;;;;;;:29;-1:-1:-1;;;;;14571:29:7;;;-1:-1:-1;;;;;14571:29:7;;;;;14628:52;14660:4;14666:13;14628:31;:52::i;:::-;14610:12;14623:1;14610:15;;;;;;;;:::i;:::-;;;;;;:70;;;;14520:169;14479:219;-1:-1:-1;14389:3:7;;;;:::i;:::-;;;;14351:353;;;-1:-1:-1;14718:7:7;;14727:12;;-1:-1:-1;14718:7:7;;-1:-1:-1;13926:833:7;;-1:-1:-1;;;13926:833:7:o;1385:200::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;25099:2:504;3314:201:457;;;25081:21:504;25138:2;25118:18;;;25111:30;25177:34;25157:18;;;25150:62;-1:-1:-1;;;25228:18:504;;;25221:44;25282:19;;3314:201:457;;;;;;;;;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;-1:-1:-1;;;;;1464:33:7;::::1;1456:96;;;::::0;-1:-1:-1;;;1456:96:7;;25514:2:504;1456:96:7::1;::::0;::::1;25496:21:504::0;25553:2;25533:18;;;25526:30;25592:34;25572:18;;;25565:62;-1:-1:-1;;;25643:18:504;;;25636:48;25701:19;;1456:96:7::1;25312:414:504::0;1456:96:7::1;1558:9;:22:::0;;-1:-1:-1;;;;;;1558:22:7::1;::::0;-1:-1:-1;;;;;1558:22:7;::::1;;;::::0;;3636:99:457;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;25883:36:504;;3710:14:457;;25871:2:504;25856:18;3710:14:457;;;;;;;3636:99;3258:483;1385:200:7;:::o;12321:1372::-;12423:16;12447:25;12480:18;12540:33;12577:9;;;;;;;;;-1:-1:-1;;;;;12577:9:7;-1:-1:-1;;;;;12577:24:7;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12577:26:7;;;;;;;;;;;;:::i;:::-;12537:66;;;12609:19;12644:9;12639:203;12663:5;:12;12659:1;:16;12639:203;;;12711:5;12717:1;12711:8;;;;;;;;:::i;:::-;;;;;;;:20;;;-1:-1:-1;;;;;12694:48:7;;12743:8;12694:58;;;;;;;;;;;;;;-1:-1:-1;;;;;17011:32:504;;;;16993:51;;16981:2;16966:18;;16825:225;12694:58:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;12694:58:7;;;;;;;;-1:-1:-1;;12694:58:7;;;;;;;;;;;;:::i;:::-;;;12690:146;;;;;12793:10;12789:29;;;12805:13;;;;:::i;:::-;;;;12789:29;12753:74;12690:146;12677:3;;;;:::i;:::-;;;;12639:203;;;;12867:24;12908:11;-1:-1:-1;;;;;12894:26:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12894:26:7;;12867:53;;12926:38;12990:11;-1:-1:-1;;;;;12967:35:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;12967:35:7;;12926:76;;13008:31;13058:11;-1:-1:-1;;;;;13042:28:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13008:62;;13076:13;13105:9;13100:511;13124:5;:12;13120:1;:16;13100:511;;;13151:28;13199:5;13205:1;13199:8;;;;;;;;:::i;:::-;;;;;;;:20;;;13151:69;;13233:11;-1:-1:-1;;;;;13233:21:7;;13255:8;13233:31;;;;;;;;;;;;;;-1:-1:-1;;;;;17011:32:504;;;;16993:51;;16981:2;16966:18;;16825:225;13233:31:7;;;;;;;;;;;;;;;;;;;-1:-1:-1;13233:31:7;;;;;;;;-1:-1:-1;;13233:31:7;;;;;;;;;;;;:::i;:::-;;;13229:376;;;;;13305:10;13301:287;;;13346:1;13329:7;13337:5;13329:14;;;;;;;;:::i;:::-;;;;;;:18;;;;;13381:11;13359:12;13372:5;13359:19;;;;;;;;:::i;:::-;;;;;;:33;-1:-1:-1;;;;;13359:33:7;;;-1:-1:-1;;;;;13359:33:7;;;;;13409:11;-1:-1:-1;;;;;13409:34:7;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13409:36:7;;;;;;;;;;;;:::i;:::-;;;13405:153;;;;;13523:13;13501:12;13514:5;13501:19;;;;;;;;:::i;:::-;;;;;;:35;;;;13446:103;13405:153;13570:7;;;;:::i;:::-;;;;13301:287;13265:331;13229:376;-1:-1:-1;13138:3:7;;;;:::i;:::-;;;;13100:511;;;-1:-1:-1;13652:7:7;;13661:12;;-1:-1:-1;13661:12:7;-1:-1:-1;12321:1372:7;-1:-1:-1;;;;;12321:1372:7:o;5672:291::-;5790:7;5805:28;5853:12;-1:-1:-1;;;;;5853:24:7;;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5893:65;;-1:-1:-1;;;5893:65:7;;-1:-1:-1;;;;;26481:15:504;;;5893:65:7;;;26463:34:504;26533:15;;;26513:18;;;26506:43;26592:14;;26585:22;26565:18;;;26558:50;5805:75:7;;-1:-1:-1;5893:32:7;;;;;;26398:18:504;;5893:65:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;5886:72;5672:291;-1:-1:-1;;;;;5672:291:7:o;9461:739::-;9676:31;;-1:-1:-1;;;9676:31:7;;-1:-1:-1;;;;;17011:32:504;;;9676:31:7;;;16993:51:504;9589:7:7;;;;;;9676:23;;;;;;16966:18:504;;9676:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9713:62;;-1:-1:-1;;;9713:62:7;;-1:-1:-1;;;;;26849:15:504;;;9713:62:7;;;26831:34:504;26901:15;;;26881:18;;;26874:43;9649:58:7;;-1:-1:-1;9713:37:7;;;;;;26766:18:504;;9713:62:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;9814:31:7;;-1:-1:-1;;;9814:31:7;;-1:-1:-1;;;;;17011:32:504;;;9814:31:7;;;16993:51:504;9781:30:7;;-1:-1:-1;9848:16:7;;-1:-1:-1;9814:23:7;;;;;16966:18:504;;9814:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;9926:31;;-1:-1:-1;;;9926:31:7;;-1:-1:-1;;;;;17011:32:504;;;9926:31:7;;;16993:51:504;9781:83:7;;-1:-1:-1;9926:23:7;;;;;;16966:18:504;;9926:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;9963:62;;-1:-1:-1;;;9963:62:7;;-1:-1:-1;;;;;26849:15:504;;;9963:62:7;;;26831:34:504;26901:15;;;26881:18;;;26874:43;9907:50:7;;-1:-1:-1;9963:37:7;;;;;;26766:18:504;;9963:62:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;10064:31:7;;-1:-1:-1;;;10064:31:7;;-1:-1:-1;;;;;17011:32:504;;;10064:31:7;;;16993:51:504;10031:30:7;;-1:-1:-1;10098:16:7;;-1:-1:-1;10064:23:7;;;;;16966:18:504;;10064:31:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;;;;:::i;:::-;10148:22;;;;-1:-1:-1;9461:739:7;;-1:-1:-1;;;;;;9461:739:7:o;14763:434::-;14885:16;14911:29;14957:13;:20;-1:-1:-1;;;;;14943:35:7;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14943:35:7;;14911:67;;14989:9;14984:183;15008:13;:20;15004:1;:24;14984:183;;;15105:1;15067:13;15081:1;15067:16;;;;;;;;:::i;:::-;;;;;;;;;;;15047:55;;-1:-1:-1;;;15047:55:7;;-1:-1:-1;;;;;17011:32:504;;;15047:55:7;;;16993:51:504;15047:49:7;;;;;;16966:18:504;;15047:55:7;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:59;15043:118;;;15136:13;15150:1;15136:16;;;;;;;;:::i;:::-;;;;;;;15118:12;15131:1;15118:15;;;;;;;;:::i;:::-;;;;;;:34;-1:-1:-1;;;;;15118:34:7;;;-1:-1:-1;;;;;15118:34:7;;;;;15043:118;15030:3;;;;:::i;:::-;;;;14984:183;;;-1:-1:-1;15180:12:7;14763:434;-1:-1:-1;;;14763:434:7:o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:131:504:-;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;69:70;14:131;:::o;150:405::-;235:6;243;296:2;284:9;275:7;271:23;267:32;264:52;;;312:1;309;302:12;264:52;351:9;338:23;370:31;395:5;370:31;:::i;:::-;420:5;-1:-1:-1;477:2:504;462:18;;449:32;490:33;449:32;490:33;:::i;:::-;542:7;532:17;;;150:405;;;;;:::o;742:127::-;803:10;798:3;794:20;791:1;784:31;834:4;831:1;824:15;858:4;855:1;848:15;874:253;946:2;940:9;988:4;976:17;;-1:-1:-1;;;;;1008:34:504;;1044:22;;;1005:62;1002:88;;;1070:18;;:::i;:::-;1106:2;1099:22;874:253;:::o;1132:275::-;1203:2;1197:9;1268:2;1249:13;;-1:-1:-1;;1245:27:504;1233:40;;-1:-1:-1;;;;;1288:34:504;;1324:22;;;1285:62;1282:88;;;1350:18;;:::i;:::-;1386:2;1379:22;1132:275;;-1:-1:-1;1132:275:504:o;1412:204::-;1493:4;-1:-1:-1;;;;;1518:6:504;1515:30;1512:56;;;1548:18;;:::i;:::-;-1:-1:-1;1593:1:504;1589:14;1605:4;1585:25;;1412:204::o;1621:1156::-;1742:6;1750;1803:2;1791:9;1782:7;1778:23;1774:32;1771:52;;;1819:1;1816;1809:12;1771:52;1858:9;1845:23;1877:31;1902:5;1877:31;:::i;:::-;1927:5;-1:-1:-1;1951:2:504;1989:18;;;1976:32;-1:-1:-1;;;;;2020:30:504;;2017:50;;;2063:1;2060;2053:12;2017:50;2086:22;;2139:4;2131:13;;2127:27;-1:-1:-1;2117:55:504;;2168:1;2165;2158:12;2117:55;2204:2;2191:16;2227:81;2243:64;2304:2;2243:64;:::i;:::-;2227:81;:::i;:::-;2342:15;;;2424:1;2420:10;;;;2412:19;;2408:28;;;2373:12;;;;2448:19;;;2445:39;;;2480:1;2477;2470:12;2445:39;2504:11;;;;2524:223;2540:6;2535:3;2532:15;2524:223;;;2622:3;2609:17;2639:33;2664:7;2639:33;:::i;:::-;2685:20;;2557:12;;;;2725;;;;2524:223;;;2766:5;2756:15;;;;;;;1621:1156;;;;;:::o;2782:461::-;2835:3;2873:5;2867:12;2900:6;2895:3;2888:19;2926:4;2955:2;2950:3;2946:12;2939:19;;2992:2;2985:5;2981:14;3013:1;3023:195;3037:6;3034:1;3031:13;3023:195;;;3102:13;;-1:-1:-1;;;;;3098:39:504;3086:52;;3158:12;;;;3193:15;;;;3134:1;3052:9;3023:195;;;-1:-1:-1;3234:3:504;;2782:461;-1:-1:-1;;;;;2782:461:504:o;3248:435::-;3301:3;3339:5;3333:12;3366:6;3361:3;3354:19;3392:4;3421:2;3416:3;3412:12;3405:19;;3458:2;3451:5;3447:14;3479:1;3489:169;3503:6;3500:1;3497:13;3489:169;;;3564:13;;3552:26;;3598:12;;;;3633:15;;;;3525:1;3518:9;3489:169;;4163:632;4235:3;4266;4298:5;4292:12;4325:6;4320:3;4313:19;4351:4;4380:2;4375:3;4371:12;4364:19;;4436:2;4426:6;4423:1;4419:14;4412:5;4408:26;4404:35;4473:2;4466:5;4462:14;4494:1;4504:265;4518:6;4515:1;4512:13;4504:265;;;4605:2;4601:7;4593:5;4587:4;4583:16;4579:30;4574:3;4567:43;4631:58;4684:4;4675:6;4669:13;4631:58;:::i;:::-;4747:12;;;;4623:66;-1:-1:-1;4712:15:504;;;;4540:1;4533:9;4504:265;;;-1:-1:-1;4785:4:504;;4163:632;-1:-1:-1;;;;;;;4163:632:504:o;4800:2537::-;5454:3;5443:9;5436:22;5417:4;5481:57;5533:3;5522:9;5518:19;5510:6;5481:57;:::i;:::-;5557:2;5607:9;5599:6;5595:22;5590:2;5579:9;5575:18;5568:50;5641:44;5678:6;5670;5641:44;:::i;:::-;5627:58;;5704:2;5754:9;5746:6;5742:22;5737:2;5726:9;5722:18;5715:50;5788:63;5844:6;5836;5788:63;:::i;:::-;5774:77;;5899:9;5891:6;5887:22;5882:2;5871:9;5867:18;5860:50;5930:6;5965;5959:13;5996:6;5988;5981:22;6031:2;6023:6;6019:15;6012:22;;6090:2;6080:6;6077:1;6073:14;6065:6;6061:27;6057:36;6128:2;6120:6;6116:15;6149:1;6159:1051;6173:6;6170:1;6167:13;6159:1051;;;6238:19;;;-1:-1:-1;;6234:33:504;6222:46;;6291:13;;6365:9;;6387:24;;;6477:11;;;;6433:15;;;;6512:1;6526:576;6542:8;6537:3;6534:17;6526:576;;;6615:15;;6660:5;6759:1;6777:225;6793:4;6788:3;6785:13;6777:225;;;6874:15;;6860:30;;6967:17;;;;6920:14;;;;6817:1;6808:11;6777:225;;;-1:-1:-1;;;7071:17:504;;;;7028:14;;;;6570:1;6561:11;6526:576;;;-1:-1:-1;;7188:12:504;;;;7125:5;-1:-1:-1;;7153:15:504;;;;6195:1;6188:9;6159:1051;;;6163:3;;7259:9;7251:6;7247:22;7241:3;7230:9;7226:19;7219:51;7287:44;7324:6;7316;7287:44;:::i;:::-;7279:52;4800:2537;-1:-1:-1;;;;;;;;;;;;;4800:2537:504:o;7342:1013::-;7452:6;7483:2;7526;7514:9;7505:7;7501:23;7497:32;7494:52;;;7542:1;7539;7532:12;7494:52;7582:9;7569:23;-1:-1:-1;;;;;7607:6:504;7604:30;7601:50;;;7647:1;7644;7637:12;7601:50;7670:22;;7723:4;7715:13;;7711:27;-1:-1:-1;7701:55:504;;7752:1;7749;7742:12;7701:55;7788:2;7775:16;7811:81;7827:64;7888:2;7827:64;:::i;7811:81::-;7926:15;;;8008:1;8004:10;;;;7996:19;;7992:28;;;7957:12;;;;8032:19;;;8029:39;;;8064:1;8061;8054:12;8029:39;8088:11;;;;8108:217;8124:6;8119:3;8116:15;8108:217;;;8204:3;8191:17;8221:31;8246:5;8221:31;:::i;:::-;8265:18;;8141:12;;;;8303;;;;8108:217;;;8344:5;7342:1013;-1:-1:-1;;;;;;;7342:1013:504:o;8360:1084::-;8423:3;8454;8486:5;8480:12;8513:6;8508:3;8501:19;8539:4;8568:2;8563:3;8559:12;8552:19;;8624:2;8614:6;8611:1;8607:14;8600:5;8596:26;8592:35;8661:2;8654:5;8650:14;8682:1;8703;8713:705;8729:6;8724:3;8721:15;8713:705;;;8798:16;;;-1:-1:-1;;8794:30:504;8782:43;;8848:13;;8920:9;;8942:22;;;9028:11;;;;8986:13;;;;9063:1;9077:235;9093:8;9088:3;9085:17;9077:235;;;9174:15;;-1:-1:-1;;;;;9170:41:504;9156:56;;9281:17;;;;9238:14;;;;9208:1;9112:11;9077:235;;;-1:-1:-1;;9396:12:504;;;;9333:5;-1:-1:-1;;9361:15:504;;;;8755:1;8746:11;8713:705;;;-1:-1:-1;9434:4:504;;8360:1084;-1:-1:-1;;;;;;;;8360:1084:504:o;9449:1058::-;9512:3;9543;9575:5;9569:12;9602:6;9597:3;9590:19;9628:4;9657:2;9652:3;9648:12;9641:19;;9713:2;9703:6;9700:1;9696:14;9689:5;9685:26;9681:35;9750:2;9743:5;9739:14;9771:1;9792;9802:679;9818:6;9813:3;9810:15;9802:679;;;9887:16;;;-1:-1:-1;;9883:30:504;9871:43;;9937:13;;10009:9;;10031:22;;;10117:11;;;;10075:13;;;;10152:1;10166:209;10182:8;10177:3;10174:17;10166:209;;;10259:15;;10245:30;;10344:17;;;;10301:14;;;;10210:1;10201:11;10166:209;;;-1:-1:-1;;10459:12:504;;;;10396:5;-1:-1:-1;;10424:15:504;;;;9844:1;9835:11;9802:679;;10512:634;10585:3;10616;10648:5;10642:12;10675:6;10670:3;10663:19;10701:4;10730:2;10725:3;10721:12;10714:19;;10786:2;10776:6;10773:1;10769:14;10762:5;10758:26;10754:35;10823:2;10816:5;10812:14;10844:1;10854:266;10868:6;10865:1;10862:13;10854:266;;;10955:2;10951:7;10943:5;10937:4;10933:16;10929:30;10924:3;10917:43;10981:59;11035:4;11026:6;11020:13;10981:59;:::i;:::-;11098:12;;;;10973:67;-1:-1:-1;11063:15:504;;;;10890:1;10883:9;10854:266;;11151:1526;12009:3;11998:9;11991:22;11972:4;12036:76;12107:3;12096:9;12092:19;12084:6;12036:76;:::i;:::-;12160:9;12152:6;12148:22;12143:2;12132:9;12128:18;12121:50;12194:54;12241:6;12233;12194:54;:::i;:::-;12180:68;;12296:9;12288:6;12284:22;12279:2;12268:9;12264:18;12257:50;12330:54;12377:6;12369;12330:54;:::i;:::-;12316:68;;12432:9;12424:6;12420:22;12415:2;12404:9;12400:18;12393:50;12466:64;12523:6;12515;12466:64;:::i;:::-;12452:78;;12579:9;12571:6;12567:22;12561:3;12550:9;12546:19;12539:51;12607:64;12664:6;12656;12607:64;:::i;:::-;12599:72;11151:1526;-1:-1:-1;;;;;;;;11151:1526:504:o;12682:273::-;12767:6;12820:2;12808:9;12799:7;12795:23;12791:32;12788:52;;;12836:1;12833;12826:12;12788:52;12875:9;12862:23;12894:31;12919:5;12894:31;:::i;12960:1226::-;13568:3;13557:9;13550:22;13531:4;13595:66;13656:3;13645:9;13641:19;13633:6;13595:66;:::i;:::-;13709:9;13701:6;13697:22;13692:2;13681:9;13677:18;13670:50;13743:44;13780:6;13772;13743:44;:::i;:::-;13729:58;;13835:9;13827:6;13823:22;13818:2;13807:9;13803:18;13796:50;13869:44;13906:6;13898;13869:44;:::i;:::-;13855:58;;13961:9;13953:6;13949:22;13944:2;13933:9;13929:18;13922:50;13995:54;14042:6;14034;13995:54;:::i;:::-;13981:68;;14098:9;14090:6;14086:22;14080:3;14069:9;14065:19;14058:51;14126:54;14173:6;14165;14126:54;:::i;14191:1284::-;14471:4;14500:3;14541:2;14530:9;14526:18;14580:1;14576;14571:3;14567:11;14563:19;14621:2;14613:6;14609:15;14598:9;14591:34;14644:2;14696:6;14689:14;14682:22;14677:2;14666:9;14662:18;14655:50;14724:2;14776:6;14769:14;14762:22;14757:2;14746:9;14742:18;14735:50;14804:2;14842;14837;14826:9;14822:18;14815:30;14865:6;14900;14894:13;14931:6;14923;14916:22;14969:3;14958:9;14954:19;14947:26;;15008:2;15000:6;14996:15;14982:29;;15029:1;15039:410;15053:6;15050:1;15047:13;15039:410;;;15112:13;;15154:9;;15150:18;;15138:31;;15213:11;;;15207:18;15203:27;;15189:12;;;15182:49;15285:11;;;15279:18;15272:26;15265:34;15251:12;;;15244:56;15354:11;;15348:18;15341:26;15334:34;15320:12;;;15313:56;15424:15;;;;15389:12;;;;15075:1;15068:9;15039:410;;;-1:-1:-1;15466:3:504;;14191:1284;-1:-1:-1;;;;;;;;;;;;;14191:1284:504:o;15732:1088::-;16143:2;16132:9;16125:21;16106:4;16169:56;16221:2;16210:9;16206:18;16198:6;16169:56;:::i;:::-;16282:22;;;16244:2;16262:18;;;16255:50;;;;16354:13;;16376:22;;;16452:15;;;;16414;;;16485:1;16495:195;16509:6;16506:1;16503:13;16495:195;;;16574:13;;-1:-1:-1;;;;;16570:39:504;16558:52;;16665:15;;;;16630:12;;;;16606:1;16524:9;16495:195;;;16499:3;;16735:9;16730:3;16726:19;16721:2;16710:9;16706:18;16699:47;16763:51;16810:3;16802:6;16763:51;:::i;17329:127::-;17390:10;17385:3;17381:20;17378:1;17371:31;17421:4;17418:1;17411:15;17445:4;17442:1;17435:15;17461:138;17540:13;;17562:31;17540:13;17562:31;:::i;:::-;17461:138;;;:::o;17604:251::-;17674:6;17727:2;17715:9;17706:7;17702:23;17698:32;17695:52;;;17743:1;17740;17733:12;17695:52;17775:9;17769:16;17794:31;17819:5;17794:31;:::i;17860:994::-;17972:6;18003:2;18046;18034:9;18025:7;18021:23;18017:32;18014:52;;;18062:1;18059;18052:12;18014:52;18095:9;18089:16;-1:-1:-1;;;;;18120:6:504;18117:30;18114:50;;;18160:1;18157;18150:12;18114:50;18183:22;;18236:4;18228:13;;18224:27;-1:-1:-1;18214:55:504;;18265:1;18262;18255:12;18214:55;18294:2;18288:9;18317:81;18333:64;18394:2;18333:64;:::i;18317:81::-;18432:15;;;18514:1;18510:10;;;;18502:19;;18498:28;;;18463:12;;;;18538:19;;;18535:39;;;18570:1;18567;18560:12;18535:39;18594:11;;;;18614:210;18630:6;18625:3;18622:15;18614:210;;;18703:3;18697:10;18720:31;18745:5;18720:31;:::i;:::-;18764:18;;18647:12;;;;18802;;;;18614:210;;18859:127;18920:10;18915:3;18911:20;18908:1;18901:31;18951:4;18948:1;18941:15;18975:4;18972:1;18965:15;18991:135;19030:3;-1:-1:-1;;19051:17:504;;19048:43;;;19071:18;;:::i;:::-;-1:-1:-1;19118:1:504;19107:13;;18991:135::o;19339:184::-;19409:6;19462:2;19450:9;19441:7;19437:23;19433:32;19430:52;;;19478:1;19475;19468:12;19430:52;-1:-1:-1;19501:16:504;;19339:184;-1:-1:-1;19339:184:504:o;19528:977::-;19623:6;19654:2;19697;19685:9;19676:7;19672:23;19668:32;19665:52;;;19713:1;19710;19703:12;19665:52;19746:9;19740:16;-1:-1:-1;;;;;19771:6:504;19768:30;19765:50;;;19811:1;19808;19801:12;19765:50;19834:22;;19887:4;19879:13;;19875:27;-1:-1:-1;19865:55:504;;19916:1;19913;19906:12;19865:55;19945:2;19939:9;19968:81;19984:64;20045:2;19984:64;:::i;19968:81::-;20083:15;;;20165:1;20161:10;;;;20153:19;;20149:28;;;20114:12;;;;20189:19;;;20186:39;;;20221:1;20218;20211:12;20186:39;20245:11;;;;20265:210;20281:6;20276:3;20273:15;20265:210;;;20354:3;20348:10;20371:31;20396:5;20371:31;:::i;:::-;20415:18;;20298:12;;;;20453;;;;20265:210;;20510:164;20586:13;;20635;;20628:21;20618:32;;20608:60;;20664:1;20661;20654:12;20679:202;20746:6;20799:2;20787:9;20778:7;20774:23;20770:32;20767:52;;;20815:1;20812;20805:12;20767:52;20838:37;20865:9;20838:37;:::i;20886:263::-;20962:6;20970;21023:2;21011:9;21002:7;20998:23;20994:32;20991:52;;;21039:1;21036;21029:12;20991:52;21062:37;21089:9;21062:37;:::i;:::-;21052:47;;21139:2;21128:9;21124:18;21118:25;21108:35;;20886:263;;;;;:::o;21154:2552::-;21223:5;21253:4;21297:3;21292:2;21284:6;21280:15;21276:25;21266:53;;21315:1;21312;21305:12;21266:53;21344:6;21338:13;21370:4;21394:81;21410:64;21471:2;21410:64;:::i;21394:81::-;21509:15;;;21595:1;21591:10;;;;21579:23;;21575:32;;;21540:12;;;;21619:15;;;21616:35;;;21647:1;21644;21637:12;21616:35;21683:2;21675:6;21671:15;21695:1982;21711:6;21706:3;21703:15;21695:1982;;;21790:3;21784:10;-1:-1:-1;;;;;21867:2:504;21854:11;21851:19;21848:109;;;21911:1;21940:2;21936;21929:14;21848:109;21980:24;;;;22027:4;-1:-1:-1;;22085:12:504;;;22081:21;;22077:30;-1:-1:-1;22074:120:504;;;22148:1;22177:2;22173;22166:14;22074:120;22220:22;;:::i;:::-;22285:2;22281;22277:11;22271:18;22318:2;22308:8;22305:16;22302:109;;;22363:1;22393:3;22388;22381:16;22302:109;22435:17;;22488:2;22479:12;;22475:22;-1:-1:-1;22465:123:504;;22540:1;22570:3;22565;22558:16;22465:123;22627:2;22622:3;22618:12;22612:19;22655:2;22650:3;22647:11;22644:37;;;22661:18;;:::i;:::-;22709:47;22752:2;22747;22742;22737:3;22733:12;22729:21;22725:30;22709:47;:::i;:::-;22694:62;;22785:3;22776:7;22769:20;22813:2;22802:13;;22859:3;22853;22847;22842;22838:13;22834:23;22831:32;22828:125;;;22905:1;22935:3;22930;22923:16;22828:125;22975:1;22989:145;23003:3;23000:1;22997:10;22989:145;;;23101:11;;;23097:21;;23091:28;23069:15;;;23065:24;;23058:62;23015:10;;22989:145;;;23156:3;23153:1;23150:10;23147:95;;;23226:1;23221:2;23215:3;23206:7;23202:17;23198:26;23191:37;23147:95;;;;23269:7;23262:5;23255:22;23313:43;23351:3;23347:2;23343:12;23313:43;:::i;:::-;23308:2;23301:5;23297:14;23290:67;23381:2;23370:13;;23420:43;23458:3;23454:2;23450:12;23420:43;:::i;:::-;23403:15;;;23396:68;;;;23488:3;23534:12;;;23528:19;23511:15;;;23504:44;;;;23591:11;;23585:18;23568:15;;;23561:43;23617:18;;23655:12;;;;21728;;21695:1982;;;-1:-1:-1;23695:5:504;21154:2552;-1:-1:-1;;;;;;;21154:2552:504:o;23711:1181::-;23862:6;23870;23923:2;23911:9;23902:7;23898:23;23894:32;23891:52;;;23939:1;23936;23929:12;23891:52;23972:9;23966:16;-1:-1:-1;;;;;24042:2:504;24034:6;24031:14;24028:34;;;24058:1;24055;24048:12;24028:34;24096:6;24085:9;24081:22;24071:32;;24141:7;24134:4;24130:2;24126:13;24122:27;24112:55;;24163:1;24160;24153:12;24112:55;24192:2;24186:9;24214:4;24238:81;24254:64;24315:2;24254:64;:::i;24238:81::-;24353:15;;;24435:1;24431:10;;;;24423:19;;24419:28;;;24384:12;;;;24459:19;;;24456:39;;;24491:1;24488;24481:12;24456:39;24515:11;;;;24535:135;24551:6;24546:3;24543:15;24535:135;;;24617:10;;24605:23;;24568:12;;;;24648;;;;24535:135;;;24725:18;;;24719:25;24689:5;;-1:-1:-1;24719:25:504;;-1:-1:-1;;;24756:16:504;;;24753:36;;;24785:1;24782;24775:12;24753:36;;24808:78;24878:7;24867:8;24856:9;24852:24;24808:78;:::i;:::-;24798:88;;;23711:1181;;;;;:::o;26928:125::-;26968:4;26996:1;26993;26990:8;26987:34;;;27001:18;;:::i;:::-;-1:-1:-1;27038:9:504;;26928:125::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "directory()": "c41c2f24", + "getFlywheelsToClaim(address)": "998e2d4a", + "getMaxBorrow(address,address)": "1ec18ec0", + "getMaxRedeem(address,address)": "64129042", + "getPoolOwnership(address)": "97f35ff0", + "getRewardSpeedsByPool(address)": "84b3403d", + "getRewardSpeedsByPools(address[])": "3fc5fab5", + "getRewardsDistributorsBySupplier(address)": "d24eaf13", + "getUnclaimedRewardsByDistributors(address,address[])": "338038fa", + "initialize(address)": "c4d66de8" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/PythPriceOracle.json b/packages/sdk/deployments/bob/PythPriceOracle.json new file mode 100644 index 000000000..481f633a6 --- /dev/null +++ b/packages/sdk/deployments/bob/PythPriceOracle.json @@ -0,0 +1,580 @@ +{ + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "NATIVE_TOKEN_USD_FEED", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PYTH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPyth" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "USD_TOKEN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "pythAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenUsdFeed", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "usdToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "priceFeedIds", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "reinitialize", + "inputs": [ + { + "name": "pythAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenUsdFeed", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "usdToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPriceFeeds", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "feedIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "transactionIndex": 1, + "gasUsed": "840424", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000004000020200000000000000000800000000800000000000000000000000400000000000000000000000000200000002000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000080000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000040000000000", + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8", + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000008d5b096c99b26d07c7f8d8a8f25be97427687f73" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + }, + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + }, + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + }, + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + }, + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + } + ], + "blockNumber": 3777921, + "cumulativeGasUsed": "884263", + "status": 1, + "byzantium": true + }, + "args": [ + "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xd26b3e6e000000000000000000000000ff1a0f4744e8582df1ae09d5611b887b6a12925cff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace000000000000000000000000e75d0fb2c24a55ca1e3f96781a2bcc7bdba058f0" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [ + "0xff1a0f4744e8582DF1aE09D5611b887B6a12925C", + "0xff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace", + "0xe75D0fB2C24A55cA1e3F96781a2bCC7bdba058F0" + ] + }, + "implementation": "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/PythPriceOracle_Implementation.json b/packages/sdk/deployments/bob/PythPriceOracle_Implementation.json new file mode 100644 index 000000000..3b10acb02 --- /dev/null +++ b/packages/sdk/deployments/bob/PythPriceOracle_Implementation.json @@ -0,0 +1,1002 @@ +{ + "address": "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "abi": [ + { + "type": "function", + "name": "NATIVE_TOKEN_USD_FEED", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "PYTH", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "contract IPyth" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "USD_TOKEN", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [ + { + "name": "pythAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenUsdFeed", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "usdToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "priceFeedIds", + "inputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "bytes32", + "internalType": "bytes32" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "reinitialize", + "inputs": [ + { + "name": "pythAddress", + "type": "address", + "internalType": "address" + }, + { + "name": "nativeTokenUsdFeed", + "type": "bytes32", + "internalType": "bytes32" + }, + { + "name": "usdToken", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setPriceFeeds", + "inputs": [ + { + "name": "underlyings", + "type": "address[]", + "internalType": "address[]" + }, + { + "name": "feedIds", + "type": "bytes32[]", + "internalType": "bytes32[]" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + } + ], + "transactionHash": "0xb03fff49f5104c081863e97df9878ef4e6d2f5137ea6cae0cd17e1052ee634b6", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "transactionIndex": 1, + "gasUsed": "1060686", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x1eac0c58c2d416d3fb6c9f2bd88de15e4ac077d78017a04b33e8b15fa86ff705", + "transactionHash": "0xb03fff49f5104c081863e97df9878ef4e6d2f5137ea6cae0cd17e1052ee634b6", + "logs": [], + "blockNumber": 3777917, + "cumulativeGasUsed": "1104525", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "NATIVE_TOKEN_USD_FEED", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "PYTH", + "outputs": [ + { + "internalType": "contract IPyth", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "USD_TOKEN", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pythAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nativeTokenUsdFeed", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "usdToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "priceFeedIds", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "pythAddress", + "type": "address" + }, + { + "internalType": "bytes32", + "name": "nativeTokenUsdFeed", + "type": "bytes32" + }, + { + "internalType": "address", + "name": "usdToken", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "reinitialize" + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address[]", + "name": "underlyings", + "type": "address[]" + }, + { + "internalType": "bytes32[]", + "name": "feedIds", + "type": "bytes32[]" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setPriceFeeds" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "getUnderlyingPrice(address)": { + "details": "Implements the `PriceOracle` interface for Ionic pools (and Compound v2).", + "returns": { + "_0": "Price in ETH of the token underlying `cToken`, scaled by `10 ** (36 - underlyingDecimals)`." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "price(address)": { + "details": "Returns the price in ETH of `underlying` (implements `BasePriceOracle`)." + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "setPriceFeeds(address[],bytes32[])": { + "details": "Admin-only function to set price feeds.", + "params": { + "feedIds": "The Pyth Network feed IDs`.", + "underlyings": "Underlying token addresses for which to set price feeds." + } + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "NATIVE_TOKEN_USD_FEED()": { + "notice": "DIA NATIVE/USD price feed contracts." + }, + "USD_TOKEN()": { + "notice": "MasterPriceOracle for backup for USD price." + }, + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "getUnderlyingPrice(address)": { + "notice": "Returns the price in ETH of the token underlying `cToken`." + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + }, + "priceFeedIds(address)": { + "notice": "Maps ERC20 token addresses to Pyth price IDs." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/default/PythPriceOracle.sol": "PythPriceOracle" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/MasterPriceOracle.sol": { + "keccak256": "0x8748b7e74b8f789617f0b387cd2e2259a0fa3639d54234d7e6c99cb3eae6fc9a", + "urls": [ + "bzz-raw://a4e46033c3a440f48bfe45adb3b06db2b5870e3179f5170cd708c3030d240f39", + "dweb:/ipfs/QmPQZwCprBqi8BASL8nJpP63BpFGUS48ioyhS29GSAWp2r" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/PythPriceOracle.sol": { + "keccak256": "0x78b807249630d7858b00a94b941e23b7d30c85831214b328f08877db4e32a771", + "urls": [ + "bzz-raw://c9e3198f7c462729beabd5adfb76493be2bdda6963afa3545373aac6f1a46aa9", + "dweb:/ipfs/QmRtgCGfZ2FtFLyjPJU57HWcbURGyEWW5hnM2UxcBZjKXV" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/pyth-sdk-solidity/IPyth.sol": { + "keccak256": "0x949c65c65fea0578c09a6fc068e09ed1165adede2c835984cefcb25d76de1de2", + "urls": [ + "bzz-raw://4d7cb071e08e81bb8b113a928f4c2d2b3cdf950ad64c6c7003ea3d874163ca77", + "dweb:/ipfs/QmRbQchPxRTBMHi7WzLb8XnMGzPDQcWhu7i2u5naUsCRoZ" + ], + "license": "Apache-2.0" + }, + "lib/pyth-sdk-solidity/IPythEvents.sol": { + "keccak256": "0x048a35526c2e77d107d43ba336f1dcf31f64cef25ba429ae1f7a0fbc11c23320", + "urls": [ + "bzz-raw://b75be4c3643b22305995aba71fc92146dbf51fa82d2f9728c515d7749b32dca3", + "dweb:/ipfs/QmRby4XA9jJQGhxoJ16BTUDuU7BzLFfadbfTgBiQsDgNyZ" + ], + "license": "Apache-2.0" + }, + "lib/pyth-sdk-solidity/PythStructs.sol": { + "keccak256": "0x95ff0a6d64517348ef604b8bcf246b561a9445d7e607b8f48491c617cfda9b65", + "urls": [ + "bzz-raw://fb7f4ffe03be7379d3833c5946e38153de26aef4a4da0323a1ec603787de9eb7", + "dweb:/ipfs/QmW4WkkLPGjDJrLrW4mYfxtFh8e9KAcPhrnNdxPQsfkS6t" + ], + "license": "Apache-2.0" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50611239806100206000396000f3fe608060405234801561001057600080fd5b50600436106100f55760003560e01c80639d23c81211610097578063e30c397811610066578063e30c3978146101ee578063f2fde38b14610201578063fc4d33f914610214578063fc57d4df1461021c57600080fd5b80639d23c812146101a2578063aea91078146101b5578063ca4737ca146101c8578063d26b3e6e146101db57600080fd5b80636e96dfd7116100d35780636e96dfd71461016d578063715018a61461018057806380f96bd1146101885780638da5cb5b1461019157600080fd5b806301e169e4146100fa578063336eb6ae1461010f57806367e406d514610142575b600080fd5b61010d610108366004610e3a565b61022f565b005b61012f61011d366004610efc565b60666020526000908152604090205481565b6040519081526020015b60405180910390f35b606954610155906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b61010d61017b366004610efc565b610339565b61010d6103a3565b61012f60675481565b6033546001600160a01b0316610155565b606854610155906001600160a01b031681565b61012f6101c3366004610efc565b6103e6565b61010d6101d6366004610f20565b6103f7565b61010d6101e9366004610f20565b6104ee565b606554610155906001600160a01b031681565b61010d61020f366004610efc565b610638565b61010d6106a9565b61012f61022a366004610efc565b6107bd565b6102376108f1565b60008251118015610249575080518251145b6102c05760405162461bcd60e51b815260206004820152603860248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201527f7175616c20616e642067726561746572207468616e20302e000000000000000060648201526084015b60405180910390fd5b60005b82518110156103345760008382815181106102e0576102e0610f62565b602002602001015190508282815181106102fc576102fc610f62565b6020908102919091018101516001600160a01b039092166000908152606690915260409020558061032c81610f8e565b9150506102c3565b505050565b6103416108f1565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6103ab6108f1565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016102b7565b60006103f18261094d565b92915050565b6033546001600160a01b03163314806104b657600061043d7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b0381163314806104b35760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b60648201526084016102b7565b50505b50606791909155606880546001600160a01b039283166001600160a01b03199182161790915560698054939092169216919091179055565b600054610100900460ff161580801561050e5750600054600160ff909116105b806105285750303b158015610528575060005460ff166001145b61058b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102b7565b6000805460ff1916600117905580156105ae576000805461ff0019166101001790555b6105b733610c68565b6067839055606880546001600160a01b038085166001600160a01b03199283161790925560698054928716929091169190911790558015610632576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6106406108f1565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146106fb5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016102b7565b600061070f6033546001600160a01b031690565b6065549091506001600160a01b031661072781610ca3565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610397565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190610fa9565b9050600061082f8261094d565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108959190610fc6565b60ff16905060128111156108c8576108ae601282610fe9565b6108b990600a6110e4565b6108c390836110f0565b6108e8565b6108d3816012610fe9565b6108de90600a6110e4565b6108e89083611112565b95945050505050565b6033546001600160a01b0316331461094b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b7565b565b6001600160a01b038116600090815260666020526040812054806109d95760405162461bcd60e51b815260206004820152603b60248201527f4e6f206f7261636c65207072696365206665656420666f756e6420666f72207460448201527f68697320756e6465726c79696e6720455243323020746f6b656e2e000000000060648201526084016102b7565b606754610b30576068546040516315d5220f60e31b81526001600160a01b039091166004820152600090339063aea9107890602401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611131565b90506000610a6c826ec097ce7bc90715b34b9f10000000006110f0565b6069546040516396834ad360e01b8152600481018690529192506000916001600160a01b03909116906396834ad390602401608060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf919061114a565b90506000816000015160070b1215610af8576000610b26565b80518290610b1c9067ffffffffffffffff166b204fce5e3e25026110000000611112565b610b2691906110f0565b9695505050505050565b6069546067546040516396834ad360e01b815260048101919091526000916001600160a01b0316906396834ad390602401608060405180830381865afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba2919061114a565b5167ffffffffffffffff16905080610bbe575060009392505050565b6069546040516396834ad360e01b8152600481018490526000916001600160a01b0316906396834ad390602401608060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061114a565b5167ffffffffffffffff1690506fffffffffffffffffffffffffffffffff8216610c5e82670de0b6b3a7640000611112565b6108e891906110f0565b600054610100900460ff16610c8f5760405162461bcd60e51b81526004016102b7906111e1565b610c97610cf5565b610ca081610ca3565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d1c5760405162461bcd60e51b81526004016102b7906111e1565b61094b600054610100900460ff16610d465760405162461bcd60e51b81526004016102b7906111e1565b61094b33610ca3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8e57610d8e610d4f565b604052919050565b600067ffffffffffffffff821115610db057610db0610d4f565b5060051b60200190565b6001600160a01b0381168114610ca057600080fd5b600082601f830112610de057600080fd5b81356020610df5610df083610d96565b610d65565b82815260059290921b84018101918181019086841115610e1457600080fd5b8286015b84811015610e2f5780358352918301918301610e18565b509695505050505050565b60008060408385031215610e4d57600080fd5b823567ffffffffffffffff80821115610e6557600080fd5b818501915085601f830112610e7957600080fd5b81356020610e89610df083610d96565b82815260059290921b84018101918181019089841115610ea857600080fd5b948201945b83861015610ecf578535610ec081610dba565b82529482019490820190610ead565b96505086013592505080821115610ee557600080fd5b50610ef285828601610dcf565b9150509250929050565b600060208284031215610f0e57600080fd5b8135610f1981610dba565b9392505050565b600080600060608486031215610f3557600080fd5b8335610f4081610dba565b9250602084013591506040840135610f5781610dba565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610fa257610fa2610f78565b5060010190565b600060208284031215610fbb57600080fd5b8151610f1981610dba565b600060208284031215610fd857600080fd5b815160ff81168114610f1957600080fd5b600082821015610ffb57610ffb610f78565b500390565b600181815b8085111561103b57816000190482111561102157611021610f78565b8085161561102e57918102915b93841c9390800290611005565b509250929050565b600082611052575060016103f1565b8161105f575060006103f1565b8160018114611075576002811461107f5761109b565b60019150506103f1565b60ff84111561109057611090610f78565b50506001821b6103f1565b5060208310610133831016604e8410600b84101617156110be575081810a6103f1565b6110c88383611000565b80600019048211156110dc576110dc610f78565b029392505050565b6000610f198383611043565b60008261110d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561112c5761112c610f78565b500290565b60006020828403121561114357600080fd5b5051919050565b60006080828403121561115c57600080fd5b6040516080810167ffffffffffffffff828210818311171561118057611180610d4f565b81604052845191508160070b821461119757600080fd5b90825260208401519080821682146111ae57600080fd5b5060208201526040830151600381900b81146111c957600080fd5b60408201526060928301519281019290925250919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "721:4051:267:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100f55760003560e01c80639d23c81211610097578063e30c397811610066578063e30c3978146101ee578063f2fde38b14610201578063fc4d33f914610214578063fc57d4df1461021c57600080fd5b80639d23c812146101a2578063aea91078146101b5578063ca4737ca146101c8578063d26b3e6e146101db57600080fd5b80636e96dfd7116100d35780636e96dfd71461016d578063715018a61461018057806380f96bd1146101885780638da5cb5b1461019157600080fd5b806301e169e4146100fa578063336eb6ae1461010f57806367e406d514610142575b600080fd5b61010d610108366004610e3a565b61022f565b005b61012f61011d366004610efc565b60666020526000908152604090205481565b6040519081526020015b60405180910390f35b606954610155906001600160a01b031681565b6040516001600160a01b039091168152602001610139565b61010d61017b366004610efc565b610339565b61010d6103a3565b61012f60675481565b6033546001600160a01b0316610155565b606854610155906001600160a01b031681565b61012f6101c3366004610efc565b6103e6565b61010d6101d6366004610f20565b6103f7565b61010d6101e9366004610f20565b6104ee565b606554610155906001600160a01b031681565b61010d61020f366004610efc565b610638565b61010d6106a9565b61012f61022a366004610efc565b6107bd565b6102376108f1565b60008251118015610249575080518251145b6102c05760405162461bcd60e51b815260206004820152603860248201527f4c656e67746873206f6620626f746820617272617973206d757374206265206560448201527f7175616c20616e642067726561746572207468616e20302e000000000000000060648201526084015b60405180910390fd5b60005b82518110156103345760008382815181106102e0576102e0610f62565b602002602001015190508282815181106102fc576102fc610f62565b6020908102919091018101516001600160a01b039092166000908152606690915260409020558061032c81610f8e565b9150506102c3565b505050565b6103416108f1565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b6103ab6108f1565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064016102b7565b60006103f18261094d565b92915050565b6033546001600160a01b03163314806104b657600061043d7fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103546001600160a01b031690565b90506001600160a01b0381163314806104b35760405162461bcd60e51b815260206004820152603260248201527f4f776e61626c653a2063616c6c6572206973206e65697468657220746865206f6044820152713bb732b9103737b9103a34329030b236b4b760711b60648201526084016102b7565b50505b50606791909155606880546001600160a01b039283166001600160a01b03199182161790915560698054939092169216919091179055565b600054610100900460ff161580801561050e5750600054600160ff909116105b806105285750303b158015610528575060005460ff166001145b61058b5760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016102b7565b6000805460ff1916600117905580156105ae576000805461ff0019166101001790555b6105b733610c68565b6067839055606880546001600160a01b038085166001600160a01b03199283161790925560698054928716929091169190911790558015610632576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50505050565b6106406108f1565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146106fb5760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016102b7565b600061070f6033546001600160a01b031690565b6065549091506001600160a01b031661072781610ca3565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610397565b600080826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa1580156107fe573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108229190610fa9565b9050600061082f8261094d565b90506000826001600160a01b031663313ce5676040518163ffffffff1660e01b8152600401602060405180830381865afa158015610871573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108959190610fc6565b60ff16905060128111156108c8576108ae601282610fe9565b6108b990600a6110e4565b6108c390836110f0565b6108e8565b6108d3816012610fe9565b6108de90600a6110e4565b6108e89083611112565b95945050505050565b6033546001600160a01b0316331461094b5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016102b7565b565b6001600160a01b038116600090815260666020526040812054806109d95760405162461bcd60e51b815260206004820152603b60248201527f4e6f206f7261636c65207072696365206665656420666f756e6420666f72207460448201527f68697320756e6465726c79696e6720455243323020746f6b656e2e000000000060648201526084016102b7565b606754610b30576068546040516315d5220f60e31b81526001600160a01b039091166004820152600090339063aea9107890602401602060405180830381865afa158015610a2b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a4f9190611131565b90506000610a6c826ec097ce7bc90715b34b9f10000000006110f0565b6069546040516396834ad360e01b8152600481018690529192506000916001600160a01b03909116906396834ad390602401608060405180830381865afa158015610abb573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610adf919061114a565b90506000816000015160070b1215610af8576000610b26565b80518290610b1c9067ffffffffffffffff166b204fce5e3e25026110000000611112565b610b2691906110f0565b9695505050505050565b6069546067546040516396834ad360e01b815260048101919091526000916001600160a01b0316906396834ad390602401608060405180830381865afa158015610b7e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ba2919061114a565b5167ffffffffffffffff16905080610bbe575060009392505050565b6069546040516396834ad360e01b8152600481018490526000916001600160a01b0316906396834ad390602401608060405180830381865afa158015610c08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610c2c919061114a565b5167ffffffffffffffff1690506fffffffffffffffffffffffffffffffff8216610c5e82670de0b6b3a7640000611112565b6108e891906110f0565b600054610100900460ff16610c8f5760405162461bcd60e51b81526004016102b7906111e1565b610c97610cf5565b610ca081610ca3565b50565b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b600054610100900460ff16610d1c5760405162461bcd60e51b81526004016102b7906111e1565b61094b600054610100900460ff16610d465760405162461bcd60e51b81526004016102b7906111e1565b61094b33610ca3565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610d8e57610d8e610d4f565b604052919050565b600067ffffffffffffffff821115610db057610db0610d4f565b5060051b60200190565b6001600160a01b0381168114610ca057600080fd5b600082601f830112610de057600080fd5b81356020610df5610df083610d96565b610d65565b82815260059290921b84018101918181019086841115610e1457600080fd5b8286015b84811015610e2f5780358352918301918301610e18565b509695505050505050565b60008060408385031215610e4d57600080fd5b823567ffffffffffffffff80821115610e6557600080fd5b818501915085601f830112610e7957600080fd5b81356020610e89610df083610d96565b82815260059290921b84018101918181019089841115610ea857600080fd5b948201945b83861015610ecf578535610ec081610dba565b82529482019490820190610ead565b96505086013592505080821115610ee557600080fd5b50610ef285828601610dcf565b9150509250929050565b600060208284031215610f0e57600080fd5b8135610f1981610dba565b9392505050565b600080600060608486031215610f3557600080fd5b8335610f4081610dba565b9250602084013591506040840135610f5781610dba565b809150509250925092565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b6000600019821415610fa257610fa2610f78565b5060010190565b600060208284031215610fbb57600080fd5b8151610f1981610dba565b600060208284031215610fd857600080fd5b815160ff81168114610f1957600080fd5b600082821015610ffb57610ffb610f78565b500390565b600181815b8085111561103b57816000190482111561102157611021610f78565b8085161561102e57918102915b93841c9390800290611005565b509250929050565b600082611052575060016103f1565b8161105f575060006103f1565b8160018114611075576002811461107f5761109b565b60019150506103f1565b60ff84111561109057611090610f78565b50506001821b6103f1565b5060208310610133831016604e8410600b84101617156110be575081810a6103f1565b6110c88383611000565b80600019048211156110dc576110dc610f78565b029392505050565b6000610f198383611043565b60008261110d57634e487b7160e01b600052601260045260246000fd5b500490565b600081600019048311821515161561112c5761112c610f78565b500290565b60006020828403121561114357600080fd5b5051919050565b60006080828403121561115c57600080fd5b6040516080810167ffffffffffffffff828210818311171561118057611180610d4f565b81604052845191508160070b821461119757600080fd5b90825260208401519080821682146111ae57600080fd5b5060208201526040830151600381900b81146111c957600080fd5b60408201526060928301519281019290925250919050565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b60608201526080019056fea164736f6c634300080a000a", + "sourceMap": "721:4051:267:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2012:495;;;;;;:::i;:::-;;:::i;:::-;;864:47;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;3035:25:504;;;3023:2;3008:18;864:47:267;;;;;;;;1284:17;;;;;-1:-1:-1;;;;;1284:17:267;;;;;;-1:-1:-1;;;;;3251:32:504;;;3233:51;;3221:2;3206:18;1284:17:267;3071:219:504;1602:386:140;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;978:36:267:-;;;;;;1441:85:454;1513:6;;-1:-1:-1;;;;;1513:6:454;1441:85;;1088:24:267;;;;;-1:-1:-1;;;;;1088:24:267;;;3857:112;;;;;;:::i;:::-;;:::i;1578:239::-;;;;;;:::i;:::-;;:::i;1306:268::-;;;;;;:::i;:::-;;:::i;530:27:140:-;;;;;-1:-1:-1;;;;;530:27:140;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;4246:524:267:-;;;;;;:::i;:::-;;:::i;2012:495::-;1334:13:454;:11;:13::i;:::-;2176:1:267::1;2155:11;:18;:22;:62;;;;;2203:7;:14;2181:11;:18;:36;2155:62;2140:149;;;::::0;-1:-1:-1;;;2140:149:267;;4617:2:504;2140:149:267::1;::::0;::::1;4599:21:504::0;4656:2;4636:18;;;4629:30;4695:34;4675:18;;;4668:62;4766:26;4746:18;;;4739:54;4810:19;;2140:149:267::1;;;;;;;;;2328:9;2323:180;2347:11;:18;2343:1;:22;2323:180;;;2380:18;2401:11;2413:1;2401:14;;;;;;;;:::i;:::-;;;;;;;2380:35;;2486:7;2494:1;2486:10;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;2459:24:267;;::::1;;::::0;;;:12:::1;:24:::0;;;;;;:37;2367:3;::::1;::::0;::::1;:::i;:::-;;;;2323:180;;;;2012:495:::0;;:::o;1602:386:140:-;1334:13:454;:11;:13::i;:::-;1758:12:140::1;::::0;;-1:-1:-1;;;;;1830:30:140;;::::1;-1:-1:-1::0;;;;;;1830:30:140;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;5456:34:504::0;;;5521:2;5506:18;;5499:43;;;;1934:49:140::1;::::0;5391:18:504;1934:49:140::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:454;:11;:13::i;:::-;2804:26:140::1;::::0;-1:-1:-1;;;2804:26:140;;5755:2:504;2804:26:140::1;::::0;::::1;5737:21:504::0;5794:2;5774:18;;;5767:30;-1:-1:-1;;;5813:18:504;;;5806:46;5869:18;;2804:26:140::1;5553:340:504::0;3857:112:267;3924:7;3946:18;3953:10;3946:6;:18::i;:::-;3939:25;3857:112;-1:-1:-1;;3857:112:267:o;1578:239::-;1513:6:454;;-1:-1:-1;;;;;1513:6:454;929:10:467;791:23:140;;820:183;;842:13;858:16;3090:66;3262:15;-1:-1:-1;;;;;3262:15:140;;2998:284;858:16;842:32;-1:-1:-1;;;;;;897:21:140;;929:10:467;897:21:140;;926:70;;;;-1:-1:-1;;;926:70:140;;6100:2:504;926:70:140;;;6082:21:504;6139:2;6119:18;;;6112:30;6178:34;6158:18;;;6151:62;-1:-1:-1;;;6229:18:504;;;6222:48;6287:19;;926:70:140;5898:414:504;926:70:140;834:169;;820:183;-1:-1:-1;1713:21:267::1;:42:::0;;;;1761:9:::1;:20:::0;;-1:-1:-1;;;;;1761:20:267;;::::1;-1:-1:-1::0;;;;;;1761:20:267;;::::1;;::::0;;;1787:4:::1;:25:::0;;;;;::::1;::::0;::::1;::::0;;;::::1;::::0;;1578:239::o;1306:268::-;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;6519:2:504;3314:201:457;;;6501:21:504;6558:2;6538:18;;;6531:30;6597:34;6577:18;;;6570:62;-1:-1:-1;;;6648:18:504;;;6641:44;6702:19;;3314:201:457;6317:410:504;3314:201:457;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;1434:30:267::1;1453:10;1434:18;:30::i;:::-;1470:21;:42:::0;;;1518:9:::1;:20:::0;;-1:-1:-1;;;;;1518:20:267;;::::1;-1:-1:-1::0;;;;;;1518:20:267;;::::1;;::::0;;;1544:4:::1;:25:::0;;;;::::1;::::0;;;::::1;::::0;;;::::1;::::0;;3636:99:457;;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;6884:36:504;;3710:14:457;;6872:2:504;6857:18;3710:14:457;;;;;;;3636:99;3258:483;1306:268:267;;;:::o;2839:155:140:-;1334:13:454;:11;:13::i;:::-;2937:12:140::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:140;;::::1;5456:34:504::0;;5526:15;;;5521:2;5506:18;;5499:43;2921:39:140::1;::::0;5391:18:504;2921:39:140::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:140::1;-1:-1:-1::0;;;;;2966:23:140;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:140;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:140;;7133:2:504;2263:60:140;;;7115:21:504;7172:2;7152:18;;;7145:30;-1:-1:-1;;;7191:18:504;;;7184:51;7252:18;;2263:60:140;6931:345:504;2263:60:140;2378:16;2397:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2397:7:140;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:140;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:140;;;2605:32;;;-1:-1:-1;;;;;5474:15:504;;5456:34;;-1:-1:-1;5521:2:504;5506:18;;5499:43;2605:32:140;;5391:18:504;2605:32:140;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;5474:15:504;;;5456:34;;2681:12:140;;;5521:2:504;5506:18;;5499:43;2648:46:140;;5391:18:504;2648:46:140;5244:304:504;4246:524:267;4322:7;4373:18;4394:6;-1:-1:-1;;;;;4394:17:267;;:19;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4373:40;;4437:19;4459:18;4466:10;4459:6;:18::i;:::-;4437:40;;4515:26;4569:10;-1:-1:-1;;;;;4552:37:267;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;4544:48;;4515:77;;4633:2;4611:18;:24;;:154;;4740:23;4761:2;4740:18;:23;:::i;:::-;4735:29;;:2;:29;:::i;:::-;4711:54;;4719:11;4711:54;:::i;:::-;4611:154;;;4675:23;4680:18;4675:2;:23;:::i;:::-;4670:29;;:2;:29;:::i;:::-;4646:54;;4654:11;4646:54;:::i;:::-;4598:167;4246:524;-1:-1:-1;;;;;4246:524:267:o;1599:130:454:-;1513:6;;-1:-1:-1;;;;;1513:6:454;929:10:467;1662:23:454;1654:68;;;;-1:-1:-1;;;1654:68:454;;9916:2:504;1654:68:454;;;9898:21:504;;;9935:18;;;9928:30;9994:34;9974:18;;;9967:62;10046:18;;1654:68:454;9714:356:504;1654:68:454;1599:130::o;2655:1103:267:-;-1:-1:-1;;;;;2786:24:267;;2714:7;2786:24;;;:12;:24;;;;;;2824:10;2816:82;;;;-1:-1:-1;;;2816:82:267;;10277:2:504;2816:82:267;;;10259:21:504;10316:2;10296:18;;;10289:30;10355:34;10335:18;;;10328:62;10426:29;10406:18;;;10399:57;10473:19;;2816:82:267;10075:423:504;2816:82:267;2909:21;;2905:849;;3052:9;;3018:44;;-1:-1:-1;;;3018:44:267;;-1:-1:-1;;;;;3052:9:267;;;3018:44;;;3233:51:504;2988:27:267;;3034:10;;3018:33;;3206:18:504;;3018:44:267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2988:74;-1:-1:-1;3070:27:267;3100:26;2988:74;3100:4;:26;:::i;:::-;3211:4;;:25;;-1:-1:-1;;;3211:25:267;;;;;3035::504;;;3070:56:267;;-1:-1:-1;3170:38:267;;-1:-1:-1;;;;;3211:4:267;;;;:19;;3008:18:504;;3211:25:267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;3170:66;;3319:1;3296:13;:19;;;:24;;;;:107;;3402:1;3296:107;;;3339:19;;3379;;3324:43;;:36;;3363:4;3324:43;:::i;:::-;3323:76;;;;:::i;:::-;3281:122;2655:1103;-1:-1:-1;;;;;;2655:1103:267:o;2905:849::-;3469:4;;3489:21;;3469:42;;-1:-1:-1;;;3469:42:267;;;;;3035:25:504;;;;3424:27:267;;-1:-1:-1;;;;;3469:4:267;;:19;;3008:18:504;;3469:42:267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:48;3454:65;;;-1:-1:-1;3531:24:267;3527:38;;-1:-1:-1;3564:1:267;;2655:1103;-1:-1:-1;;;2655:1103:267:o;3527:38::-;3612:4;;:25;;-1:-1:-1;;;3612:25:267;;;;;3035::504;;;3573:21:267;;-1:-1:-1;;;;;3612:4:267;;:19;;3008:18:504;;3612:25:267;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:31;3597:48;;;-1:-1:-1;3715:28:267;;;3682:29;3597:48;3707:4;3682:29;:::i;:::-;3681:62;;;;:::i;562:129:140:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;638:16:140::1;:14;:16::i;:::-;660:26;679:6;660:18;:26::i;:::-;562:129:::0;:::o;2673:187:454:-;2765:6;;;-1:-1:-1;;;;;2781:17:454;;;-1:-1:-1;;;;;;2781:17:454;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1003:95::-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1065:26:454::1;5363:13:457::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1176:32:454::1;929:10:467::0;1176:18:454::1;:32::i;14:127:504:-:0;75:10;70:3;66:20;63:1;56:31;106:4;103:1;96:15;130:4;127:1;120:15;146:275;217:2;211:9;282:2;263:13;;-1:-1:-1;;259:27:504;247:40;;317:18;302:34;;338:22;;;299:62;296:88;;;364:18;;:::i;:::-;400:2;393:22;146:275;;-1:-1:-1;146:275:504:o;426:183::-;486:4;519:18;511:6;508:30;505:56;;;541:18;;:::i;:::-;-1:-1:-1;586:1:504;582:14;598:4;578:25;;426:183::o;614:131::-;-1:-1:-1;;;;;689:31:504;;679:42;;669:70;;735:1;732;725:12;750:662;804:5;857:3;850:4;842:6;838:17;834:27;824:55;;875:1;872;865:12;824:55;911:6;898:20;937:4;961:60;977:43;1017:2;977:43;:::i;:::-;961:60;:::i;:::-;1055:15;;;1141:1;1137:10;;;;1125:23;;1121:32;;;1086:12;;;;1165:15;;;1162:35;;;1193:1;1190;1183:12;1162:35;1229:2;1221:6;1217:15;1241:142;1257:6;1252:3;1249:15;1241:142;;;1323:17;;1311:30;;1361:12;;;;1274;;1241:142;;;-1:-1:-1;1401:5:504;750:662;-1:-1:-1;;;;;;750:662:504:o;1417:1215::-;1535:6;1543;1596:2;1584:9;1575:7;1571:23;1567:32;1564:52;;;1612:1;1609;1602:12;1564:52;1652:9;1639:23;1681:18;1722:2;1714:6;1711:14;1708:34;;;1738:1;1735;1728:12;1708:34;1776:6;1765:9;1761:22;1751:32;;1821:7;1814:4;1810:2;1806:13;1802:27;1792:55;;1843:1;1840;1833:12;1792:55;1879:2;1866:16;1901:4;1925:60;1941:43;1981:2;1941:43;:::i;1925:60::-;2019:15;;;2101:1;2097:10;;;;2089:19;;2085:28;;;2050:12;;;;2125:19;;;2122:39;;;2157:1;2154;2147:12;2122:39;2181:11;;;;2201:217;2217:6;2212:3;2209:15;2201:217;;;2297:3;2284:17;2314:31;2339:5;2314:31;:::i;:::-;2358:18;;2234:12;;;;2396;;;;2201:217;;;2437:5;-1:-1:-1;;2480:18:504;;2467:32;;-1:-1:-1;;2511:16:504;;;2508:36;;;2540:1;2537;2530:12;2508:36;;2563:63;2618:7;2607:8;2596:9;2592:24;2563:63;:::i;:::-;2553:73;;;1417:1215;;;;;:::o;2637:247::-;2696:6;2749:2;2737:9;2728:7;2724:23;2720:32;2717:52;;;2765:1;2762;2755:12;2717:52;2804:9;2791:23;2823:31;2848:5;2823:31;:::i;:::-;2873:5;2637:247;-1:-1:-1;;;2637:247:504:o;3685:456::-;3762:6;3770;3778;3831:2;3819:9;3810:7;3806:23;3802:32;3799:52;;;3847:1;3844;3837:12;3799:52;3886:9;3873:23;3905:31;3930:5;3905:31;:::i;:::-;3955:5;-1:-1:-1;4007:2:504;3992:18;;3979:32;;-1:-1:-1;4063:2:504;4048:18;;4035:32;4076:33;4035:32;4076:33;:::i;:::-;4128:7;4118:17;;;3685:456;;;;;:::o;4840:127::-;4901:10;4896:3;4892:20;4889:1;4882:31;4932:4;4929:1;4922:15;4956:4;4953:1;4946:15;4972:127;5033:10;5028:3;5024:20;5021:1;5014:31;5064:4;5061:1;5054:15;5088:4;5085:1;5078:15;5104:135;5143:3;-1:-1:-1;;5164:17:504;;5161:43;;;5184:18;;:::i;:::-;-1:-1:-1;5231:1:504;5220:13;;5104:135::o;7281:251::-;7351:6;7404:2;7392:9;7383:7;7379:23;7375:32;7372:52;;;7420:1;7417;7410:12;7372:52;7452:9;7446:16;7471:31;7496:5;7471:31;:::i;7537:273::-;7605:6;7658:2;7646:9;7637:7;7633:23;7629:32;7626:52;;;7674:1;7671;7664:12;7626:52;7706:9;7700:16;7756:4;7749:5;7745:16;7738:5;7735:27;7725:55;;7776:1;7773;7766:12;7815:125;7855:4;7883:1;7880;7877:8;7874:34;;;7888:18;;:::i;:::-;-1:-1:-1;7925:9:504;;7815:125::o;7945:422::-;8034:1;8077:5;8034:1;8091:270;8112:7;8102:8;8099:21;8091:270;;;8171:4;8167:1;8163:6;8159:17;8153:4;8150:27;8147:53;;;8180:18;;:::i;:::-;8230:7;8220:8;8216:22;8213:55;;;8250:16;;;;8213:55;8329:22;;;;8289:15;;;;8091:270;;;8095:3;7945:422;;;;;:::o;8372:806::-;8421:5;8451:8;8441:80;;-1:-1:-1;8492:1:504;8506:5;;8441:80;8540:4;8530:76;;-1:-1:-1;8577:1:504;8591:5;;8530:76;8622:4;8640:1;8635:59;;;;8708:1;8703:130;;;;8615:218;;8635:59;8665:1;8656:10;;8679:5;;;8703:130;8740:3;8730:8;8727:17;8724:43;;;8747:18;;:::i;:::-;-1:-1:-1;;8803:1:504;8789:16;;8818:5;;8615:218;;8917:2;8907:8;8904:16;8898:3;8892:4;8889:13;8885:36;8879:2;8869:8;8866:16;8861:2;8855:4;8852:12;8848:35;8845:77;8842:159;;;-1:-1:-1;8954:19:504;;;8986:5;;8842:159;9033:34;9058:8;9052:4;9033:34;:::i;:::-;9103:6;9099:1;9095:6;9091:19;9082:7;9079:32;9076:58;;;9114:18;;:::i;:::-;9152:20;;8372:806;-1:-1:-1;;;8372:806:504:o;9183:131::-;9243:5;9272:36;9299:8;9293:4;9272:36;:::i;9319:217::-;9359:1;9385;9375:132;;9429:10;9424:3;9420:20;9417:1;9410:31;9464:4;9461:1;9454:15;9492:4;9489:1;9482:15;9375:132;-1:-1:-1;9521:9:504;;9319:217::o;9541:168::-;9581:7;9647:1;9643;9639:6;9635:14;9632:1;9629:21;9624:1;9617:9;9610:17;9606:45;9603:71;;;9654:18;;:::i;:::-;-1:-1:-1;9694:9:504;;9541:168::o;10503:184::-;10573:6;10626:2;10614:9;10605:7;10601:23;10597:32;10594:52;;;10642:1;10639;10632:12;10594:52;-1:-1:-1;10665:16:504;;10503:184;-1:-1:-1;10503:184:504:o;10692:937::-;10787:6;10840:3;10828:9;10819:7;10815:23;10811:33;10808:53;;;10857:1;10854;10847:12;10808:53;10890:2;10884:9;10932:3;10924:6;10920:16;10955:18;11023:6;11011:10;11008:22;11003:2;10991:10;10988:18;10985:46;10982:72;;;11034:18;;:::i;:::-;11074:10;11070:2;11063:22;11113:9;11107:16;11094:29;;11166:5;11163:1;11152:20;11145:5;11142:31;11132:59;;11187:1;11184;11177:12;11132:59;11200:21;;;11266:2;11251:18;;11245:25;;11301:16;;;11289:29;;11279:57;;11332:1;11329;11322:12;11279:57;-1:-1:-1;11364:2:504;11352:15;;11345:32;11422:2;11407:18;;11401:25;11468:1;11457:22;;;11445:35;;11435:63;;11494:1;11491;11484:12;11435:63;11526:2;11514:15;;11507:32;11593:2;11578:18;;;11572:25;11555:15;;;11548:50;;;;-1:-1:-1;11518:6:504;10692:937;-1:-1:-1;10692:937:504:o;11634:407::-;11836:2;11818:21;;;11875:2;11855:18;;;11848:30;11914:34;11909:2;11894:18;;11887:62;-1:-1:-1;;;11980:2:504;11965:18;;11958:41;12031:3;12016:19;;11634:407::o", + "linkReferences": {} + }, + "methodIdentifiers": { + "NATIVE_TOKEN_USD_FEED()": "80f96bd1", + "PYTH()": "67e406d5", + "USD_TOKEN()": "9d23c812", + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "getUnderlyingPrice(address)": "fc57d4df", + "initialize(address,bytes32,address)": "d26b3e6e", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "price(address)": "aea91078", + "priceFeedIds(address)": "336eb6ae", + "reinitialize(address,bytes32,address)": "ca4737ca", + "renounceOwnership()": "715018a6", + "setPriceFeeds(address[],bytes32[])": "01e169e4", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/PythPriceOracle_Proxy.json b/packages/sdk/deployments/bob/PythPriceOracle_Proxy.json new file mode 100644 index 000000000..5bd4cbc39 --- /dev/null +++ b/packages/sdk/deployments/bob/PythPriceOracle_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "transactionIndex": 1, + "gasUsed": "840424", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000002000001000000000000000000000000000000004000020200000000000000000800000000800000000000000000000000400000000000000000000000000200000002000000000080000000000000c00000000000000000000000000000000400000000000000000000000000000000000080000020000000000000000000040000000000000400000000000000000020000000000000000000000000000000000000000000000000000000040000000000", + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8", + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x0000000000000000000000008d5b096c99b26d07c7f8d8a8f25be97427687f73" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + }, + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + }, + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + }, + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + }, + { + "transactionIndex": 1, + "blockNumber": 3777921, + "transactionHash": "0xf445d0802e0ef8c1faf86a9c3b0103ac672616295874499a84f55a33fb4f2dd0", + "address": "0xb0033576a9E444Dd801d5B69e1b63DBC459A6115", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0xe2d9ad78df8e8cec13650a9963ee841ce5f23ef4d6afaa63fd0f3cdae64ffad8" + } + ], + "blockNumber": 3777921, + "cumulativeGasUsed": "884263", + "status": 1, + "byzantium": true + }, + "args": [ + "0x8D5B096c99B26d07c7F8D8a8f25BE97427687F73", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0xd26b3e6e000000000000000000000000ff1a0f4744e8582df1ae09d5611b887b6a12925cff61491a931112ddf1bd8147cd1b641375f79f5825126d665480874634fd0ace000000000000000000000000e75d0fb2c24a55ca1e3f96781a2bcc7bdba058f0" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/SimplePriceOracle.json b/packages/sdk/deployments/bob/SimplePriceOracle.json new file mode 100644 index 000000000..d8439fc54 --- /dev/null +++ b/packages/sdk/deployments/bob/SimplePriceOracle.json @@ -0,0 +1,547 @@ +{ + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "abi": [ + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + }, + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "assetPrices", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setDirectPrice", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "_price", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "underlyingPriceMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PricePosted", + "inputs": [ + { + "name": "asset", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "previousPriceMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "requestedPriceMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newPriceMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + } + ], + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "transactionIndex": 1, + "gasUsed": "772074", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000020000000000000000000000000000000000100000000000000000000000800000000000000000000000000002000001000000000004000010000000000000000000020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000000040000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab", + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000239c8e4792f4d5a9bdd7769ba84a0e8db1756c9b" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + }, + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + }, + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + }, + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + }, + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + } + ], + "blockNumber": 3777869, + "cumulativeGasUsed": "815913", + "status": 1, + "byzantium": true + }, + "args": [ + "0x239C8E4792F4D5A9bDD7769bA84A0E8dB1756c9b", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0x8129fc1c" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "execute": { + "methodName": "initialize", + "args": [] + }, + "implementation": "0x239C8E4792F4D5A9bDD7769bA84A0E8dB1756c9b", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/SimplePriceOracle_Implementation.json b/packages/sdk/deployments/bob/SimplePriceOracle_Implementation.json new file mode 100644 index 000000000..97cee5986 --- /dev/null +++ b/packages/sdk/deployments/bob/SimplePriceOracle_Implementation.json @@ -0,0 +1,903 @@ +{ + "address": "0x239C8E4792F4D5A9bDD7769bA84A0E8dB1756c9b", + "abi": [ + { + "type": "function", + "name": "_acceptOwner", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "_setPendingOwner", + "inputs": [ + { + "name": "newPendingOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "assetPrices", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "getUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "initialize", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "owner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "pendingOwner", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "address", + "internalType": "address" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "price", + "inputs": [ + { + "name": "underlying", + "type": "address", + "internalType": "address" + } + ], + "outputs": [ + { + "name": "", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "renounceOwnership", + "inputs": [], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setDirectPrice", + "inputs": [ + { + "name": "asset", + "type": "address", + "internalType": "address" + }, + { + "name": "_price", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "setUnderlyingPrice", + "inputs": [ + { + "name": "cToken", + "type": "address", + "internalType": "contract ICErc20" + }, + { + "name": "underlyingPriceMantissa", + "type": "uint256", + "internalType": "uint256" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "transferOwnership", + "inputs": [ + { + "name": "newOwner", + "type": "address", + "internalType": "address" + } + ], + "outputs": [], + "stateMutability": "nonpayable" + }, + { + "type": "event", + "name": "Initialized", + "inputs": [ + { + "name": "version", + "type": "uint8", + "indexed": false, + "internalType": "uint8" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewOwner", + "inputs": [ + { + "name": "oldOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "NewPendingOwner", + "inputs": [ + { + "name": "oldPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "newPendingOwner", + "type": "address", + "indexed": false, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "OwnershipTransferred", + "inputs": [ + { + "name": "previousOwner", + "type": "address", + "indexed": true, + "internalType": "address" + }, + { + "name": "newOwner", + "type": "address", + "indexed": true, + "internalType": "address" + } + ], + "anonymous": false + }, + { + "type": "event", + "name": "PricePosted", + "inputs": [ + { + "name": "asset", + "type": "address", + "indexed": false, + "internalType": "address" + }, + { + "name": "previousPriceMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "requestedPriceMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + }, + { + "name": "newPriceMantissa", + "type": "uint256", + "indexed": false, + "internalType": "uint256" + } + ], + "anonymous": false + } + ], + "transactionHash": "0x0aba5c1ec7b365438569773597e34a04dddbd7908f1ed2a3957a7eec969835cf", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x239C8E4792F4D5A9bDD7769bA84A0E8dB1756c9b", + "transactionIndex": 1, + "gasUsed": "784322", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xba2899cd379caf650dc7388b57706b7bb5a50405b43e17cf533506148fb6035d", + "transactionHash": "0x0aba5c1ec7b365438569773597e34a04dddbd7908f1ed2a3957a7eec969835cf", + "logs": [], + "blockNumber": 3777865, + "cumulativeGasUsed": "836549", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "uint8", + "name": "version", + "type": "uint8", + "indexed": false + } + ], + "type": "event", + "name": "Initialized", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "oldPendingOwner", + "type": "address", + "indexed": false + }, + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address", + "indexed": false + } + ], + "type": "event", + "name": "NewPendingOwner", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "previousOwner", + "type": "address", + "indexed": true + }, + { + "internalType": "address", + "name": "newOwner", + "type": "address", + "indexed": true + } + ], + "type": "event", + "name": "OwnershipTransferred", + "anonymous": false + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address", + "indexed": false + }, + { + "internalType": "uint256", + "name": "previousPriceMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "requestedPriceMantissa", + "type": "uint256", + "indexed": false + }, + { + "internalType": "uint256", + "name": "newPriceMantissa", + "type": "uint256", + "indexed": false + } + ], + "type": "event", + "name": "PricePosted", + "anonymous": false + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "_acceptOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newPendingOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "_setPendingOwner" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "assetPrices", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "getUnderlyingPrice", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "initialize" + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [], + "stateMutability": "view", + "type": "function", + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ] + }, + { + "inputs": [ + { + "internalType": "address", + "name": "underlying", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function", + "name": "price", + "outputs": [ + { + "internalType": "uint256", + "name": "", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "function", + "name": "renounceOwnership" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "asset", + "type": "address" + }, + { + "internalType": "uint256", + "name": "_price", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setDirectPrice" + }, + { + "inputs": [ + { + "internalType": "contract ICErc20", + "name": "cToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "underlyingPriceMantissa", + "type": "uint256" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "setUnderlyingPrice" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "transferOwnership" + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "_acceptOwner()": { + "details": "Owner function for pending owner to accept role and update owner" + }, + "_setPendingOwner(address)": { + "details": "Owner function to begin change of owner. The newPendingOwner must call `_acceptOwner` to finalize the transfer.", + "params": { + "newPendingOwner": "New pending owner." + } + }, + "getUnderlyingPrice(address)": { + "params": { + "cToken": "The cToken to get the underlying price of" + }, + "returns": { + "_0": "The underlying asset price mantissa (scaled by 1e18). Zero means the price is unavailable." + } + }, + "owner()": { + "details": "Returns the address of the current owner." + }, + "price(address)": { + "params": { + "underlying": "The underlying asset to get the price of." + }, + "returns": { + "_0": "The underlying asset price in ETH as a mantissa (scaled by 1e18). Zero means the price is unavailable." + } + }, + "renounceOwnership()": { + "details": "Leaves the contract without owner. It will not be possible to call `onlyOwner` functions anymore. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby removing any functionality that is only available to the owner." + }, + "transferOwnership(address)": { + "details": "Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "_acceptOwner()": { + "notice": "Accepts transfer of owner rights. msg.sender must be pendingOwner" + }, + "_setPendingOwner(address)": { + "notice": "Begins transfer of owner rights. The newPendingOwner must call `_acceptOwner` to finalize the transfer." + }, + "getUnderlyingPrice(address)": { + "notice": "Get the underlying price of a cToken asset" + }, + "pendingOwner()": { + "notice": "Pending owner of this contract" + }, + "price(address)": { + "notice": "Get the price of an underlying asset." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/oracles/default/SimplePriceOracle.sol": "SimplePriceOracle" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/compound/CTokenInterfaces.sol": { + "keccak256": "0xd571dcebff05b5e67695f9c53621a3077f1473ea05156a7bce69aae4c0b1abc1", + "urls": [ + "bzz-raw://23b0d5f249b693b0dbdc824ae00353722f35cefdd0ec27a96a2579146d241bf3", + "dweb:/ipfs/QmeZcXCRtgjLV8bX7DodKFFe9FS1FzuoTSnZ3h3Gfqnum7" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerInterface.sol": { + "keccak256": "0xb36be0e9dd4c38c2d733e2b12290caf857be82eeff045957d65e916041ef725d", + "urls": [ + "bzz-raw://40c0d8a3d37ddc47a64838d8c4e7ae5b2e4e6a8cc45febd10d9e2a1abd89a2d9", + "dweb:/ipfs/QmXus2NbvkKWqiovmQimvYvbnJiyCGRktPh23BuW54MMQ6" + ], + "license": "UNLICENSED" + }, + "contracts/compound/ComptrollerStorage.sol": { + "keccak256": "0x57a3395bfc4159595f279878fa5cde37272e937634e6dfcee9958ec384552e32", + "urls": [ + "bzz-raw://d39368b0a9113ff87eca7cc802f39787e7783da33f4963aefaf0d3e279e0c90c", + "dweb:/ipfs/QmZ9E2LMT6dSP4SoKMWFpiZuULURtu8etyvV5mcbuTxnxw" + ], + "license": "UNLICENSED" + }, + "contracts/compound/IFeeDistributor.sol": { + "keccak256": "0xa822e2942e6a88851968d5f3bda48709713c84d556031a1dd3db5dfd06121d3e", + "urls": [ + "bzz-raw://7441bc263a37d23d3d91404f3134dcfd00eadb6387bd8d30dd68586134db6f50", + "dweb:/ipfs/QmS1nD4sdTbjTYA9PqrtxHXnDqrRjhnfSn5SREKTn2Q5Vn" + ], + "license": "UNLICENSED" + }, + "contracts/compound/InterestRateModel.sol": { + "keccak256": "0x587a54b49d48df2cd91583eac93ddde4e2849f79d0441f179bf835e9dffe24e9", + "urls": [ + "bzz-raw://b202a68cbe90a5ecaa547808852641d7bfe93f9b8e3f3f3f6010423c182781d2", + "dweb:/ipfs/QmYEzQQHVXNCMmhhFrv4hak2WDfs21SXs6DSh5q5wJ25AB" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/AuthoritiesRegistry.sol": { + "keccak256": "0x98fc1f8a735b5759fc7524e3065ae322703d2771e7ec429e1cc9b60a4b1028dd", + "urls": [ + "bzz-raw://bdc1fc5e7982c62e7b355f3e19aa5bdedf8e42ef0110729c42b49186a678d893", + "dweb:/ipfs/QmTGAYoLXNrxXMke1VMFyPy2MECe3VBGYYhu7zo7vZ64FU" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/PoolRolesAuthority.sol": { + "keccak256": "0x1ec824166a7b4b1e67384a25d231d3acab89ef90ff43ff380cbf1715410d9851", + "urls": [ + "bzz-raw://8781d209eb76f3471627dd2e4a09d7fb8f143ba78679aff557277bdefef11c96", + "dweb:/ipfs/QmcAZ6dAnsvv8BRRiiB4C81a8NNDxPwPQRBL9Znih5Bjqn" + ], + "license": "UNLICENSED" + }, + "contracts/ionic/SafeOwnableUpgradeable.sol": { + "keccak256": "0x73f50a022ee86874b63ebd7e418b5948ef2913e32cb80024fe3cd4f17be7f2a5", + "urls": [ + "bzz-raw://e42280c355155c2cf136d93a05cb4dd20b0d7f7977da5bcd2042d6ca588ff080", + "dweb:/ipfs/QmaBDYMAsenHXgFzYQQWFEyB1UXbappq2JFe3vZVQ8BK5U" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/BasePriceOracle.sol": { + "keccak256": "0xed2a27a8dc71a4280c0ef19d3165ff237d8066ae782e750b071bb39d12e73404", + "urls": [ + "bzz-raw://8e5daa9bb9ddc85f0294c25b173cb33ca9001f4146ddd9b642fa87b74f17ef02", + "dweb:/ipfs/QmX7Jcs7toepthqTQipP7FNXRDhi7nC9D7DpJ8cZfTvTmK" + ], + "license": "UNLICENSED" + }, + "contracts/oracles/default/SimplePriceOracle.sol": { + "keccak256": "0xdbcea6c06314c3deffcf383629f85507d16bd7995798787ffe220fe215ca8c41", + "urls": [ + "bzz-raw://382a82bd1d66c4ffb6c3325410133a3a62198b4ac6be302861eb525ad1faf554", + "dweb:/ipfs/QmSNRPAp2PZCYcGYqcMgfuXBHB9rzmpzcw2xZiseGjN8ps" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/access/OwnableUpgradeable.sol": { + "keccak256": "0x247c62047745915c0af6b955470a72d1696ebad4352d7d3011aef1a2463cd888", + "urls": [ + "bzz-raw://d7fc8396619de513c96b6e00301b88dd790e83542aab918425633a5f7297a15a", + "dweb:/ipfs/QmXbP4kiZyp7guuS7xe8KaybnwkRPGrBc2Kbi3vhcTfpxb" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/proxy/utils/Initializable.sol": { + "keccak256": "0x6c2b54ec184943843041ab77f61988b5060f6f03acbfe92cdc125f95f00891da", + "urls": [ + "bzz-raw://efc212a7612f6ea70f7aa1f68b9c26e7ceaa412333e23dcf66740f9d51fa689b", + "dweb:/ipfs/QmTkcTYoF14eN12FxyX2GQRc9KwdhYfjoJ3XJt1yvJWcaB" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/ERC20Upgradeable.sol": { + "keccak256": "0x17aff86be546601617585e91fd98aad74cf39f1be65d8eb6f93b7f3c30181275", + "urls": [ + "bzz-raw://e75109e30d04e3fe6e31e0294ca357a695911b3599582be39e89b1207273773a", + "dweb:/ipfs/QmRRgRNTjXRjn7aqyaSfm8rDiCEDyoVhHnENXj6TZbrnGR" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/IERC20MetadataUpgradeable.sol": { + "keccak256": "0x605434219ebbe4653f703640f06969faa5a1d78f0bfef878e5ddbb1ca369ceeb", + "urls": [ + "bzz-raw://4c9c634f99dd02d73ce7498b03a6305e251c05eeebb71457306561c1fab0fa7d", + "dweb:/ipfs/QmbYRBbZHy8YoaQKXdPryiL3CSS7uUaRfRYi1TUj9cTqJQ" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/ContextUpgradeable.sol": { + "keccak256": "0x963ea7f0b48b032eef72fe3a7582edf78408d6f834115b9feadd673a4d5bd149", + "urls": [ + "bzz-raw://d6520943ea55fdf5f0bafb39ed909f64de17051bc954ff3e88c9e5621412c79c", + "dweb:/ipfs/QmWZ4rAKTQbNG2HxGs46AcTXShsVytKeLs7CUCdCSv5N7a" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/interfaces/draft-IERC1822.sol": { + "keccak256": "0x1d4afe6cb24200cc4545eed814ecf5847277dfe5d613a1707aad5fceecebcfff", + "urls": [ + "bzz-raw://383fb7b8181016ac5ccf07bc9cdb7c1b5045ea36e2cc4df52bcbf20396fc7688", + "dweb:/ipfs/QmYJ7Cg4WmE3rR8KGQxjUCXFfTH6TcwZ2Z1f6tPrq7jHFr" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Proxy.sol": { + "keccak256": "0xa2b22da3032e50b55f95ec1d13336102d675f341167aa76db571ef7f8bb7975d", + "urls": [ + "bzz-raw://96b6d77a20bebd4eb06b801d3d020c7e82be13bd535cb0d0a6b7181c51dab5d5", + "dweb:/ipfs/QmPUR9Cv9jNFdQX6PtBfaBW1ZCnKwiu65R2VD5kbdanDyn" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/ERC1967/ERC1967Upgrade.sol": { + "keccak256": "0xabf3f59bc0e5423eae45e459dbe92e7052c6983628d39008590edc852a62f94a", + "urls": [ + "bzz-raw://89c2a0f70157c13845be5cb49b078a6374fee3a78fa950052a3af26190255da8", + "dweb:/ipfs/QmUcvMEQH1oMM2pUyMuDiBUKdvvnTz1NRB8bmPHrVq8725" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/Proxy.sol": { + "keccak256": "0xc130fe33f1b2132158531a87734153293f6d07bc263ff4ac90e85da9c82c0e27", + "urls": [ + "bzz-raw://8831721b6f4cc26534d190f9f1631c3f59c9ff38efdd911f85e0882b8e360472", + "dweb:/ipfs/QmQZnLErZNStirSQ13ZNWQgvEYUtGE5tXYwn4QUPaVUfPN" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/beacon/IBeacon.sol": { + "keccak256": "0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61", + "urls": [ + "bzz-raw://ada1e030c0231db8d143b44ce92b4d1158eedb087880cad6d8cc7bd7ebe7b354", + "dweb:/ipfs/QmWZ2NHZweRpz1U9GF6R1h65ri76dnX7fNxLBeM2t5N5Ce" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/proxy/transparent/TransparentUpgradeableProxy.sol": { + "keccak256": "0xa6a787e7a901af6511e19aa53e1a00352db215a011d2c7a438d0582dd5da76f9", + "urls": [ + "bzz-raw://a6c4477d480bac20d681ade0e712b77ad828acf530a1d5c0abc5fb78068a05a1", + "dweb:/ipfs/QmdBqsK8CcUceTeWzhHwFDEvKMoHimwtV96Lbim7ZBtCb8" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/Address.sol": { + "keccak256": "0xb94eac067c85cd79a4195c0a1f4a878e9827329045c12475a0199f1ae17b9700", + "urls": [ + "bzz-raw://2ad84b5dbf40ba9e944cc25bd0a98c51bafd49cff30efe5ef5aef921a70081de", + "dweb:/ipfs/Qme8iCeqe9VdNgWktTTsSxUfHcJEXuvPaJpshWDzoWj56V" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/StorageSlot.sol": { + "keccak256": "0xd5c50c54bf02740ebd122ff06832546cb5fa84486d52695a9ccfd11666e0c81d", + "urls": [ + "bzz-raw://39e096c60a6eb1c6a257122d515496bd92d0c6a693a8f07acb6aa4b1263e95d4", + "dweb:/ipfs/QmPs5trJBacCiSkezP6tpevapuRYWNY6mqSFzsMCJj7e6B" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts/contracts/utils/structs/EnumerableSet.sol": { + "keccak256": "0x636eab608b4563c01e88042aba9330e6fe69af2c567fe1adf4d85731974ac81d", + "urls": [ + "bzz-raw://e35967fa779d58a99de2f6d7ac23ef489d09bc18a5668fd231753905e0a9f633", + "dweb:/ipfs/QmWUSbnhG7z4fDUYMbCuyJ4nyhqKwzL2jbeFEnVLDxo6R6" + ], + "license": "MIT" + }, + "lib/solmate/src/auth/Auth.sol": { + "keccak256": "0xd5cf8213a40d727af89c93dd359ad68984c123c1a1a93fc9ad7ba62b3436fb75", + "urls": [ + "bzz-raw://70e87bbc23f0b02fe804779714d65f559db59827d48e5243ee029eaf1c48289d", + "dweb:/ipfs/QmZtq71QoREyPjoPU3ozq9Fae62jP5kjrcgcEnh4ytFPhf" + ], + "license": "AGPL-3.0-only" + }, + "lib/solmate/src/auth/authorities/RolesAuthority.sol": { + "keccak256": "0x278247a2c5b0accb60af8d3749e34ab5d4436ee4f35a8fff301aaa25ab690762", + "urls": [ + "bzz-raw://d4623d497366937c5549b8842c75f9faee45db5fc5a40ca21353b058dc0f434b", + "dweb:/ipfs/QmQ2QGBAiwgzjQqUK12uTwM2ciYL35xiCWV57xntUa1RdR" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50610d39806100206000396000f3fe608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b14610140578063aea91078146100e1578063e30c397814610165578063f2fde38b14610178578063fc4d33f91461018b578063fc57d4df1461019357600080fd5b806309a8acb0146100b9578063127ffda0146100ce5780635e9a523c146100e15780636e96dfd71461011d578063715018a6146101305780638129fc1c14610138575b600080fd5b6100cc6100c73660046109e4565b6101a6565b005b6100cc6100dc3660046109e4565b610229565b61010a6100ef366004610a10565b6001600160a01b031660009081526066602052604090205490565b6040519081526020015b60405180910390f35b6100cc61012b366004610a10565b610312565b6100cc61037c565b6100cc6103c4565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610114565b60655461014d906001600160a01b031681565b6100cc610186366004610a10565b6104d6565b6100cc610547565b61010a6101a1366004610a10565b61065b565b6101ae610839565b6001600160a01b038216600081815260666020908152604091829020548251938452908301528101829052606081018290527fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79060800160405180910390a16001600160a01b03909116600090815260666020526040902055565b610231610839565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610a34565b6001600160a01b038116600081815260666020908152604091829020548251938452908301528101849052606081018490529091507fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79060800160405180910390a16001600160a01b031660009081526066602052604090205550565b61031a610839565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b610384610839565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b600054610100900460ff16158080156103e45750600054600160ff909116105b806103fe5750303b1580156103fe575060005460ff166001145b6104615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103bb565b6000805460ff191660011790558015610484576000805461ff0019166101001790555b61048d33610895565b80156104d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6104de610839565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146105995760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016103bb565b60006105ad6033546001600160a01b031690565b6065549091506001600160a01b03166105c5816108c9565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610370565b60006106e8826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c69190810190610a97565b604051806040016040528060048152602001630c68aa8960e31b81525061091b565b156106fc5750670de0b6b3a7640000919050565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610a34565b6001600160a01b038116600081815260666020908152604080832054815163313ce56760e01b815291519596509492939263313ce567926004808401939192918290030181865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd9190610b44565b60ff1690506012811115610810576107f6601282610b7d565b61080190600a610c78565b61080b9083610c84565b610830565b61081b816012610b7d565b61082690600a610c78565b6108309083610ca6565b95945050505050565b6033546001600160a01b031633146108935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bb565b565b600054610100900460ff166108bc5760405162461bcd60e51b81526004016103bb90610cc5565b6108c4610975565b6104d3815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160405160200161092e9190610d10565b60405160208183030381529060405280519060200120836040516020016109559190610d10565b604051602081830303815290604052805190602001201490505b92915050565b600054610100900460ff1661099c5760405162461bcd60e51b81526004016103bb90610cc5565b610893600054610100900460ff166109c65760405162461bcd60e51b81526004016103bb90610cc5565b610893336108c9565b6001600160a01b03811681146104d357600080fd5b600080604083850312156109f757600080fd5b8235610a02816109cf565b946020939093013593505050565b600060208284031215610a2257600080fd5b8135610a2d816109cf565b9392505050565b600060208284031215610a4657600080fd5b8151610a2d816109cf565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610a82578181015183820152602001610a6a565b83811115610a91576000848401525b50505050565b600060208284031215610aa957600080fd5b815167ffffffffffffffff80821115610ac157600080fd5b818401915084601f830112610ad557600080fd5b815181811115610ae757610ae7610a51565b604051601f8201601f19908116603f01168101908382118183101715610b0f57610b0f610a51565b81604052828152876020848701011115610b2857600080fd5b610b39836020830160208801610a67565b979650505050505050565b600060208284031215610b5657600080fd5b815160ff81168114610a2d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610b8f57610b8f610b67565b500390565b600181815b80851115610bcf578160001904821115610bb557610bb5610b67565b80851615610bc257918102915b93841c9390800290610b99565b509250929050565b600082610be65750600161096f565b81610bf35750600061096f565b8160018114610c095760028114610c1357610c2f565b600191505061096f565b60ff841115610c2457610c24610b67565b50506001821b61096f565b5060208310610133831016604e8410600b8410161715610c52575081810a61096f565b610c5c8383610b94565b8060001904821115610c7057610c70610b67565b029392505050565b6000610a2d8383610bd7565b600082610ca157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610cc057610cc0610b67565b500290565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251610d22818460208701610a67565b919091019291505056fea164736f6c634300080a000a", + "sourceMap": "262:1831:273:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100b45760003560e01c80638da5cb5b116100715780638da5cb5b14610140578063aea91078146100e1578063e30c397814610165578063f2fde38b14610178578063fc4d33f91461018b578063fc57d4df1461019357600080fd5b806309a8acb0146100b9578063127ffda0146100ce5780635e9a523c146100e15780636e96dfd71461011d578063715018a6146101305780638129fc1c14610138575b600080fd5b6100cc6100c73660046109e4565b6101a6565b005b6100cc6100dc3660046109e4565b610229565b61010a6100ef366004610a10565b6001600160a01b031660009081526066602052604090205490565b6040519081526020015b60405180910390f35b6100cc61012b366004610a10565b610312565b6100cc61037c565b6100cc6103c4565b6033546001600160a01b03165b6040516001600160a01b039091168152602001610114565b60655461014d906001600160a01b031681565b6100cc610186366004610a10565b6104d6565b6100cc610547565b61010a6101a1366004610a10565b61065b565b6101ae610839565b6001600160a01b038216600081815260666020908152604091829020548251938452908301528101829052606081018290527fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79060800160405180910390a16001600160a01b03909116600090815260666020526040902055565b610231610839565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa158015610271573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102959190610a34565b6001600160a01b038116600081815260666020908152604091829020548251938452908301528101849052606081018490529091507fdd71a1d19fcba687442a1d5c58578f1e409af71a79d10fd95a4d66efd8fa9ae79060800160405180910390a16001600160a01b031660009081526066602052604090205550565b61031a610839565b606580546001600160a01b038381166001600160a01b031983168117909355604080519190921680825260208201939093527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b91015b60405180910390a15050565b610384610839565b60405162461bcd60e51b815260206004820152601060248201526f6e6f74207573656420616e796d6f726560801b60448201526064015b60405180910390fd5b600054610100900460ff16158080156103e45750600054600160ff909116105b806103fe5750303b1580156103fe575060005460ff166001145b6104615760405162461bcd60e51b815260206004820152602e60248201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160448201526d191e481a5b9a5d1a585b1a5e995960921b60648201526084016103bb565b6000805460ff191660011790558015610484576000805461ff0019166101001790555b61048d33610895565b80156104d3576000805461ff0019169055604051600181527f7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb38474024989060200160405180910390a15b50565b6104de610839565b606554604080516001600160a01b03928316815291831660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b910160405180910390a1606580546001600160a01b0319166001600160a01b0392909216919091179055565b6065546001600160a01b031633146105995760405162461bcd60e51b81526020600482015260156024820152743737ba103a3432903832b73234b7339037bbb732b960591b60448201526064016103bb565b60006105ad6033546001600160a01b031690565b6065549091506001600160a01b03166105c5816108c9565b606580546001600160a01b0319169055604080516001600160a01b0384168152600060208201527f70aea8d848e8a90fb7661b227dc522eb6395c3dac71b63cb59edd5c9899b2364910160405180910390a1606554604080516001600160a01b03808516825290921660208301527fb3d55174552271a4f1aaf36b72f50381e892171636b3fb5447fe00e995e7a37b9101610370565b60006106e8826001600160a01b03166395d89b416040518163ffffffff1660e01b8152600401600060405180830381865afa15801561069e573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526106c69190810190610a97565b604051806040016040528060048152602001630c68aa8960e31b81525061091b565b156106fc5750670de0b6b3a7640000919050565b6000826001600160a01b0316636f307dc36040518163ffffffff1660e01b8152600401602060405180830381865afa15801561073c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107609190610a34565b6001600160a01b038116600081815260666020908152604080832054815163313ce56760e01b815291519596509492939263313ce567926004808401939192918290030181865afa1580156107b9573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906107dd9190610b44565b60ff1690506012811115610810576107f6601282610b7d565b61080190600a610c78565b61080b9083610c84565b610830565b61081b816012610b7d565b61082690600a610c78565b6108309083610ca6565b95945050505050565b6033546001600160a01b031633146108935760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657260448201526064016103bb565b565b600054610100900460ff166108bc5760405162461bcd60e51b81526004016103bb90610cc5565b6108c4610975565b6104d3815b603380546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b60008160405160200161092e9190610d10565b60405160208183030381529060405280519060200120836040516020016109559190610d10565b604051602081830303815290604052805190602001201490505b92915050565b600054610100900460ff1661099c5760405162461bcd60e51b81526004016103bb90610cc5565b610893600054610100900460ff166109c65760405162461bcd60e51b81526004016103bb90610cc5565b610893336108c9565b6001600160a01b03811681146104d357600080fd5b600080604083850312156109f757600080fd5b8235610a02816109cf565b946020939093013593505050565b600060208284031215610a2257600080fd5b8135610a2d816109cf565b9392505050565b600060208284031215610a4657600080fd5b8151610a2d816109cf565b634e487b7160e01b600052604160045260246000fd5b60005b83811015610a82578181015183820152602001610a6a565b83811115610a91576000848401525b50505050565b600060208284031215610aa957600080fd5b815167ffffffffffffffff80821115610ac157600080fd5b818401915084601f830112610ad557600080fd5b815181811115610ae757610ae7610a51565b604051601f8201601f19908116603f01168101908382118183101715610b0f57610b0f610a51565b81604052828152876020848701011115610b2857600080fd5b610b39836020830160208801610a67565b979650505050505050565b600060208284031215610b5657600080fd5b815160ff81168114610a2d57600080fd5b634e487b7160e01b600052601160045260246000fd5b600082821015610b8f57610b8f610b67565b500390565b600181815b80851115610bcf578160001904821115610bb557610bb5610b67565b80851615610bc257918102915b93841c9390800290610b99565b509250929050565b600082610be65750600161096f565b81610bf35750600061096f565b8160018114610c095760028114610c1357610c2f565b600191505061096f565b60ff841115610c2457610c24610b67565b50506001821b61096f565b5060208310610133831016604e8410600b8410161715610c52575081810a61096f565b610c5c8383610b94565b8060001904821115610c7057610c70610b67565b029392505050565b6000610a2d8383610bd7565b600082610ca157634e487b7160e01b600052601260045260246000fd5b500490565b6000816000190483118215151615610cc057610cc0610b67565b500290565b6020808252602b908201527f496e697469616c697a61626c653a20636f6e7472616374206973206e6f74206960408201526a6e697469616c697a696e6760a81b606082015260800190565b60008251610d22818460208701610a67565b919091019291505056fea164736f6c634300080a000a", + "sourceMap": "262:1831:273:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1469:165;;;;;;:::i;:::-;;:::i;:::-;;1168:297;;;;;;:::i;:::-;;:::i;1813:99::-;;;;;;:::i;:::-;-1:-1:-1;;;;;1894:13:273;1872:7;1894:13;;;:6;:13;;;;;;;1813:99;;;;1205:25:504;;;1193:2;1178:18;1813:99:273;;;;;;;;1602:386:140;;;;;;:::i;:::-;;:::i;2703:132::-;;;:::i;520:82:273:-;;;:::i;1441:85:454:-;1513:6;;-1:-1:-1;;;;;1513:6:454;1441:85;;;-1:-1:-1;;;;;1405:32:504;;;1387:51;;1375:2;1360:18;1441:85:454;1241:203:504;530:27:140;;;;;-1:-1:-1;;;;;530:27:140;;;2839:155;;;;;;:::i;:::-;;:::i;2158:541::-;;;:::i;606:558:273:-;;;;;;:::i;:::-;;:::i;1469:165::-;1334:13:454;:11;:13::i;:::-;-1:-1:-1;;;;;1571:13:273;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;;;1552:49;;1949:51:504;;;2016:18;;;2009:34;2059:18;;2052:34;;;2117:2;2102:18;;2095:34;;;1552:49:273::1;::::0;1936:3:504;1921:19;1552:49:273::1;;;;;;;-1:-1:-1::0;;;;;1607:13:273;;::::1;;::::0;;;:6:::1;:13;::::0;;;;:22;1469:165::o;1168:297::-;1334:13:454;:11;:13::i;:::-;1268::273::1;1300:6;-1:-1:-1::0;;;;;1284:35:273::1;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;1351:13:273;::::1;;::::0;;;:6:::1;:13;::::0;;;;;;;;;1332:83;;1949:51:504;;;2016:18;;;2009:34;2059:18;;2052:34;;;2117:2;2102:18;;2095:34;;;1351:13:273;;-1:-1:-1;1332:83:273::1;::::0;1936:3:504;1921:19;1332:83:273::1;;;;;;;-1:-1:-1::0;;;;;1421:13:273::1;;::::0;;;:6:::1;:13;::::0;;;;:39;-1:-1:-1;1168:297:273:o;1602:386:140:-;1334:13:454;:11;:13::i;:::-;1758:12:140::1;::::0;;-1:-1:-1;;;;;1830:30:140;;::::1;-1:-1:-1::0;;;;;;1830:30:140;::::1;::::0;::::1;::::0;;;1934:49:::1;::::0;;1758:12;;;::::1;2608:34:504::0;;;2673:2;2658:18;;2651:43;;;;1934:49:140::1;::::0;2543:18:504;1934:49:140::1;;;;;;;;1670:318;1602:386:::0;:::o;2703:132::-;1334:13:454;:11;:13::i;:::-;2804:26:140::1;::::0;-1:-1:-1;;;2804:26:140;;2907:2:504;2804:26:140::1;::::0;::::1;2889:21:504::0;2946:2;2926:18;;;2919:30;-1:-1:-1;;;2965:18:504;;;2958:46;3021:18;;2804:26:140::1;;;;;;;;520:82:273::0;3268:19:457;3291:13;;;;;;3290:14;;3336:34;;;;-1:-1:-1;3354:12:457;;3369:1;3354:12;;;;:16;3336:34;3335:108;;;-1:-1:-1;3415:4:457;1476:19:466;:23;;;3376:66:457;;-1:-1:-1;3425:12:457;;;;;:17;3376:66;3314:201;;;;-1:-1:-1;;;3314:201:457;;3252:2:504;3314:201:457;;;3234:21:504;3291:2;3271:18;;;3264:30;3330:34;3310:18;;;3303:62;-1:-1:-1;;;3381:18:504;;;3374:44;3435:19;;3314:201:457;3050:410:504;3314:201:457;3525:12;:16;;-1:-1:-1;;3525:16:457;3540:1;3525:16;;;3551:65;;;;3585:13;:20;;-1:-1:-1;;3585:20:457;;;;;3551:65;567:30:273::1;586:10;567:18;:30::i;:::-;3640:14:457::0;3636:99;;;3686:5;3670:21;;-1:-1:-1;;3670:21:457;;;3710:14;;-1:-1:-1;3617:36:504;;3710:14:457;;3605:2:504;3590:18;3710:14:457;;;;;;;3636:99;3258:483;520:82:273:o;2839:155:140:-;1334:13:454;:11;:13::i;:::-;2937:12:140::1;::::0;2921:39:::1;::::0;;-1:-1:-1;;;;;2937:12:140;;::::1;2608:34:504::0;;2678:15;;;2673:2;2658:18;;2651:43;2921:39:140::1;::::0;2543:18:504;2921:39:140::1;;;;;;;2966:12;:23:::0;;-1:-1:-1;;;;;;2966:23:140::1;-1:-1:-1::0;;;;;2966:23:140;;;::::1;::::0;;;::::1;::::0;;2839:155::o;2158:541::-;2285:12;;-1:-1:-1;;;;;2285:12:140;2271:10;:26;2263:60;;;;-1:-1:-1;;;2263:60:140;;3866:2:504;2263:60:140;;;3848:21:504;3905:2;3885:18;;;3878:30;-1:-1:-1;;;3924:18:504;;;3917:51;3985:18;;2263:60:140;3664:345:504;2263:60:140;2378:16;2397:7;1513:6:454;;-1:-1:-1;;;;;1513:6:454;;1441:85;2397:7:140;2436:12;;2378:26;;-1:-1:-1;;;;;;2436:12:140;2498:32;2436:12;2498:18;:32::i;:::-;2568:12;:25;;-1:-1:-1;;;;;;2568:25:140;;;2605:32;;;-1:-1:-1;;;;;2626:15:504;;2608:34;;-1:-1:-1;2673:2:504;2658:18;;2651:43;2605:32:140;;2543:18:504;2605:32:140;;;;;;;2681:12;;2648:46;;;-1:-1:-1;;;;;2626:15:504;;;2608:34;;2681:12:140;;;2673:2:504;2658:18;;2651:43;2648:46:140;;2543:18:504;2648:46:140;2396:304:504;606:558:273;680:7;699:39;714:6;-1:-1:-1;;;;;714:13:273;;:15;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;714:15:273;;;;;;;;;;;;:::i;:::-;699:39;;;;;;;;;;;;;-1:-1:-1;;;699:39:273;;;:14;:39::i;:::-;695:465;;;-1:-1:-1;755:4:273;;606:558;-1:-1:-1;606:558:273:o;695:465::-;780:18;817:6;-1:-1:-1;;;;;801:35:273;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;868:18:273;;846:19;868:18;;;:6;:18;;;;;;;;;932:39;;-1:-1:-1;;;932:39:273;;;;780:58;;-1:-1:-1;868:18:273;846:19;;868:18;932:37;;:39;;;;;868:18;;932:39;;;;;;868:18;932:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;924:48;;895:77;;1017:2;995:18;:24;;:158;;1128:23;1149:2;1128:18;:23;:::i;:::-;1123:29;;:2;:29;:::i;:::-;1099:54;;1107:11;1099:54;:::i;:::-;995:158;;;1061:23;1066:18;1061:2;:23;:::i;:::-;1056:29;;:2;:29;:::i;:::-;1032:54;;1040:11;1032:54;:::i;:::-;980:173;606:558;-1:-1:-1;;;;;606:558:273:o;1599:130:454:-;1513:6;;-1:-1:-1;;;;;1513:6:454;929:10:467;1662:23:454;1654:68;;;;-1:-1:-1;;;1654:68:454;;7809:2:504;1654:68:454;;;7791:21:504;;;7828:18;;;7821:30;7887:34;7867:18;;;7860:62;7939:18;;1654:68:454;7607:356:504;1654:68:454;1599:130::o;562:129:140:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;638:16:140::1;:14;:16::i;:::-;660:26;679:6;2673:187:454::0;2765:6;;;-1:-1:-1;;;;;2781:17:454;;;-1:-1:-1;;;;;;2781:17:454;;;;;;;2813:40;;2765:6;;;2781:17;2765:6;;2813:40;;2746:16;;2813:40;2736:124;2673:187;:::o;1916:175:273:-;1997:4;2081:1;2063:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;2053:32;;;;;;2045:1;2027:21;;;;;;;;:::i;:::-;;;;;;;;;;;;;2017:32;;;;;;:68;2009:77;;1916:175;;;;;:::o;1003:95:454:-;5363:13:457;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1065:26:454::1;5363:13:457::0;;;;;;;5355:69;;;;-1:-1:-1;;;5355:69:457;;;;;;;:::i;:::-;1176:32:454::1;929:10:467::0;1176:18:454::1;:32::i;14:131:504:-:0;-1:-1:-1;;;;;89:31:504;;79:42;;69:70;;135:1;132;125:12;150:315;218:6;226;279:2;267:9;258:7;254:23;250:32;247:52;;;295:1;292;285:12;247:52;334:9;321:23;353:31;378:5;353:31;:::i;:::-;403:5;455:2;440:18;;;;427:32;;-1:-1:-1;;;150:315:504:o;807:247::-;866:6;919:2;907:9;898:7;894:23;890:32;887:52;;;935:1;932;925:12;887:52;974:9;961:23;993:31;1018:5;993:31;:::i;:::-;1043:5;807:247;-1:-1:-1;;;807:247:504:o;2140:251::-;2210:6;2263:2;2251:9;2242:7;2238:23;2234:32;2231:52;;;2279:1;2276;2269:12;2231:52;2311:9;2305:16;2330:31;2355:5;2330:31;:::i;4014:127::-;4075:10;4070:3;4066:20;4063:1;4056:31;4106:4;4103:1;4096:15;4130:4;4127:1;4120:15;4146:258;4218:1;4228:113;4242:6;4239:1;4236:13;4228:113;;;4318:11;;;4312:18;4299:11;;;4292:39;4264:2;4257:10;4228:113;;;4359:6;4356:1;4353:13;4350:48;;;4394:1;4385:6;4380:3;4376:16;4369:27;4350:48;;4146:258;;;:::o;4409:884::-;4489:6;4542:2;4530:9;4521:7;4517:23;4513:32;4510:52;;;4558:1;4555;4548:12;4510:52;4591:9;4585:16;4620:18;4661:2;4653:6;4650:14;4647:34;;;4677:1;4674;4667:12;4647:34;4715:6;4704:9;4700:22;4690:32;;4760:7;4753:4;4749:2;4745:13;4741:27;4731:55;;4782:1;4779;4772:12;4731:55;4811:2;4805:9;4833:2;4829;4826:10;4823:36;;;4839:18;;:::i;:::-;4914:2;4908:9;4882:2;4968:13;;-1:-1:-1;;4964:22:504;;;4988:2;4960:31;4956:40;4944:53;;;5012:18;;;5032:22;;;5009:46;5006:72;;;5058:18;;:::i;:::-;5098:10;5094:2;5087:22;5133:2;5125:6;5118:18;5173:7;5168:2;5163;5159;5155:11;5151:20;5148:33;5145:53;;;5194:1;5191;5184:12;5145:53;5207:55;5259:2;5254;5246:6;5242:15;5237:2;5233;5229:11;5207:55;:::i;:::-;5281:6;4409:884;-1:-1:-1;;;;;;;4409:884:504:o;5298:273::-;5366:6;5419:2;5407:9;5398:7;5394:23;5390:32;5387:52;;;5435:1;5432;5425:12;5387:52;5467:9;5461:16;5517:4;5510:5;5506:16;5499:5;5496:27;5486:55;;5537:1;5534;5527:12;5576:127;5637:10;5632:3;5628:20;5625:1;5618:31;5668:4;5665:1;5658:15;5692:4;5689:1;5682:15;5708:125;5748:4;5776:1;5773;5770:8;5767:34;;;5781:18;;:::i;:::-;-1:-1:-1;5818:9:504;;5708:125::o;5838:422::-;5927:1;5970:5;5927:1;5984:270;6005:7;5995:8;5992:21;5984:270;;;6064:4;6060:1;6056:6;6052:17;6046:4;6043:27;6040:53;;;6073:18;;:::i;:::-;6123:7;6113:8;6109:22;6106:55;;;6143:16;;;;6106:55;6222:22;;;;6182:15;;;;5984:270;;;5988:3;5838:422;;;;;:::o;6265:806::-;6314:5;6344:8;6334:80;;-1:-1:-1;6385:1:504;6399:5;;6334:80;6433:4;6423:76;;-1:-1:-1;6470:1:504;6484:5;;6423:76;6515:4;6533:1;6528:59;;;;6601:1;6596:130;;;;6508:218;;6528:59;6558:1;6549:10;;6572:5;;;6596:130;6633:3;6623:8;6620:17;6617:43;;;6640:18;;:::i;:::-;-1:-1:-1;;6696:1:504;6682:16;;6711:5;;6508:218;;6810:2;6800:8;6797:16;6791:3;6785:4;6782:13;6778:36;6772:2;6762:8;6759:16;6754:2;6748:4;6745:12;6741:35;6738:77;6735:159;;;-1:-1:-1;6847:19:504;;;6879:5;;6735:159;6926:34;6951:8;6945:4;6926:34;:::i;:::-;6996:6;6992:1;6988:6;6984:19;6975:7;6972:32;6969:58;;;7007:18;;:::i;:::-;7045:20;;6265:806;-1:-1:-1;;;6265:806:504:o;7076:131::-;7136:5;7165:36;7192:8;7186:4;7165:36;:::i;7212:217::-;7252:1;7278;7268:132;;7322:10;7317:3;7313:20;7310:1;7303:31;7357:4;7354:1;7347:15;7385:4;7382:1;7375:15;7268:132;-1:-1:-1;7414:9:504;;7212:217::o;7434:168::-;7474:7;7540:1;7536;7532:6;7528:14;7525:1;7522:21;7517:1;7510:9;7503:17;7499:45;7496:71;;;7547:18;;:::i;:::-;-1:-1:-1;7587:9:504;;7434:168::o;7968:407::-;8170:2;8152:21;;;8209:2;8189:18;;;8182:30;8248:34;8243:2;8228:18;;8221:62;-1:-1:-1;;;8314:2:504;8299:18;;8292:41;8365:3;8350:19;;7968:407::o;8380:276::-;8511:3;8549:6;8543:13;8565:53;8611:6;8606:3;8599:4;8591:6;8587:17;8565:53;:::i;:::-;8634:16;;;;;8380:276;-1:-1:-1;;8380:276:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "_acceptOwner()": "fc4d33f9", + "_setPendingOwner(address)": "6e96dfd7", + "assetPrices(address)": "5e9a523c", + "getUnderlyingPrice(address)": "fc57d4df", + "initialize()": "8129fc1c", + "owner()": "8da5cb5b", + "pendingOwner()": "e30c3978", + "price(address)": "aea91078", + "renounceOwnership()": "715018a6", + "setDirectPrice(address,uint256)": "09a8acb0", + "setUnderlyingPrice(address,uint256)": "127ffda0", + "transferOwnership(address)": "f2fde38b" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/SimplePriceOracle_Proxy.json b/packages/sdk/deployments/bob/SimplePriceOracle_Proxy.json new file mode 100644 index 000000000..4abb3affe --- /dev/null +++ b/packages/sdk/deployments/bob/SimplePriceOracle_Proxy.json @@ -0,0 +1,275 @@ +{ + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "abi": [ + { + "inputs": [ + { + "internalType": "address", + "name": "_logic", + "type": "address" + }, + { + "internalType": "address", + "name": "admin_", + "type": "address" + }, + { + "internalType": "bytes", + "name": "_data", + "type": "bytes" + } + ], + "stateMutability": "payable", + "type": "constructor" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "stateMutability": "payable", + "type": "fallback" + }, + { + "inputs": [], + "name": "admin", + "outputs": [ + { + "internalType": "address", + "name": "admin_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "changeAdmin", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "implementation", + "outputs": [ + { + "internalType": "address", + "name": "implementation_", + "type": "address" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "stateMutability": "payable", + "type": "receive" + } + ], + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "transactionIndex": 1, + "gasUsed": "772074", + "logsBloom": "0x00000000000000000000000000000000400000000000000000800000000200000000020000000000000000000000000000000000100000000000000000000000800000000000000000000000000002000001000000000004000010000000000000000000020000000000000000000800000000800000000000000000000000400000000000000000000000000000000000000000000080000000000000c00000000000000000000000000000000400000000040000000000000000000000000000000020000000000000000000040000000000000400000000000000000020000100000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab", + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "logs": [ + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0xbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b", + "0x000000000000000000000000239c8e4792f4d5a9bdd7769ba84a0e8db1756c9b" + ], + "data": "0x", + "logIndex": 0, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + }, + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000000000000000000000000000000000000000000000", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 1, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + }, + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0x8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7", + "0x0000000000000000000000001155b614971f16758c92c4890ed338c9e3ede6b7" + ], + "data": "0x", + "logIndex": 2, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + }, + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0x7f26b83ff96e1f2b6a682f133852f6798a09c465da95921460cefb3847402498" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000001", + "logIndex": 3, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + }, + { + "transactionIndex": 1, + "blockNumber": 3777869, + "transactionHash": "0xa4933be8ab3104b43528b9f02824f2c3f2c5c7140f61fed486356369b8b23599", + "address": "0xBc97F93657186ad3614D05AaB83ee744Fc8CEf48", + "topics": [ + "0x7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f" + ], + "data": "0x0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000141ed81ba9f0a70b03ff545711c931e69dab1b7b", + "logIndex": 4, + "blockHash": "0x064b70d19c31cd5e3ac08f3e10579a1417cd989c040053d44cce8af8ee55d3ab" + } + ], + "blockNumber": 3777869, + "cumulativeGasUsed": "815913", + "status": 1, + "byzantium": true + }, + "args": [ + "0x239C8E4792F4D5A9bDD7769bA84A0E8dB1756c9b", + "0x141eD81BA9f0a70B03FF545711C931E69DAb1b7B", + "0x8129fc1c" + ], + "numDeployments": 1, + "solcInputHash": "0e89febeebc7444140de8e67c9067d2c", + "metadata": "{\"compiler\":{\"version\":\"0.8.10+commit.fc410830\"},\"language\":\"Solidity\",\"output\":{\"abi\":[{\"inputs\":[{\"internalType\":\"address\",\"name\":\"_logic\",\"type\":\"address\"},{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"_data\",\"type\":\"bytes\"}],\"stateMutability\":\"payable\",\"type\":\"constructor\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"stateMutability\":\"payable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"admin\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"admin_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"changeAdmin\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"implementation\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"implementation_\",\"type\":\"address\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"stateMutability\":\"payable\",\"type\":\"receive\"}],\"devdoc\":{\"details\":\"This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \\\"admin cannot fallback to proxy target\\\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\",\"kind\":\"dev\",\"methods\":{\"admin()\":{\"details\":\"Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\"},\"changeAdmin(address)\":{\"details\":\"Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\"},\"constructor\":{\"details\":\"Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\"},\"implementation()\":{\"details\":\"Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\"},\"upgradeTo(address)\":{\"details\":\"Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\"},\"upgradeToAndCall(address,bytes)\":{\"details\":\"Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\"}},\"version\":1},\"userdoc\":{\"kind\":\"user\",\"methods\":{},\"version\":1}},\"settings\":{\"compilationTarget\":{\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":\"TransparentUpgradeableProxy\"},\"evmVersion\":\"london\",\"libraries\":{},\"metadata\":{\"bytecodeHash\":\"ipfs\",\"useLiteralContent\":true},\"optimizer\":{\"enabled\":true,\"runs\":999999},\"remappings\":[]},\"sources\":{\"solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\\n * proxy whose upgrades are fully controlled by the current implementation.\\n */\\ninterface IERC1822Proxiable {\\n /**\\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\\n * address.\\n *\\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\\n * function revert if invoked through a proxy.\\n */\\n function proxiableUUID() external view returns (bytes32);\\n}\\n\",\"keccak256\":\"0x93b4e21c931252739a1ec13ea31d3d35a5c068be3163ccab83e4d70c40355f03\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../Proxy.sol\\\";\\nimport \\\"./ERC1967Upgrade.sol\\\";\\n\\n/**\\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\\n * implementation address that can be changed. This address is stored in storage in the location specified by\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\\n * implementation behind the proxy.\\n */\\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\\n /**\\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\\n *\\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\\n */\\n constructor(address _logic, bytes memory _data) payable {\\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.implementation\\\")) - 1));\\n _upgradeToAndCall(_logic, _data, false);\\n }\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _implementation() internal view virtual override returns (address impl) {\\n return ERC1967Upgrade._getImplementation();\\n }\\n}\\n\",\"keccak256\":\"0x6309f9f39dc6f4f45a24f296543867aa358e32946cd6b2874627a996d606b3a0\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\\n\\npragma solidity ^0.8.2;\\n\\nimport \\\"../beacon/IBeacon.sol\\\";\\nimport \\\"../../interfaces/draft-IERC1822.sol\\\";\\nimport \\\"../../utils/Address.sol\\\";\\nimport \\\"../../utils/StorageSlot.sol\\\";\\n\\n/**\\n * @dev This abstract contract provides getters and event emitting update functions for\\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\\n *\\n * _Available since v4.1._\\n *\\n * @custom:oz-upgrades-unsafe-allow delegatecall\\n */\\nabstract contract ERC1967Upgrade {\\n // This is the keccak-256 hash of \\\"eip1967.proxy.rollback\\\" subtracted by 1\\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\\n\\n /**\\n * @dev Storage slot with the address of the current implementation.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.implementation\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n\\n /**\\n * @dev Emitted when the implementation is upgraded.\\n */\\n event Upgraded(address indexed implementation);\\n\\n /**\\n * @dev Returns the current implementation address.\\n */\\n function _getImplementation() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 implementation slot.\\n */\\n function _setImplementation(address newImplementation) private {\\n require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n }\\n\\n /**\\n * @dev Perform implementation upgrade\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeTo(address newImplementation) internal {\\n _setImplementation(newImplementation);\\n emit Upgraded(newImplementation);\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCall(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _upgradeTo(newImplementation);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(newImplementation, data);\\n }\\n }\\n\\n /**\\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\\n *\\n * Emits an {Upgraded} event.\\n */\\n function _upgradeToAndCallUUPS(\\n address newImplementation,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n // Upgrades from old implementations will perform a rollback test. This test requires the new\\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\\n // this special case will break upgrade paths from old UUPS implementation to new ones.\\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\\n _setImplementation(newImplementation);\\n } else {\\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\\n require(slot == _IMPLEMENTATION_SLOT, \\\"ERC1967Upgrade: unsupported proxiableUUID\\\");\\n } catch {\\n revert(\\\"ERC1967Upgrade: new implementation is not UUPS\\\");\\n }\\n _upgradeToAndCall(newImplementation, data, forceCall);\\n }\\n }\\n\\n /**\\n * @dev Storage slot with the admin of the contract.\\n * This is the keccak-256 hash of \\\"eip1967.proxy.admin\\\" subtracted by 1, and is\\n * validated in the constructor.\\n */\\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\\n\\n /**\\n * @dev Emitted when the admin account has changed.\\n */\\n event AdminChanged(address previousAdmin, address newAdmin);\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _getAdmin() internal view virtual returns (address) {\\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new address in the EIP1967 admin slot.\\n */\\n function _setAdmin(address newAdmin) private {\\n require(newAdmin != address(0), \\\"ERC1967: new admin is the zero address\\\");\\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n */\\n function _changeAdmin(address newAdmin) internal {\\n emit AdminChanged(_getAdmin(), newAdmin);\\n _setAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\\n */\\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\\n\\n /**\\n * @dev Emitted when the beacon is upgraded.\\n */\\n event BeaconUpgraded(address indexed beacon);\\n\\n /**\\n * @dev Returns the current beacon.\\n */\\n function _getBeacon() internal view returns (address) {\\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\\n }\\n\\n /**\\n * @dev Stores a new beacon in the EIP1967 beacon slot.\\n */\\n function _setBeacon(address newBeacon) private {\\n require(Address.isContract(newBeacon), \\\"ERC1967: new beacon is not a contract\\\");\\n require(Address.isContract(IBeacon(newBeacon).implementation()), \\\"ERC1967: beacon implementation is not a contract\\\");\\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\\n }\\n\\n /**\\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\\n *\\n * Emits a {BeaconUpgraded} event.\\n */\\n function _upgradeBeaconToAndCall(\\n address newBeacon,\\n bytes memory data,\\n bool forceCall\\n ) internal {\\n _setBeacon(newBeacon);\\n emit BeaconUpgraded(newBeacon);\\n if (data.length > 0 || forceCall) {\\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\\n }\\n }\\n}\\n\",\"keccak256\":\"0x17668652127feebed0ce8d9431ef95ccc8c4292f03e3b8cf06c6ca16af396633\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/Proxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\\n * be specified by overriding the virtual {_implementation} function.\\n *\\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\\n * different contract through the {_delegate} function.\\n *\\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\\n */\\nabstract contract Proxy {\\n /**\\n * @dev Delegates the current call to `implementation`.\\n *\\n * This function does not return to its internal call site, it will return directly to the external caller.\\n */\\n function _delegate(address implementation) internal virtual {\\n assembly {\\n // Copy msg.data. We take full control of memory in this inline assembly\\n // block because it will not return to Solidity code. We overwrite the\\n // Solidity scratch pad at memory position 0.\\n calldatacopy(0, 0, calldatasize())\\n\\n // Call the implementation.\\n // out and outsize are 0 because we don't know the size yet.\\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\\n\\n // Copy the returned data.\\n returndatacopy(0, 0, returndatasize())\\n\\n switch result\\n // delegatecall returns 0 on error.\\n case 0 {\\n revert(0, returndatasize())\\n }\\n default {\\n return(0, returndatasize())\\n }\\n }\\n }\\n\\n /**\\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\\n * and {_fallback} should delegate.\\n */\\n function _implementation() internal view virtual returns (address);\\n\\n /**\\n * @dev Delegates the current call to the address returned by `_implementation()`.\\n *\\n * This function does not return to its internall call site, it will return directly to the external caller.\\n */\\n function _fallback() internal virtual {\\n _beforeFallback();\\n _delegate(_implementation());\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\\n * function in the contract matches the call data.\\n */\\n fallback() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\\n * is empty.\\n */\\n receive() external payable virtual {\\n _fallback();\\n }\\n\\n /**\\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\\n * call, or as part of the Solidity `fallback` or `receive` functions.\\n *\\n * If overriden should call `super._beforeFallback()`.\\n */\\n function _beforeFallback() internal virtual {}\\n}\\n\",\"keccak256\":\"0xd5d1fd16e9faff7fcb3a52e02a8d49156f42a38a03f07b5f1810c21c2149a8ab\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\\n */\\ninterface IBeacon {\\n /**\\n * @dev Must return an address that can be used as a delegate call target.\\n *\\n * {BeaconProxy} will check that this address is a contract.\\n */\\n function implementation() external view returns (address);\\n}\\n\",\"keccak256\":\"0xd50a3421ac379ccb1be435fa646d66a65c986b4924f0849839f08692f39dde61\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\\n\\npragma solidity ^0.8.0;\\n\\nimport \\\"../ERC1967/ERC1967Proxy.sol\\\";\\n\\n/**\\n * @dev This contract implements a proxy that is upgradeable by an admin.\\n *\\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\\n * clashing], which can potentially be used in an attack, this contract uses the\\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\\n * things that go hand in hand:\\n *\\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\\n * that call matches one of the admin functions exposed by the proxy itself.\\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\\n * \\\"admin cannot fallback to proxy target\\\".\\n *\\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\\n * to sudden errors when trying to call a function from the proxy implementation.\\n *\\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\\n */\\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\\n /**\\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\\n */\\n constructor(\\n address _logic,\\n address admin_,\\n bytes memory _data\\n ) payable ERC1967Proxy(_logic, _data) {\\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\\\"eip1967.proxy.admin\\\")) - 1));\\n _changeAdmin(admin_);\\n }\\n\\n /**\\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\\n */\\n modifier ifAdmin() {\\n if (msg.sender == _getAdmin()) {\\n _;\\n } else {\\n _fallback();\\n }\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\\n */\\n function admin() external ifAdmin returns (address admin_) {\\n admin_ = _getAdmin();\\n }\\n\\n /**\\n * @dev Returns the current implementation.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\\n *\\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\\n */\\n function implementation() external ifAdmin returns (address implementation_) {\\n implementation_ = _implementation();\\n }\\n\\n /**\\n * @dev Changes the admin of the proxy.\\n *\\n * Emits an {AdminChanged} event.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\\n */\\n function changeAdmin(address newAdmin) external virtual ifAdmin {\\n _changeAdmin(newAdmin);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\\n */\\n function upgradeTo(address newImplementation) external ifAdmin {\\n _upgradeToAndCall(newImplementation, bytes(\\\"\\\"), false);\\n }\\n\\n /**\\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\\n * proxied contract.\\n *\\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\\n */\\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\\n _upgradeToAndCall(newImplementation, data, true);\\n }\\n\\n /**\\n * @dev Returns the current admin.\\n */\\n function _admin() internal view virtual returns (address) {\\n return _getAdmin();\\n }\\n\\n /**\\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\\n */\\n function _beforeFallback() internal virtual override {\\n require(msg.sender != _getAdmin(), \\\"TransparentUpgradeableProxy: admin cannot fallback to proxy target\\\");\\n super._beforeFallback();\\n }\\n}\\n\",\"keccak256\":\"0x140055a64cf579d622e04f5a198595832bf2cb193cd0005f4f2d4d61ca906253\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/Address.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\\n\\npragma solidity ^0.8.1;\\n\\n/**\\n * @dev Collection of functions related to the address type\\n */\\nlibrary Address {\\n /**\\n * @dev Returns true if `account` is a contract.\\n *\\n * [IMPORTANT]\\n * ====\\n * It is unsafe to assume that an address for which this function returns\\n * false is an externally-owned account (EOA) and not a contract.\\n *\\n * Among others, `isContract` will return false for the following\\n * types of addresses:\\n *\\n * - an externally-owned account\\n * - a contract in construction\\n * - an address where a contract will be created\\n * - an address where a contract lived, but was destroyed\\n * ====\\n *\\n * [IMPORTANT]\\n * ====\\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\\n *\\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\\n * constructor.\\n * ====\\n */\\n function isContract(address account) internal view returns (bool) {\\n // This method relies on extcodesize/address.code.length, which returns 0\\n // for contracts in construction, since the code is only stored at the end\\n // of the constructor execution.\\n\\n return account.code.length > 0;\\n }\\n\\n /**\\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\\n * `recipient`, forwarding all available gas and reverting on errors.\\n *\\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\\n * imposed by `transfer`, making them unable to receive funds via\\n * `transfer`. {sendValue} removes this limitation.\\n *\\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\\n *\\n * IMPORTANT: because control is transferred to `recipient`, care must be\\n * taken to not create reentrancy vulnerabilities. Consider using\\n * {ReentrancyGuard} or the\\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\\n */\\n function sendValue(address payable recipient, uint256 amount) internal {\\n require(address(this).balance >= amount, \\\"Address: insufficient balance\\\");\\n\\n (bool success, ) = recipient.call{value: amount}(\\\"\\\");\\n require(success, \\\"Address: unable to send value, recipient may have reverted\\\");\\n }\\n\\n /**\\n * @dev Performs a Solidity function call using a low level `call`. A\\n * plain `call` is an unsafe replacement for a function call: use this\\n * function instead.\\n *\\n * If `target` reverts with a revert reason, it is bubbled up by this\\n * function (like regular Solidity function calls).\\n *\\n * Returns the raw returned data. To convert to the expected return value,\\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\\n *\\n * Requirements:\\n *\\n * - `target` must be a contract.\\n * - calling `target` with `data` must not revert.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionCall(target, data, \\\"Address: low-level call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\\n * `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, 0, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but also transferring `value` wei to `target`.\\n *\\n * Requirements:\\n *\\n * - the calling contract must have an ETH balance of at least `value`.\\n * - the called Solidity function must be `payable`.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value\\n ) internal returns (bytes memory) {\\n return functionCallWithValue(target, data, value, \\\"Address: low-level call with value failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\\n * with `errorMessage` as a fallback revert reason when `target` reverts.\\n *\\n * _Available since v3.1._\\n */\\n function functionCallWithValue(\\n address target,\\n bytes memory data,\\n uint256 value,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(address(this).balance >= value, \\\"Address: insufficient balance for call\\\");\\n require(isContract(target), \\\"Address: call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.call{value: value}(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\\n return functionStaticCall(target, data, \\\"Address: low-level static call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a static call.\\n *\\n * _Available since v3.3._\\n */\\n function functionStaticCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal view returns (bytes memory) {\\n require(isContract(target), \\\"Address: static call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.staticcall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\\n return functionDelegateCall(target, data, \\\"Address: low-level delegate call failed\\\");\\n }\\n\\n /**\\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\\n * but performing a delegate call.\\n *\\n * _Available since v3.4._\\n */\\n function functionDelegateCall(\\n address target,\\n bytes memory data,\\n string memory errorMessage\\n ) internal returns (bytes memory) {\\n require(isContract(target), \\\"Address: delegate call to non-contract\\\");\\n\\n (bool success, bytes memory returndata) = target.delegatecall(data);\\n return verifyCallResult(success, returndata, errorMessage);\\n }\\n\\n /**\\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\\n * revert reason using the provided one.\\n *\\n * _Available since v4.3._\\n */\\n function verifyCallResult(\\n bool success,\\n bytes memory returndata,\\n string memory errorMessage\\n ) internal pure returns (bytes memory) {\\n if (success) {\\n return returndata;\\n } else {\\n // Look for revert reason and bubble it up if present\\n if (returndata.length > 0) {\\n // The easiest way to bubble the revert reason is using memory via assembly\\n\\n assembly {\\n let returndata_size := mload(returndata)\\n revert(add(32, returndata), returndata_size)\\n }\\n } else {\\n revert(errorMessage);\\n }\\n }\\n }\\n}\\n\",\"keccak256\":\"0x3777e696b62134e6177440dbe6e6601c0c156a443f57167194b67e75527439de\",\"license\":\"MIT\"},\"solc_0.8/openzeppelin/utils/StorageSlot.sol\":{\"content\":\"// SPDX-License-Identifier: MIT\\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\\n\\npragma solidity ^0.8.0;\\n\\n/**\\n * @dev Library for reading and writing primitive types to specific storage slots.\\n *\\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\\n * This library helps with reading and writing to such slots without the need for inline assembly.\\n *\\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\\n *\\n * Example usage to set ERC1967 implementation slot:\\n * ```\\n * contract ERC1967 {\\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\\n *\\n * function _getImplementation() internal view returns (address) {\\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\\n * }\\n *\\n * function _setImplementation(address newImplementation) internal {\\n * require(Address.isContract(newImplementation), \\\"ERC1967: new implementation is not a contract\\\");\\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\\n * }\\n * }\\n * ```\\n *\\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\\n */\\nlibrary StorageSlot {\\n struct AddressSlot {\\n address value;\\n }\\n\\n struct BooleanSlot {\\n bool value;\\n }\\n\\n struct Bytes32Slot {\\n bytes32 value;\\n }\\n\\n struct Uint256Slot {\\n uint256 value;\\n }\\n\\n /**\\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\\n */\\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\\n */\\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\\n */\\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n\\n /**\\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\\n */\\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\\n assembly {\\n r.slot := slot\\n }\\n }\\n}\\n\",\"keccak256\":\"0xfe1b7a9aa2a530a9e705b220e26cd584e2fbdc9602a3a1066032b12816b46aca\",\"license\":\"MIT\"}},\"version\":1}", + "bytecode": "0x6080604052604051620011b2380380620011b2833981016040819052620000269162000519565b82816200005560017f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbd620005f9565b6000805160206200116b833981519152146200007557620000756200061f565b6200008382826000620000e7565b50620000b3905060017fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6104620005f9565b6000805160206200114b83398151915214620000d357620000d36200061f565b620000de8262000124565b50505062000688565b620000f2836200017f565b600082511180620001005750805b156200011f576200011d8383620001c160201b620002ff1760201c565b505b505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6200014f620001f0565b604080516001600160a01b03928316815291841660208301520160405180910390a16200017c8162000229565b50565b6200018a81620002de565b6040516001600160a01b038216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b6060620001e983836040518060600160405280602781526020016200118b6027913962000381565b9392505050565b60006200021a6000805160206200114b83398151915260001b6200046760201b620002731760201c565b546001600160a01b0316919050565b6001600160a01b038116620002945760405162461bcd60e51b815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201526564647265737360d01b60648201526084015b60405180910390fd5b80620002bd6000805160206200114b83398151915260001b6200046760201b620002731760201c565b80546001600160a01b0319166001600160a01b039290921691909117905550565b620002f4816200046a60201b6200032b1760201c565b620003585760405162461bcd60e51b815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201526c1bdd08184818dbdb9d1c9858dd609a1b60648201526084016200028b565b80620002bd6000805160206200116b83398151915260001b6200046760201b620002731760201c565b60606001600160a01b0384163b620003eb5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f6044820152651b9d1c9858dd60d21b60648201526084016200028b565b600080856001600160a01b03168560405162000408919062000635565b600060405180830381855af49150503d806000811462000445576040519150601f19603f3d011682016040523d82523d6000602084013e6200044a565b606091505b5090925090506200045d82828662000479565b9695505050505050565b90565b6001600160a01b03163b151590565b606083156200048a575081620001e9565b8251156200049b5782518084602001fd5b8160405162461bcd60e51b81526004016200028b919062000653565b80516001600160a01b0381168114620004cf57600080fd5b919050565b634e487b7160e01b600052604160045260246000fd5b60005b8381101562000507578181015183820152602001620004ed565b838111156200011d5750506000910152565b6000806000606084860312156200052f57600080fd5b6200053a84620004b7565b92506200054a60208501620004b7565b60408501519092506001600160401b03808211156200056857600080fd5b818601915086601f8301126200057d57600080fd5b815181811115620005925762000592620004d4565b604051601f8201601f19908116603f01168101908382118183101715620005bd57620005bd620004d4565b81604052828152896020848701011115620005d757600080fd5b620005ea836020830160208801620004ea565b80955050505050509250925092565b6000828210156200061a57634e487b7160e01b600052601160045260246000fd5b500390565b634e487b7160e01b600052600160045260246000fd5b6000825162000649818460208701620004ea565b9190910192915050565b602081526000825180602084015262000674816040850160208701620004ea565b601f01601f19169190910160400192915050565b610ab380620006986000396000f3fe60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033b53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564", + "deployedBytecode": "0x60806040526004361061005e5760003560e01c80635c60da1b116100435780635c60da1b146100a85780638f283970146100e6578063f851a440146101065761006d565b80633659cfe6146100755780634f1ef286146100955761006d565b3661006d5761006b61011b565b005b61006b61011b565b34801561008157600080fd5b5061006b61009036600461091f565b610135565b61006b6100a336600461093a565b610196565b3480156100b457600080fd5b506100bd610221565b60405173ffffffffffffffffffffffffffffffffffffffff909116815260200160405180910390f35b3480156100f257600080fd5b5061006b61010136600461091f565b610276565b34801561011257600080fd5b506100bd6102ba565b610123610347565b61013361012e610435565b61043f565b565b61013d610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816040518060200160405280600081525060006104a3565b50565b61018b61011b565b61019e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610219576102148383838080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250600192506104a3915050565b505050565b61021461011b565b600061022b610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610435565b905090565b61027361011b565b90565b61027e610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561018e5761018b816104ce565b60006102c4610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16141561026b57610266610463565b60606103248383604051806060016040528060278152602001610a576027913961052f565b9392505050565b73ffffffffffffffffffffffffffffffffffffffff163b151590565b61034f610463565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610133576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152604260248201527f5472616e73706172656e745570677261646561626c6550726f78793a2061646d60448201527f696e2063616e6e6f742066616c6c6261636b20746f2070726f7879207461726760648201527f6574000000000000000000000000000000000000000000000000000000000000608482015260a4015b60405180910390fd5b6000610266610657565b3660008037600080366000845af43d6000803e80801561045e573d6000f35b3d6000fd5b60007fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b5473ffffffffffffffffffffffffffffffffffffffff16919050565b6104ac8361067f565b6000825111806104b95750805b15610214576104c883836102ff565b50505050565b7f7e644d79422f17c01e4894b5f4f588d331ebfa28653d42ae832dc59e38c9798f6104f7610463565b6040805173ffffffffffffffffffffffffffffffffffffffff928316815291841660208301520160405180910390a161018b816106cc565b606073ffffffffffffffffffffffffffffffffffffffff84163b6105d5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f416464726573733a2064656c65676174652063616c6c20746f206e6f6e2d636f60448201527f6e74726163740000000000000000000000000000000000000000000000000000606482015260840161042c565b6000808573ffffffffffffffffffffffffffffffffffffffff16856040516105fd91906109e9565b600060405180830381855af49150503d8060008114610638576040519150601f19603f3d011682016040523d82523d6000602084013e61063d565b606091505b509150915061064d8282866107d8565b9695505050505050565b60007f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610487565b6106888161082b565b60405173ffffffffffffffffffffffffffffffffffffffff8216907fbc7cd75a20ee27fd9adebab32041f755214dbc6bffa90cc0225b39da2e5c2d3b90600090a250565b73ffffffffffffffffffffffffffffffffffffffff811661076f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602660248201527f455243313936373a206e65772061646d696e20697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161042c565b807fb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d61035b80547fffffffffffffffffffffffff00000000000000000000000000000000000000001673ffffffffffffffffffffffffffffffffffffffff9290921691909117905550565b606083156107e7575081610324565b8251156107f75782518084602001fd5b816040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042c9190610a05565b73ffffffffffffffffffffffffffffffffffffffff81163b6108cf576040517f08c379a000000000000000000000000000000000000000000000000000000000815260206004820152602d60248201527f455243313936373a206e657720696d706c656d656e746174696f6e206973206e60448201527f6f74206120636f6e747261637400000000000000000000000000000000000000606482015260840161042c565b807f360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc610792565b803573ffffffffffffffffffffffffffffffffffffffff8116811461091a57600080fd5b919050565b60006020828403121561093157600080fd5b610324826108f6565b60008060006040848603121561094f57600080fd5b610958846108f6565b9250602084013567ffffffffffffffff8082111561097557600080fd5b818601915086601f83011261098957600080fd5b81358181111561099857600080fd5b8760208285010111156109aa57600080fd5b6020830194508093505050509250925092565b60005b838110156109d85781810151838201526020016109c0565b838111156104c85750506000910152565b600082516109fb8184602087016109bd565b9190910192915050565b6020815260008251806020840152610a248160408501602087016109bd565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe016919091016040019291505056fe416464726573733a206c6f772d6c6576656c2064656c65676174652063616c6c206661696c6564a2646970667358221220b29caa54336b3ee836679675e9732ec5e526fb3f803cca2fe336cc3555aba62264736f6c634300080a0033", + "devdoc": { + "details": "This contract implements a proxy that is upgradeable by an admin. To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector clashing], which can potentially be used in an attack, this contract uses the https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two things that go hand in hand: 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if that call matches one of the admin functions exposed by the proxy itself. 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the implementation. If the admin tries to call a function on the implementation it will fail with an error that says \"admin cannot fallback to proxy target\". These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due to sudden errors when trying to call a function from the proxy implementation. Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way, you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.", + "kind": "dev", + "methods": { + "admin()": { + "details": "Returns the current admin. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`" + }, + "changeAdmin(address)": { + "details": "Changes the admin of the proxy. Emits an {AdminChanged} event. NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}." + }, + "constructor": { + "details": "Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}." + }, + "implementation()": { + "details": "Returns the current implementation. NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}. TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call. `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`" + }, + "upgradeTo(address)": { + "details": "Upgrade the implementation of the proxy. NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}." + }, + "upgradeToAndCall(address,bytes)": { + "details": "Upgrade the implementation of the proxy, and then call a function from the new implementation as specified by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the proxied contract. NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}." + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + }, + "storageLayout": { + "storage": [], + "types": null + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/SolidlySwapLiquidator.json b/packages/sdk/deployments/bob/SolidlySwapLiquidator.json new file mode 100644 index 000000000..dceeff9d9 --- /dev/null +++ b/packages/sdk/deployments/bob/SolidlySwapLiquidator.json @@ -0,0 +1,257 @@ +{ + "address": "0x48bf6bd4B3d8b4E75863B5340b977E888BacE19a", + "abi": [ + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "redeem", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "inputAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "strategyData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + } + ], + "transactionHash": "0x15e81809f7dd893cda4cd36d4d978f6b9017d206c8ce098d735f16f68d1a8f2a", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x48bf6bd4B3d8b4E75863B5340b977E888BacE19a", + "transactionIndex": 1, + "gasUsed": "337620", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0xadf22b274fc2004d34f17645681990dd1029ffe72881ead9d309e724d7e256e6", + "transactionHash": "0x15e81809f7dd893cda4cd36d4d978f6b9017d206c8ce098d735f16f68d1a8f2a", + "logs": [], + "blockNumber": 3777929, + "cumulativeGasUsed": "381459", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "redeem(address,uint256,bytes)": { + "params": { + "inputAmount": "The amount of the input wrapped token to be redeemed for an underlying token.", + "inputToken": "The input wrapped token to be redeemed for an underlying token.", + "strategyData": "The ABI-encoded data to be used in the redemption strategy logic." + }, + "returns": { + "outputAmount": "The quantity of underlying tokens outputted.", + "outputToken": "The underlying ERC20 token outputted." + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": { + "redeem(address,uint256,bytes)": { + "notice": "Redeems custom collateral `token` for an underlying token." + } + }, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/liquidators/SolidlySwapLiquidator.sol": "SolidlySwapLiquidator" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/external/solidly/IRouter.sol": { + "keccak256": "0x1b0243564ad8f92731f75038da17d97be2c2d8bebd5c6fa3a565d5d367909260", + "urls": [ + "bzz-raw://a47f4e14934e1452b5370e4267e43b4e6f98fd7a0d78bb79df04bf3ecd5d1204", + "dweb:/ipfs/QmWPVmf51r3ZjNGphbz2ws6qJNkXubZVXG2ybqtfkyf4b4" + ], + "license": null + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/SolidlySwapLiquidator.sol": { + "keccak256": "0xd013383f9411f24fdb353af51cebfdfd5775f14646168c183edc60cffb34cffb", + "urls": [ + "bzz-raw://13b8be016994cf9995b4b6b4b20bcab7183032d2b48bf8ad186c0513ca778041", + "dweb:/ipfs/QmZvnedRXvRYXZpdUC4VvVewjJ3BCShE8yXYqcPPkLdgHf" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/extensions/draft-IERC20PermitUpgradeable.sol": { + "keccak256": "0xcc70d8e2281fb3ff69e8ab242500f10142cd0a7fa8dd9e45882be270d4d09024", + "urls": [ + "bzz-raw://17a4063bc918df0f7bb9cbf04c6f0bb4977afab3f2fc212bc138a178312a221d", + "dweb:/ipfs/QmZMdvsHP5mDEAAdrK4bNeNh47TfmSFgN9qEBFTbie7zmm" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/utils/SafeERC20Upgradeable.sol": { + "keccak256": "0x4586689c55edb37fc3cac296d75d3851b3aee3f378aaa54d8a9258a384fbf541", + "urls": [ + "bzz-raw://0f3fb638e6f0d5279f6000579a71a482a7d3655aed62439549906e3584443c40", + "dweb:/ipfs/QmangQhgXTvji3sAgNcvdnTs7ZR3KEwmHfw5DEAybxB7cw" + ], + "license": "MIT" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/utils/AddressUpgradeable.sol": { + "keccak256": "0x0a3b4afc301241e2629ad192fa02e0f8626e3cf38ab6f45342bfd7afbde16ee0", + "urls": [ + "bzz-raw://b189423f1102ff4487e9c59a65ec400b98cc4aeef478dac8272b482e9f5ad7de", + "dweb:/ipfs/QmdpYHrzD8wPe5DMuEiWkXiVLsTkqD7C4tbBjWwkBQwJi2" + ], + "license": "MIT" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b50610525806100206000396000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c806306fdde031461003b57806310badf4e1461007b575b600080fd5b604080518082018252601581527429b7b634b2363ca9bbb0b82634b8bab4b230ba37b960591b602082015290516100729190610275565b60405180910390f35b61008e610089366004610329565b6100ad565b604080516001600160a01b039093168352602083019190915201610072565b6000806100bb8585856100c7565b91509150935093915050565b6000806000806000858060200190518101906100e391906103ef565b60405163095ea7b360e01b81526001600160a01b038085166004830152602482018c905293965091945092509089169063095ea7b3906044016020604051808303816000875af115801561013b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015f9190610437565b506040516313dcfc5960e01b815260048101889052600060248201526001600160a01b038981166044830152838116606483015282151560848301523060a48301524260c48301528416906313dcfc599060e4016000604051808303816000875af11580156101d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101fa9190810190610459565b506040516370a0823160e01b815230600482015291945084916001600160a01b038316906370a0823190602401602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026891906104ff565b9350505050935093915050565b600060208083528351808285015260005b818110156102a257858101830151858201604001528201610286565b818111156102b4576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146102df57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610321576103216102e2565b604052919050565b60008060006060848603121561033e57600080fd5b8335610349816102ca565b92506020848101359250604085013567ffffffffffffffff8082111561036e57600080fd5b818701915087601f83011261038257600080fd5b813581811115610394576103946102e2565b6103a6601f8201601f191685016102f8565b915080825288848285010111156103bc57600080fd5b80848401858401376000848284010152508093505050509250925092565b805180151581146103ea57600080fd5b919050565b60008060006060848603121561040457600080fd5b835161040f816102ca565b6020850151909350610420816102ca565b915061042e604085016103da565b90509250925092565b60006020828403121561044957600080fd5b610452826103da565b9392505050565b6000602080838503121561046c57600080fd5b825167ffffffffffffffff8082111561048457600080fd5b818501915085601f83011261049857600080fd5b8151818111156104aa576104aa6102e2565b8060051b91506104bb8483016102f8565b81815291830184019184810190888411156104d557600080fd5b938501935b838510156104f3578451825293850193908501906104da565b98975050505050505050565b60006020828403121561051157600080fd5b505191905056fea164736f6c634300080a000a", + "sourceMap": "514:1708:220:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b50600436106100365760003560e01c806306fdde031461003b57806310badf4e1461007b575b600080fd5b604080518082018252601581527429b7b634b2363ca9bbb0b82634b8bab4b230ba37b960591b602082015290516100729190610275565b60405180910390f35b61008e610089366004610329565b6100ad565b604080516001600160a01b039093168352602083019190915201610072565b6000806100bb8585856100c7565b91509150935093915050565b6000806000806000858060200190518101906100e391906103ef565b60405163095ea7b360e01b81526001600160a01b038085166004830152602482018c905293965091945092509089169063095ea7b3906044016020604051808303816000875af115801561013b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061015f9190610437565b506040516313dcfc5960e01b815260048101889052600060248201526001600160a01b038981166044830152838116606483015282151560848301523060a48301524260c48301528416906313dcfc599060e4016000604051808303816000875af11580156101d2573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526101fa9190810190610459565b506040516370a0823160e01b815230600482015291945084916001600160a01b038316906370a0823190602401602060405180830381865afa158015610244573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061026891906104ff565b9350505050935093915050565b600060208083528351808285015260005b818110156102a257858101830151858201604001528201610286565b818111156102b4576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146102df57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715610321576103216102e2565b604052919050565b60008060006060848603121561033e57600080fd5b8335610349816102ca565b92506020848101359250604085013567ffffffffffffffff8082111561036e57600080fd5b818701915087601f83011261038257600080fd5b813581811115610394576103946102e2565b6103a6601f8201601f191685016102f8565b915080825288848285010111156103bc57600080fd5b80848401858401376000848284010152508093505050509250925092565b805180151581146103ea57600080fd5b919050565b60008060006060848603121561040457600080fd5b835161040f816102ca565b6020850151909350610420816102ca565b915061042e604085016103da565b90509250925092565b60006020828403121561044957600080fd5b610452826103da565b9392505050565b6000602080838503121561046c57600080fd5b825167ffffffffffffffff8082111561048457600080fd5b818501915085601f83011261049857600080fd5b8151818111156104aa576104aa6102e2565b8060051b91506104bb8483016102f8565b81815291830184019184810190888411156104d557600080fd5b938501935b838510156104f3578451825293850193908501906104da565b98975050505050505050565b60006020828403121561051157600080fd5b505191905056fea164736f6c634300080a000a", + "sourceMap": "514:1708:220:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2127:93;2185:30;;;;;;;;;;;-1:-1:-1;;;2185:30:220;;;;2127:93;;;;2185:30;2127:93;:::i;:::-;;;;;;;;1123:255;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;2421:32:504;;;2403:51;;2485:2;2470:18;;2463:34;;;;2376:18;1123:255:220;2201:302:504;1123:255:220;1260:29;1291:20;1326:47;1335:10;1347:11;1360:12;1326:8;:47::i;:::-;1319:54;;;;1123:255;;;;;;:::o;1382:741::-;1512:29;1543:20;1607:21;1630:15;1647:11;1673:12;1662:50;;;;;;;;;;;;:::i;:::-;1749:55;;-1:-1:-1;;;1749:55:220;;-1:-1:-1;;;;;2421:32:504;;;1749:55:220;;;2403:51:504;2470:18;;;2463:34;;;1606:106:220;;-1:-1:-1;1606:106:220;;-1:-1:-1;1606:106:220;-1:-1:-1;1749:18:220;;;;;;2376::504;;1749:55:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1810:178:220;;-1:-1:-1;;;1810:178:220;;;;;4012:25:504;;;1881:1:220;4053:18:504;;;4046:34;-1:-1:-1;;;;;4154:15:504;;;4134:18;;;4127:43;4206:15;;;4186:18;;;4179:43;4266:14;;4259:22;4238:19;;;4231:51;1954:4:220;4298:19:504;;;4291:44;1967:15:220;4351:19:504;;;4344:35;1810:44:220;;;;;3984:19:504;;1810:178:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;1810:178:220;;;;;;;;;;;;:::i;:::-;-1:-1:-1;2082:36:220;;-1:-1:-1;;;2082:36:220;;2112:4;2082:36;;;5477:51:504;2053:7:220;;-1:-1:-1;2053:7:220;;-1:-1:-1;;;;;2082:21:220;;;;;5450:18:504;;2082:36:220;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2067:51;;1565:558;;;1382:741;;;;;;:::o;14:597:504:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:504;574:15;-1:-1:-1;;570:29:504;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:504:o;616:150::-;-1:-1:-1;;;;;710:31:504;;700:42;;690:70;;756:1;753;746:12;690:70;616:150;:::o;771:127::-;832:10;827:3;823:20;820:1;813:31;863:4;860:1;853:15;887:4;884:1;877:15;903:275;974:2;968:9;1039:2;1020:13;;-1:-1:-1;;1016:27:504;1004:40;;1074:18;1059:34;;1095:22;;;1056:62;1053:88;;;1121:18;;:::i;:::-;1157:2;1150:22;903:275;;-1:-1:-1;903:275:504:o;1183:1013::-;1297:6;1305;1313;1366:2;1354:9;1345:7;1341:23;1337:32;1334:52;;;1382:1;1379;1372:12;1334:52;1421:9;1408:23;1440:50;1484:5;1440:50;:::i;:::-;1509:5;-1:-1:-1;1533:2:504;1567:18;;;1554:32;;-1:-1:-1;1637:2:504;1622:18;;1609:32;1660:18;1690:14;;;1687:34;;;1717:1;1714;1707:12;1687:34;1755:6;1744:9;1740:22;1730:32;;1800:7;1793:4;1789:2;1785:13;1781:27;1771:55;;1822:1;1819;1812:12;1771:55;1858:2;1845:16;1880:2;1876;1873:10;1870:36;;;1886:18;;:::i;:::-;1928:53;1971:2;1952:13;;-1:-1:-1;;1948:27:504;1944:36;;1928:53;:::i;:::-;1915:66;;2004:2;1997:5;1990:17;2044:7;2039:2;2034;2030;2026:11;2022:20;2019:33;2016:53;;;2065:1;2062;2055:12;2016:53;2120:2;2115;2111;2107:11;2102:2;2095:5;2091:14;2078:45;2164:1;2159:2;2154;2147:5;2143:14;2139:23;2132:34;;2185:5;2175:15;;;;;1183:1013;;;;;:::o;2508:164::-;2584:13;;2633;;2626:21;2616:32;;2606:60;;2662:1;2659;2652:12;2606:60;2508:164;;;:::o;2677:527::-;2787:6;2795;2803;2856:2;2844:9;2835:7;2831:23;2827:32;2824:52;;;2872:1;2869;2862:12;2824:52;2904:9;2898:16;2923:50;2967:5;2923:50;:::i;:::-;3042:2;3027:18;;3021:25;2992:5;;-1:-1:-1;3055:52:504;3021:25;3055:52;:::i;:::-;3126:7;-1:-1:-1;3152:46:504;3194:2;3179:18;;3152:46;:::i;:::-;3142:56;;2677:527;;;;;:::o;3488:202::-;3555:6;3608:2;3596:9;3587:7;3583:23;3579:32;3576:52;;;3624:1;3621;3614:12;3576:52;3647:37;3674:9;3647:37;:::i;:::-;3637:47;3488:202;-1:-1:-1;;;3488:202:504:o;4390:936::-;4485:6;4516:2;4559;4547:9;4538:7;4534:23;4530:32;4527:52;;;4575:1;4572;4565:12;4527:52;4608:9;4602:16;4637:18;4678:2;4670:6;4667:14;4664:34;;;4694:1;4691;4684:12;4664:34;4732:6;4721:9;4717:22;4707:32;;4777:7;4770:4;4766:2;4762:13;4758:27;4748:55;;4799:1;4796;4789:12;4748:55;4828:2;4822:9;4850:2;4846;4843:10;4840:36;;;4856:18;;:::i;:::-;4902:2;4899:1;4895:10;4885:20;;4925:28;4949:2;4945;4941:11;4925:28;:::i;:::-;4987:15;;;5057:11;;;5053:20;;;5018:12;;;;5085:19;;;5082:39;;;5117:1;5114;5107:12;5082:39;5141:11;;;;5161:135;5177:6;5172:3;5169:15;5161:135;;;5243:10;;5231:23;;5194:12;;;;5274;;;;5161:135;;;5315:5;4390:936;-1:-1:-1;;;;;;;;4390:936:504:o;5539:184::-;5609:6;5662:2;5650:9;5641:7;5637:23;5633:32;5630:52;;;5678:1;5675;5668:12;5630:52;-1:-1:-1;5701:16:504;;5539:184;-1:-1:-1;5539:184:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "name()": "06fdde03", + "redeem(address,uint256,bytes)": "10badf4e" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/UniswapV3LiquidatorFunder.json b/packages/sdk/deployments/bob/UniswapV3LiquidatorFunder.json new file mode 100644 index 000000000..9a72e01fb --- /dev/null +++ b/packages/sdk/deployments/bob/UniswapV3LiquidatorFunder.json @@ -0,0 +1,545 @@ +{ + "address": "0x21a455cEd9C79BC523D4E340c2B97521F4217817", + "abi": [ + { + "type": "function", + "name": "convert", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "inputAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "strategyData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + }, + { + "type": "function", + "name": "estimateInputAmount", + "inputs": [ + { + "name": "outputAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "strategyData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "inputAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "view" + }, + { + "type": "function", + "name": "name", + "inputs": [], + "outputs": [ + { + "name": "", + "type": "string", + "internalType": "string" + } + ], + "stateMutability": "pure" + }, + { + "type": "function", + "name": "redeem", + "inputs": [ + { + "name": "inputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "inputAmount", + "type": "uint256", + "internalType": "uint256" + }, + { + "name": "strategyData", + "type": "bytes", + "internalType": "bytes" + } + ], + "outputs": [ + { + "name": "outputToken", + "type": "address", + "internalType": "contract IERC20Upgradeable" + }, + { + "name": "outputAmount", + "type": "uint256", + "internalType": "uint256" + } + ], + "stateMutability": "nonpayable" + } + ], + "transactionHash": "0x40ac7fbb63bf1b409b3a79ed51bbaf96daed477d3b64f2ff2c72207dbdce3c30", + "receipt": { + "to": null, + "from": "0x1155b614971f16758C92c4890eD338C9e3ede6b7", + "contractAddress": "0x21a455cEd9C79BC523D4E340c2B97521F4217817", + "transactionIndex": 2, + "gasUsed": "377249", + "logsBloom": "0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000", + "blockHash": "0x01c24c5faaf2d751d2729147cea0c5b96303e9308767dba2c2de2b689a66d1a8", + "transactionHash": "0x40ac7fbb63bf1b409b3a79ed51bbaf96daed477d3b64f2ff2c72207dbdce3c30", + "logs": [], + "blockNumber": 3777925, + "cumulativeGasUsed": "464616", + "status": 1, + "byzantium": true + }, + "args": [], + "numDeployments": 1, + "metadata": { + "compiler": { + "version": "0.8.10+commit.fc410830" + }, + "language": "Solidity", + "output": { + "abi": [ + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "convert", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + } + ] + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "stateMutability": "view", + "type": "function", + "name": "estimateInputAmount", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + } + ] + }, + { + "inputs": [], + "stateMutability": "pure", + "type": "function", + "name": "name", + "outputs": [ + { + "internalType": "string", + "name": "", + "type": "string" + } + ] + }, + { + "inputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "inputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "inputAmount", + "type": "uint256" + }, + { + "internalType": "bytes", + "name": "strategyData", + "type": "bytes" + } + ], + "stateMutability": "nonpayable", + "type": "function", + "name": "redeem", + "outputs": [ + { + "internalType": "contract IERC20Upgradeable", + "name": "outputToken", + "type": "address" + }, + { + "internalType": "uint256", + "name": "outputAmount", + "type": "uint256" + } + ] + } + ], + "devdoc": { + "kind": "dev", + "methods": { + "estimateInputAmount(uint256,bytes)": { + "details": "Estimates the needed input amount of the input token for the conversion to return the desired output amount.", + "params": { + "outputAmount": "the desired output amount", + "strategyData": "the input token" + } + }, + "redeem(address,uint256,bytes)": { + "details": "Redeems `inputToken` for `outputToken` where `inputAmount` < `outputAmount`", + "params": { + "inputAmount": "input amount", + "inputToken": "Address of the token", + "strategyData": "context specific data like input token, pool address and tx expiratio period" + } + } + }, + "version": 1 + }, + "userdoc": { + "kind": "user", + "methods": {}, + "version": 1 + } + }, + "settings": { + "remappings": [ + "@openzeppelin/=lib/openzeppelin-contracts/", + "@pythnetwork/pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "ds-test/=lib/forge-std/lib/ds-test/src/", + "flywheel-v2/=lib/flywheel-v2/src/", + "flywheel/=lib/flywheel-v2/src/", + "forge-std/=lib/forge-std/src/", + "fuse-flywheel/=lib/fuse-flywheel/src/", + "libcompound/=lib/fuse-flywheel/lib/libcompound/src/", + "openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/", + "openzeppelin-contracts/=lib/openzeppelin-contracts/", + "ops/=lib/ops/contracts/", + "pyth-sdk-solidity/=lib/pyth-sdk-solidity/", + "solidity-bytes-utils/=lib/solidity-bytes-utils/", + "solmate/=lib/solmate/src/", + "weird-erc20/=lib/fuse-flywheel/lib/libcompound/lib/solmate/lib/weird-erc20/src/" + ], + "optimizer": { + "enabled": true, + "runs": 200 + }, + "metadata": { + "bytecodeHash": "none" + }, + "compilationTarget": { + "contracts/liquidators/UniswapV3LiquidatorFunder.sol": "UniswapV3LiquidatorFunder" + }, + "evmVersion": "london", + "libraries": {} + }, + "sources": { + "contracts/external/uniswap/FullMath.sol": { + "keccak256": "0xf42bdded6dc8044ea0321c72dcf05e2c422122beed96889c478326907ed51d16", + "urls": [ + "bzz-raw://bbfbeea6a13bcccc9cda3baca1abad21d0321f58b2e4ca1409676e875211c0e2", + "dweb:/ipfs/QmTyabQbLPZtgxWUWjKKcZbyGq8RLqrF2tYiHgcyAMkLhx" + ], + "license": "MIT" + }, + "contracts/external/uniswap/ISwapRouter.sol": { + "keccak256": "0xbf2cbc91aa604597c3ef848d2f06cadd3311f6c7ede999c4d1285f3fb0a6c29c", + "urls": [ + "bzz-raw://8ed6693c1a8d97a3d5cdb4a6841ceb0cb560a5b2d9bcd0cc154747f8f9042d95", + "dweb:/ipfs/QmTWgMBEGSg3hkw156sH6EdPKJs33aEMvRnAuPxBU4Rkwh" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/external/uniswap/IUniswapV3Factory.sol": { + "keccak256": "0x94c0f98bad3dc5b39706fbe5704b3a31d6399177fb72abc906f5ffa64c2562c2", + "urls": [ + "bzz-raw://73cda2d2ad8a6c05e0f8062a321aaff79875af0ae453851f9b38be1681e959a2", + "dweb:/ipfs/QmV9enKToiN6j1L8tyhtnnLaF71zezfbvBGGMttzpFxvib" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/external/uniswap/IUniswapV3Pool.sol": { + "keccak256": "0x815e94e8e575e572117cf045489c699e2e0cb56b7d2dd1a9adb1b0b1f8ac25e1", + "urls": [ + "bzz-raw://534fe33dbc8e307f2147cc69d29a355286a771df150bed70c4c374ea7febb6c1", + "dweb:/ipfs/QmWohCBjoNJ4EvnagKDAXMdbWKQfkzy6b38nv4MiA954kP" + ], + "license": "GPL-3.0-only" + }, + "contracts/external/uniswap/IUniswapV3PoolActions.sol": { + "keccak256": "0x01e66a0dca41f6e36bc20da4f66ff0e47b6b09ee9dcf59ce272a6e15a6c91a19", + "urls": [ + "bzz-raw://95ee248454c4ebf271eccb55e75a7d8dda95fa5d5b7a79663fafda8aafc33f48", + "dweb:/ipfs/QmNRebYSFFqF5YDAwLRHWhkVKXXkG14WZG9DBFUz6JvYzv" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/external/uniswap/IUniswapV3PoolImmutables.sol": { + "keccak256": "0xb2fb3532ff4b51c3aeedfbd85161048e9423d91e4e9c15a4784dbfd9431156ae", + "urls": [ + "bzz-raw://5f965f4e671be7be392920a11b6e4002bb7c37f7a982e623bce8009756d905eb", + "dweb:/ipfs/QmQsL77K4wBdo438WJQFGmivkre8DwX5MUAUn9CXjd6mQ3" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/external/uniswap/TickMath.sol": { + "keccak256": "0x432aca6b585c17a1130b0eb17a8f9ff1c3d1de49adbfea0e31b6d6c3c63c52a7", + "urls": [ + "bzz-raw://10c432b1dd129bb34296da0afd02173ecfe5202b9c74f4c932ca637598d1d83f", + "dweb:/ipfs/QmRCsdh53Hgj116nygDMXaR6yimaoPLDKfQpXUyePN8RmQ" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/external/uniswap/quoter/Quoter.sol": { + "keccak256": "0xcfbc88a172c99b9d4ef5b1fa9f97513fe6f41565f87cb5d8070a1f938985d70c", + "urls": [ + "bzz-raw://03242a2062487ac15664c4f14d0e1370dd198538eef6df0ef5b64da29533ea22", + "dweb:/ipfs/QmPedCVSAQqskamWeciGUqHaeYQYvsJC3A4obtn5s1cqeP" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/UniswapV3Quoter.sol": { + "keccak256": "0x04323a39bc058fccb502d2fb2ef9438560f4b8b06bc51d1a072c1b39b2006d45", + "urls": [ + "bzz-raw://7858414b0f2e41f0cf0f21a7c9583998f3a15acf7892367bd6496086a022fe3d", + "dweb:/ipfs/QmdGuWgJakrFp1fuyoT3uDzTcS338JyAKd9j6zizzuDsrW" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/interfaces/IQuoter.sol": { + "keccak256": "0x4354205b233dc56b0809867666845265260cb4059554a4bd4f35b0360508fea0", + "urls": [ + "bzz-raw://34bd85abf2e9afdccff4fdb86238f65f0d65763d7ab3085c1c8e0a9cb2bb8336", + "dweb:/ipfs/Qmei92ZwCECLoUn5Qo5dPjHQKWaeLxaaKupUSbSMQYKEKW" + ], + "license": "BUSL-1.1" + }, + "contracts/external/uniswap/quoter/interfaces/IUniswapV3Quoter.sol": { + "keccak256": "0xfebe8703ca93969f7314c5eefcd48125059abaa94182dac93ae202e761055d88", + "urls": [ + "bzz-raw://0f4e9637fbbfb9827b7618a526e77aed7aaaeeac8171ffabf10c63750e47c110", + "dweb:/ipfs/QmQSka5JJRCETfpf2zxWbATGM9tMpcEVMNqYTwcPMwRYCw" + ], + "license": "GPL-2.0-or-later" + }, + "contracts/external/uniswap/quoter/libraries/BitMath.sol": { + "keccak256": "0x6565078afaf4a8bc4804a95da936fd5a66c4b0095eabd462da0620d5388b7326", + "urls": [ + "bzz-raw://4a58e5028df3b3a6cf226a38eab08e63395585fc830f4fb94814faf19a8c5328", + "dweb:/ipfs/QmPeBHp7gpAjHAGDE2RTxbsst2itdM2EVHTe3msNhNae9s" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/FixedPoint96.sol": { + "keccak256": "0xd9c548394832b82a4c4221b5a323fe2986061b759637ad87b23430d43e8fefad", + "urls": [ + "bzz-raw://5a529f5e9e305dce4759053bd37bf792365eba7acffe2a8f78194026e132406b", + "dweb:/ipfs/QmcMKr1Bpuyy9xpxSxAozKRpuRr5gn4jmm7WbbW7EDxPKn" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/LiquidityMath.sol": { + "keccak256": "0x07062c5e1b28cf94a3c995566bb9acc7f1f23f555e9765d6bba7629a71f7c30e", + "urls": [ + "bzz-raw://92e8ea45e9f8ee9003d5d42d9ec392e0c1defcd6062ad25da66eb70be6690c4a", + "dweb:/ipfs/QmYwGkkhzXj9JU7yMZPtVn3nweVzc1VBGKSWazQybCgAmC" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/LowGasSafeMath.sol": { + "keccak256": "0x43f569e74a7d31db8e077710734e3267de08f7ce6eb2618f153ea7338e1eb774", + "urls": [ + "bzz-raw://e3e318fb677fb99c201f388e40dd93f67cad4cb1c2a0d8dd901aa9813bba0f9c", + "dweb:/ipfs/QmejmugUfzgFuvDq2Vnjxsi9e8W2BvNNxanXeTYCmDMETU" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/SafeCast.sol": { + "keccak256": "0x9aeb9a4b82064c1e0cd82046e4f5a011f74485461676599f76de6ffb969a25a0", + "urls": [ + "bzz-raw://f3110d69148e257380ab72f4b5c27a1e7a021e73944c0166bc3a6a0925a0f803", + "dweb:/ipfs/Qmdj8kRv48exiVRUwyG4tBbiGoXRGXm4HfL68oPcgpupfX" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/SqrtPriceMath.sol": { + "keccak256": "0x34d6754b798385e60b1b7ca9a405d371ce4986f73b3d08ce906b47eff2eaca2a", + "urls": [ + "bzz-raw://4cbca60e47507c6303fc088bec93ac3786b1032b69f83ff3917800cd9cc4f5b2", + "dweb:/ipfs/QmR3mMMZPrUksTxMyF5NKA2tJXgviXNxREd8Mb5ESnYd18" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/SwapMath.sol": { + "keccak256": "0xf25585e84e48d80c4d3ee87d73e57f0f81ca0e81876e50a29653b235762b544e", + "urls": [ + "bzz-raw://874eebad61e4a8f1c3581610bf9a007ec7ee28c150c7e3aebc0da9abf57f5a4f", + "dweb:/ipfs/QmUR6SavN7CCjGhSvHJoteJaoYNLejPojKs1MRdubowREB" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/Tick.sol": { + "keccak256": "0x53d99c9e769a4d6fc8f96a4db7c772a83a92b1822484992b2667b1afeb4c471e", + "urls": [ + "bzz-raw://70d06ee5667c6f132175f712753337182bb3628f37ec1debd45ddf704ee7bdab", + "dweb:/ipfs/Qmb8ipgNiFyHTjgkgB9X3EetLPwYavUZwLo69zUTJEXsib" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/TickBitmap.sol": { + "keccak256": "0x0dd2a7751c58a90757ef0c4e2a8f438d32e22e3f09eb0697229b1205ebda06dd", + "urls": [ + "bzz-raw://5f675c996f9ded31becef610d52b62b658aaa7747d9baf8285d36a3d2e6d1189", + "dweb:/ipfs/QmQp2Rj62adULrkbWrWGm7zJwuQrvfp8UcB7Ge4sS5Yovh" + ], + "license": "MIT" + }, + "contracts/external/uniswap/quoter/libraries/UnsafeMath.sol": { + "keccak256": "0x6630728b314eb1b184ce20a66bb9797539211e40a7159890a0990de28e0f7e66", + "urls": [ + "bzz-raw://6b6614cc8be2c075f08acc3a50ee17c2f1f44648de752095e684ff3fa2e9f608", + "dweb:/ipfs/Qme8NDfnaUogxXkbdSDkuzgotEhu9SHr6SsGwX7qvyZkYi" + ], + "license": "MIT" + }, + "contracts/liquidators/IFundsConversionStrategy.sol": { + "keccak256": "0xa8bb583271cf321f13f24304b0d03aa951d63aca61bcbbff22d2b44138240271", + "urls": [ + "bzz-raw://75dcf6023f0638ea92256efb1c052b54229479ab8da3f51a0a72d78523b6ad6b", + "dweb:/ipfs/QmTzBcHW2j7RK2GVAc1Bn5XnL9Nxm6bRdxodcnkrf3zY4G" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/IRedemptionStrategy.sol": { + "keccak256": "0x4cf72f79d325ed14f3c8d52e013a8d1f8bfe15b59553bbd9dff251761baf60dd", + "urls": [ + "bzz-raw://057886f22f3ce6c62b3052f70cbe2684371c8b2541ad5cd6e8df917a9973a8e6", + "dweb:/ipfs/QmeHaakFX1WHDx3NhuwhmxKLWySGiG3JCZrGHTrjC8jyAL" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/UniswapV3Liquidator.sol": { + "keccak256": "0xf17713fef94adc7f2e65caeb7ed1fabf06456ec8ff5804d2e4d2f74f4ec3ef9b", + "urls": [ + "bzz-raw://cede45c3e4f14efee44e899af3f2b22f16d0cc2826d81d8953645c584d07694f", + "dweb:/ipfs/QmeeDK4KnJ7BH2JZsSdJPeutPpajq6x2GoTySkRcFTtbss" + ], + "license": "UNLICENSED" + }, + "contracts/liquidators/UniswapV3LiquidatorFunder.sol": { + "keccak256": "0x13555f27f7c68bc5f8458804576e258bac169bf7f4590a8ce92c9d4aaf622ef1", + "urls": [ + "bzz-raw://cef858e267204eefaa90706cf0c03e6b24ff4ab894caf9cb026f62bfc41d5a87", + "dweb:/ipfs/QmZYsHSNKGTD9Sn7EZQWqDtR3tnsiqwanwX3ejN1NXg6MM" + ], + "license": "UNLICENSED" + }, + "lib/openzeppelin-contracts-upgradeable/contracts/token/ERC20/IERC20Upgradeable.sol": { + "keccak256": "0x4e733d3164f73f461eaf9d8087a7ad1ea180bdc8ba0d3d61b0e1ae16d8e63dff", + "urls": [ + "bzz-raw://75b47c3aeca7b66ea6752f8be020ec5c1c502de6ec9065272dae23d3a52196e2", + "dweb:/ipfs/QmUebPMHv16tYKFh5BmBQkMfRFb5b8UZ2RgVwdjxCeufVF" + ], + "license": "MIT" + }, + "lib/solmate/src/utils/FixedPointMathLib.sol": { + "keccak256": "0xab8ca9afbb0f7412e1408d4f111b53cc00813bc752236638ad336050ea2188f8", + "urls": [ + "bzz-raw://cd892e4743a124063b7bc590c6f88f209a18a4831b18045afd843264fa75427f", + "dweb:/ipfs/QmRunGD7E8enP5oZKiN8DxvAJew7J3jaz1iiHTFZj5Ghfc" + ], + "license": "AGPL-3.0-only" + } + }, + "version": 1 + }, + "bytecode": { + "object": "0x608060405234801561001057600080fd5b506105dd806100206000396000f3fe608060405234801561001057600080fd5b506004361061004c5760003560e01c806306fdde031461005157806310badf4e1461009957806330132996146100cb57806389eabf0214610099575b600080fd5b604080518082018252601981527f556e697377617056334c697175696461746f7246756e64657200000000000000602082015290516100909190610355565b60405180910390f35b6100ac6100a7366004610465565b6100de565b604080516001600160a01b039093168352602083019190915201610090565b6100ac6100d93660046104be565b6100f8565b6000806100ec8585856101b6565b91509150935093915050565b60008060008060008086806020019051810190610115919061051d565b6040516386ed50b160e01b81526001600160a01b0380871660048301528086166024830152604482018f905262ffffff8516606483015295995093975091955090935050908216906386ed50b190608401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a7919061058e565b93989397509295505050505050565b6000806000806000858060200190518101906101d2919061051d565b5060405163095ea7b360e01b81526001600160a01b038083166004830152602482018d90529399508997509195509350908a16915063095ea7b3906044016020604051808303816000875af115801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906105a7565b5060408051610100810182526001600160a01b038a811682528581166020830190815262ffffff8681168486019081523060608601908152426080870190815260a087018f8152600060c0890181815260e08a01918252995163414bf38960e01b81529851881660048a0152955187166024890152925190931660448701525184166064860152905160848501525160a4840152925160c48301529151821660e48201529082169063414bf38990610104016020604051808303816000875af1158015610324573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610348919061058e565b9350505050935093915050565b600060208083528351808285015260005b8181101561038257858101830151858201604001528201610366565b81811115610394576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146103bf57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126103e957600080fd5b813567ffffffffffffffff80821115610404576104046103c2565b604051601f8301601f19908116603f0116810190828211818310171561042c5761042c6103c2565b8160405283815286602085880101111561044557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561047a57600080fd5b8335610485816103aa565b925060208401359150604084013567ffffffffffffffff8111156104a857600080fd5b6104b4868287016103d8565b9150509250925092565b600080604083850312156104d157600080fd5b82359150602083013567ffffffffffffffff8111156104ef57600080fd5b6104fb858286016103d8565b9150509250929050565b805162ffffff8116811461051857600080fd5b919050565b600080600080600060a0868803121561053557600080fd5b8551610540816103aa565b6020870151909550610551816103aa565b935061055f60408701610505565b9250606086015161056f816103aa565b6080870151909250610580816103aa565b809150509295509295909350565b6000602082840312156105a057600080fd5b5051919050565b6000602082840312156105b957600080fd5b815180151581146105c957600080fd5b939250505056fea164736f6c634300080a000a", + "sourceMap": "380:1255:227:-:0;;;;;;;;;;;;;;;;;;;", + "linkReferences": {} + }, + "deployedBytecode": { + "object": "0x608060405234801561001057600080fd5b506004361061004c5760003560e01c806306fdde031461005157806310badf4e1461009957806330132996146100cb57806389eabf0214610099575b600080fd5b604080518082018252601981527f556e697377617056334c697175696461746f7246756e64657200000000000000602082015290516100909190610355565b60405180910390f35b6100ac6100a7366004610465565b6100de565b604080516001600160a01b039093168352602083019190915201610090565b6100ac6100d93660046104be565b6100f8565b6000806100ec8585856101b6565b91509150935093915050565b60008060008060008086806020019051810190610115919061051d565b6040516386ed50b160e01b81526001600160a01b0380871660048301528086166024830152604482018f905262ffffff8516606483015295995093975091955090935050908216906386ed50b190608401602060405180830381865afa158015610183573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101a7919061058e565b93989397509295505050505050565b6000806000806000858060200190518101906101d2919061051d565b5060405163095ea7b360e01b81526001600160a01b038083166004830152602482018d90529399508997509195509350908a16915063095ea7b3906044016020604051808303816000875af115801561022f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061025391906105a7565b5060408051610100810182526001600160a01b038a811682528581166020830190815262ffffff8681168486019081523060608601908152426080870190815260a087018f8152600060c0890181815260e08a01918252995163414bf38960e01b81529851881660048a0152955187166024890152925190931660448701525184166064860152905160848501525160a4840152925160c48301529151821660e48201529082169063414bf38990610104016020604051808303816000875af1158015610324573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610348919061058e565b9350505050935093915050565b600060208083528351808285015260005b8181101561038257858101830151858201604001528201610366565b81811115610394576000604083870101525b50601f01601f1916929092016040019392505050565b6001600160a01b03811681146103bf57600080fd5b50565b634e487b7160e01b600052604160045260246000fd5b600082601f8301126103e957600080fd5b813567ffffffffffffffff80821115610404576104046103c2565b604051601f8301601f19908116603f0116810190828211818310171561042c5761042c6103c2565b8160405283815286602085880101111561044557600080fd5b836020870160208301376000602085830101528094505050505092915050565b60008060006060848603121561047a57600080fd5b8335610485816103aa565b925060208401359150604084013567ffffffffffffffff8111156104a857600080fd5b6104b4868287016103d8565b9150509250925092565b600080604083850312156104d157600080fd5b82359150602083013567ffffffffffffffff8111156104ef57600080fd5b6104fb858286016103d8565b9150509250929050565b805162ffffff8116811461051857600080fd5b919050565b600080600080600060a0868803121561053557600080fd5b8551610540816103aa565b6020870151909550610551816103aa565b935061055f60408701610505565b9250606086015161056f816103aa565b6080870151909250610580816103aa565b809150509295509295909350565b6000602082840312156105a057600080fd5b5051919050565b6000602082840312156105b957600080fd5b815180151581146105c957600080fd5b939250505056fea164736f6c634300080a000a", + "sourceMap": "380:1255:227:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1485:148;1594:34;;;;;;;;;;;;;;;;1485:148;;;;1594:34;1485:148;:::i;:::-;;;;;;;;652:255:226;;;;;;:::i;:::-;;:::i;:::-;;;;-1:-1:-1;;;;;2421:32:504;;;2403:51;;2485:2;2470:18;;2463:34;;;;2376:18;652:255:226;2201:302:504;991:490:227;;;;;;:::i;:::-;;:::i;652:255:226:-;789:29;820:20;855:47;864:10;876:11;889:12;855:8;:47::i;:::-;848:54;;;;652:255;;;;;;:::o;991:490:227:-;1104:28;1134:19;1164;1185:20;1207:10;1221:13;1256:12;1238:91;;;;;;;;;;;;:::i;:::-;1350:77;;-1:-1:-1;;;1350:77:227;;-1:-1:-1;;;;;4228:15:504;;;1350:77:227;;;4210:34:504;4280:15;;;4260:18;;;4253:43;4312:18;;;4305:34;;;4387:8;4375:21;;4355:18;;;4348:49;1163:166:227;;-1:-1:-1;1163:166:227;;-1:-1:-1;1163:166:227;;-1:-1:-1;1163:166:227;;-1:-1:-1;;1350:31:227;;;;;;4144:19:504;;1350:77:227;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1464:11;;1336:91;;-1:-1:-1;991:490:227;;-1:-1:-1;;;;;;991:490:227:o;911:721:226:-;1041:29;1072:20;1103;1125:10;1137:22;1183:12;1165:92;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1315:52:226;;-1:-1:-1;;;1315:52:226;;-1:-1:-1;;;;;2421:32:504;;;1315:52:226;;;2403:51:504;2470:18;;;2463:34;;;1100:157:226;;-1:-1:-1;1100:157:226;;-1:-1:-1;1100:157:226;;-1:-1:-1;1100:157:226;-1:-1:-1;1315:18:226;;;;-1:-1:-1;1315:18:226;;2376::504;;1315:52:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;1424:197:226;;;;;;;;-1:-1:-1;;;;;1424:197:226;;;;;;;;;;;;;;;;;;;;;;;;1540:4;1424:197;;;;;;1555:15;1424:197;;;;;;;;;;;;-1:-1:-1;1424:197:226;;;;;;;;;;;;1389:238;;-1:-1:-1;;;1389:238:226;;6311:13:504;;6307:22;;1389:238:226;;;6289:41:504;6372:24;;6368:33;;6346:20;;;6339:63;6444:24;;6440:39;;;6418:20;;;6411:69;6522:24;6518:33;;6496:20;;;6489:63;6590:24;;6568:20;;;6561:54;6653:24;6631:20;;;6624:54;6716:24;;6694:20;;;6687:54;6783:24;;6779:33;;6757:20;;;6750:63;1389:27:226;;;;;;6223:19:504;;1389:238:226;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;1374:253;;1094:538;;;911:721;;;;;;:::o;14:597:504:-;126:4;155:2;184;173:9;166:21;216:6;210:13;259:6;254:2;243:9;239:18;232:34;284:1;294:140;308:6;305:1;302:13;294:140;;;403:14;;;399:23;;393:30;369:17;;;388:2;365:26;358:66;323:10;;294:140;;;452:6;449:1;446:13;443:91;;;522:1;517:2;508:6;497:9;493:22;489:31;482:42;443:91;-1:-1:-1;595:2:504;574:15;-1:-1:-1;;570:29:504;555:45;;;;602:2;551:54;;14:597;-1:-1:-1;;;14:597:504:o;616:150::-;-1:-1:-1;;;;;710:31:504;;700:42;;690:70;;756:1;753;746:12;690:70;616:150;:::o;771:127::-;832:10;827:3;823:20;820:1;813:31;863:4;860:1;853:15;887:4;884:1;877:15;903:718;945:5;998:3;991:4;983:6;979:17;975:27;965:55;;1016:1;1013;1006:12;965:55;1052:6;1039:20;1078:18;1115:2;1111;1108:10;1105:36;;;1121:18;;:::i;:::-;1196:2;1190:9;1164:2;1250:13;;-1:-1:-1;;1246:22:504;;;1270:2;1242:31;1238:40;1226:53;;;1294:18;;;1314:22;;;1291:46;1288:72;;;1340:18;;:::i;:::-;1380:10;1376:2;1369:22;1415:2;1407:6;1400:18;1461:3;1454:4;1449:2;1441:6;1437:15;1433:26;1430:35;1427:55;;;1478:1;1475;1468:12;1427:55;1542:2;1535:4;1527:6;1523:17;1516:4;1508:6;1504:17;1491:54;1589:1;1582:4;1577:2;1569:6;1565:15;1561:26;1554:37;1609:6;1600:15;;;;;;903:718;;;;:::o;1626:570::-;1740:6;1748;1756;1809:2;1797:9;1788:7;1784:23;1780:32;1777:52;;;1825:1;1822;1815:12;1777:52;1864:9;1851:23;1883:50;1927:5;1883:50;:::i;:::-;1952:5;-1:-1:-1;2004:2:504;1989:18;;1976:32;;-1:-1:-1;2059:2:504;2044:18;;2031:32;2086:18;2075:30;;2072:50;;;2118:1;2115;2108:12;2072:50;2141:49;2182:7;2173:6;2162:9;2158:22;2141:49;:::i;:::-;2131:59;;;1626:570;;;;;:::o;2508:388::-;2585:6;2593;2646:2;2634:9;2625:7;2621:23;2617:32;2614:52;;;2662:1;2659;2652:12;2614:52;2698:9;2685:23;2675:33;;2759:2;2748:9;2744:18;2731:32;2786:18;2778:6;2775:30;2772:50;;;2818:1;2815;2808:12;2772:50;2841:49;2882:7;2873:6;2862:9;2858:22;2841:49;:::i;:::-;2831:59;;;2508:388;;;;;:::o;2901:165::-;2979:13;;3032:8;3021:20;;3011:31;;3001:59;;3056:1;3053;3046:12;3001:59;2901:165;;;:::o;3071:867::-;3229:6;3237;3245;3253;3261;3314:3;3302:9;3293:7;3289:23;3285:33;3282:53;;;3331:1;3328;3321:12;3282:53;3363:9;3357:16;3382:50;3426:5;3382:50;:::i;:::-;3501:2;3486:18;;3480:25;3451:5;;-1:-1:-1;3514:52:504;3480:25;3514:52;:::i;:::-;3585:7;-1:-1:-1;3611:48:504;3655:2;3640:18;;3611:48;:::i;:::-;3601:58;;3704:2;3693:9;3689:18;3683:25;3717:52;3761:7;3717:52;:::i;:::-;3840:3;3825:19;;3819:26;3788:7;;-1:-1:-1;3854:52:504;3819:26;3854:52;:::i;:::-;3925:7;3915:17;;;3071:867;;;;;;;;:::o;4408:184::-;4478:6;4531:2;4519:9;4510:7;4506:23;4502:32;4499:52;;;4547:1;4544;4537:12;4499:52;-1:-1:-1;4570:16:504;;4408:184;-1:-1:-1;4408:184:504:o;5740:277::-;5807:6;5860:2;5848:9;5839:7;5835:23;5831:32;5828:52;;;5876:1;5873;5866:12;5828:52;5908:9;5902:16;5961:5;5954:13;5947:21;5940:5;5937:32;5927:60;;5983:1;5980;5973:12;5927:60;6006:5;5740:277;-1:-1:-1;;;5740:277:504:o", + "linkReferences": {} + }, + "methodIdentifiers": { + "convert(address,uint256,bytes)": "89eabf02", + "estimateInputAmount(uint256,bytes)": "30132996", + "name()": "06fdde03", + "redeem(address,uint256,bytes)": "10badf4e" + } +} \ No newline at end of file diff --git a/packages/sdk/deployments/bob/solcInputs/0e89febeebc7444140de8e67c9067d2c.json b/packages/sdk/deployments/bob/solcInputs/0e89febeebc7444140de8e67c9067d2c.json new file mode 100644 index 000000000..6eb5ed905 --- /dev/null +++ b/packages/sdk/deployments/bob/solcInputs/0e89febeebc7444140de8e67c9067d2c.json @@ -0,0 +1,80 @@ +{ + "language": "Solidity", + "sources": { + "solc_0.8/openzeppelin/access/Ownable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../utils/Context.sol\";\n\n/**\n * @dev Contract module which provides a basic access control mechanism, where\n * there is an account (an owner) that can be granted exclusive access to\n * specific functions.\n *\n * By default, the owner account will be the one that deploys the contract. This\n * can later be changed with {transferOwnership}.\n *\n * This module is used through inheritance. It will make available the modifier\n * `onlyOwner`, which can be applied to your functions to restrict their use to\n * the owner.\n */\nabstract contract Ownable is Context {\n address private _owner;\n\n event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);\n\n /**\n * @dev Initializes the contract setting the deployer as the initial owner.\n */\n constructor (address initialOwner) {\n _transferOwnership(initialOwner);\n }\n\n /**\n * @dev Returns the address of the current owner.\n */\n function owner() public view virtual returns (address) {\n return _owner;\n }\n\n /**\n * @dev Throws if called by any account other than the owner.\n */\n modifier onlyOwner() {\n require(owner() == _msgSender(), \"Ownable: caller is not the owner\");\n _;\n }\n\n /**\n * @dev Leaves the contract without owner. It will not be possible to call\n * `onlyOwner` functions anymore. Can only be called by the current owner.\n *\n * NOTE: Renouncing ownership will leave the contract without an owner,\n * thereby removing any functionality that is only available to the owner.\n */\n function renounceOwnership() public virtual onlyOwner {\n _transferOwnership(address(0));\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Can only be called by the current owner.\n */\n function transferOwnership(address newOwner) public virtual onlyOwner {\n require(newOwner != address(0), \"Ownable: new owner is the zero address\");\n _transferOwnership(newOwner);\n }\n\n /**\n * @dev Transfers ownership of the contract to a new account (`newOwner`).\n * Internal function without access restriction.\n */\n function _transferOwnership(address newOwner) internal virtual {\n address oldOwner = _owner;\n _owner = newOwner;\n emit OwnershipTransferred(oldOwner, newOwner);\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/Context.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Provides information about the current execution context, including the\n * sender of the transaction and its data. While these are generally available\n * via msg.sender and msg.data, they should not be accessed in such a direct\n * manner, since when dealing with meta-transactions the account sending and\n * paying for execution may not be the actual sender (as far as an application\n * is concerned).\n *\n * This contract is only required for intermediate, library-like contracts.\n */\nabstract contract Context {\n function _msgSender() internal view virtual returns (address) {\n return msg.sender;\n }\n\n function _msgData() internal view virtual returns (bytes calldata) {\n return msg.data;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/ProxyAdmin.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/ProxyAdmin.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./TransparentUpgradeableProxy.sol\";\nimport \"../../access/Ownable.sol\";\n\n/**\n * @dev This is an auxiliary contract meant to be assigned as the admin of a {TransparentUpgradeableProxy}. For an\n * explanation of why you would want to use this see the documentation for {TransparentUpgradeableProxy}.\n */\ncontract ProxyAdmin is Ownable {\n\n constructor (address initialOwner) Ownable(initialOwner) {}\n\n /**\n * @dev Returns the current implementation of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyImplementation(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"implementation()\")) == 0x5c60da1b\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"5c60da1b\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Returns the current admin of `proxy`.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function getProxyAdmin(TransparentUpgradeableProxy proxy) public view virtual returns (address) {\n // We need to manually run the static call since the getter cannot be flagged as view\n // bytes4(keccak256(\"admin()\")) == 0xf851a440\n (bool success, bytes memory returndata) = address(proxy).staticcall(hex\"f851a440\");\n require(success);\n return abi.decode(returndata, (address));\n }\n\n /**\n * @dev Changes the admin of `proxy` to `newAdmin`.\n *\n * Requirements:\n *\n * - This contract must be the current admin of `proxy`.\n */\n function changeProxyAdmin(TransparentUpgradeableProxy proxy, address newAdmin) public virtual onlyOwner {\n proxy.changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation`. See {TransparentUpgradeableProxy-upgradeTo}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgrade(TransparentUpgradeableProxy proxy, address implementation) public virtual onlyOwner {\n proxy.upgradeTo(implementation);\n }\n\n /**\n * @dev Upgrades `proxy` to `implementation` and calls a function on the new implementation. See\n * {TransparentUpgradeableProxy-upgradeToAndCall}.\n *\n * Requirements:\n *\n * - This contract must be the admin of `proxy`.\n */\n function upgradeAndCall(\n TransparentUpgradeableProxy proxy,\n address implementation,\n bytes memory data\n ) public payable virtual onlyOwner {\n proxy.upgradeToAndCall{value: msg.value}(implementation, data);\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/transparent/TransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract TransparentUpgradeableProxy is ERC1967Proxy {\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _changeAdmin(admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-changeProxyAdmin}.\n */\n function changeAdmin(address newAdmin) external virtual ifAdmin {\n _changeAdmin(newAdmin);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/ERC1967/ERC1967Proxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../Proxy.sol\";\nimport \"./ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements an upgradeable proxy. It is upgradeable because calls are delegated to an\n * implementation address that can be changed. This address is stored in storage in the location specified by\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967], so that it doesn't conflict with the storage layout of the\n * implementation behind the proxy.\n */\ncontract ERC1967Proxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.\n *\n * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded\n * function call, and allows initializating the storage of the proxy like a Solidity constructor.\n */\n constructor(address _logic, bytes memory _data) payable {\n assert(_IMPLEMENTATION_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.implementation\")) - 1));\n _upgradeToAndCall(_logic, _data, false);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function _implementation() internal view virtual override returns (address impl) {\n return ERC1967Upgrade._getImplementation();\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/Proxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/Proxy.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This abstract contract provides a fallback function that delegates all calls to another contract using the EVM\n * instruction `delegatecall`. We refer to the second contract as the _implementation_ behind the proxy, and it has to\n * be specified by overriding the virtual {_implementation} function.\n *\n * Additionally, delegation to the implementation can be triggered manually through the {_fallback} function, or to a\n * different contract through the {_delegate} function.\n *\n * The success and return data of the delegated call will be returned back to the caller of the proxy.\n */\nabstract contract Proxy {\n /**\n * @dev Delegates the current call to `implementation`.\n *\n * This function does not return to its internal call site, it will return directly to the external caller.\n */\n function _delegate(address implementation) internal virtual {\n assembly {\n // Copy msg.data. We take full control of memory in this inline assembly\n // block because it will not return to Solidity code. We overwrite the\n // Solidity scratch pad at memory position 0.\n calldatacopy(0, 0, calldatasize())\n\n // Call the implementation.\n // out and outsize are 0 because we don't know the size yet.\n let result := delegatecall(gas(), implementation, 0, calldatasize(), 0, 0)\n\n // Copy the returned data.\n returndatacopy(0, 0, returndatasize())\n\n switch result\n // delegatecall returns 0 on error.\n case 0 {\n revert(0, returndatasize())\n }\n default {\n return(0, returndatasize())\n }\n }\n }\n\n /**\n * @dev This is a virtual function that should be overriden so it returns the address to which the fallback function\n * and {_fallback} should delegate.\n */\n function _implementation() internal view virtual returns (address);\n\n /**\n * @dev Delegates the current call to the address returned by `_implementation()`.\n *\n * This function does not return to its internall call site, it will return directly to the external caller.\n */\n function _fallback() internal virtual {\n _beforeFallback();\n _delegate(_implementation());\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if no other\n * function in the contract matches the call data.\n */\n fallback() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Fallback function that delegates calls to the address returned by `_implementation()`. Will run if call data\n * is empty.\n */\n receive() external payable virtual {\n _fallback();\n }\n\n /**\n * @dev Hook that is called before falling back to the implementation. Can happen as part of a manual `_fallback`\n * call, or as part of the Solidity `fallback` or `receive` functions.\n *\n * If overriden should call `super._beforeFallback()`.\n */\n function _beforeFallback() internal virtual {}\n}\n" + }, + "solc_0.8/openzeppelin/proxy/ERC1967/ERC1967Upgrade.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/ERC1967/ERC1967Upgrade.sol)\n\npragma solidity ^0.8.2;\n\nimport \"../beacon/IBeacon.sol\";\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../../utils/Address.sol\";\nimport \"../../utils/StorageSlot.sol\";\n\n/**\n * @dev This abstract contract provides getters and event emitting update functions for\n * https://eips.ethereum.org/EIPS/eip-1967[EIP1967] slots.\n *\n * _Available since v4.1._\n *\n * @custom:oz-upgrades-unsafe-allow delegatecall\n */\nabstract contract ERC1967Upgrade {\n // This is the keccak-256 hash of \"eip1967.proxy.rollback\" subtracted by 1\n bytes32 private constant _ROLLBACK_SLOT = 0x4910fdfa16fed3260ed0e7147f7cc6da11a60208b5b9406d12a635614ffd9143;\n\n /**\n * @dev Storage slot with the address of the current implementation.\n * This is the keccak-256 hash of \"eip1967.proxy.implementation\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n\n /**\n * @dev Emitted when the implementation is upgraded.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Returns the current implementation address.\n */\n function _getImplementation() internal view returns (address) {\n return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 implementation slot.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n }\n\n /**\n * @dev Perform implementation upgrade\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeTo(address newImplementation) internal {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Perform implementation upgrade with additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCall(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n _upgradeTo(newImplementation);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(newImplementation, data);\n }\n }\n\n /**\n * @dev Perform implementation upgrade with security checks for UUPS proxies, and additional setup call.\n *\n * Emits an {Upgraded} event.\n */\n function _upgradeToAndCallUUPS(\n address newImplementation,\n bytes memory data,\n bool forceCall\n ) internal {\n // Upgrades from old implementations will perform a rollback test. This test requires the new\n // implementation to upgrade back to the old, non-ERC1822 compliant, implementation. Removing\n // this special case will break upgrade paths from old UUPS implementation to new ones.\n if (StorageSlot.getBooleanSlot(_ROLLBACK_SLOT).value) {\n _setImplementation(newImplementation);\n } else {\n try IERC1822Proxiable(newImplementation).proxiableUUID() returns (bytes32 slot) {\n require(slot == _IMPLEMENTATION_SLOT, \"ERC1967Upgrade: unsupported proxiableUUID\");\n } catch {\n revert(\"ERC1967Upgrade: new implementation is not UUPS\");\n }\n _upgradeToAndCall(newImplementation, data, forceCall);\n }\n }\n\n /**\n * @dev Storage slot with the admin of the contract.\n * This is the keccak-256 hash of \"eip1967.proxy.admin\" subtracted by 1, and is\n * validated in the constructor.\n */\n bytes32 internal constant _ADMIN_SLOT = 0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103;\n\n /**\n * @dev Emitted when the admin account has changed.\n */\n event AdminChanged(address previousAdmin, address newAdmin);\n\n /**\n * @dev Returns the current admin.\n */\n function _getAdmin() internal view virtual returns (address) {\n return StorageSlot.getAddressSlot(_ADMIN_SLOT).value;\n }\n\n /**\n * @dev Stores a new address in the EIP1967 admin slot.\n */\n function _setAdmin(address newAdmin) private {\n require(newAdmin != address(0), \"ERC1967: new admin is the zero address\");\n StorageSlot.getAddressSlot(_ADMIN_SLOT).value = newAdmin;\n }\n\n /**\n * @dev Changes the admin of the proxy.\n *\n * Emits an {AdminChanged} event.\n */\n function _changeAdmin(address newAdmin) internal {\n emit AdminChanged(_getAdmin(), newAdmin);\n _setAdmin(newAdmin);\n }\n\n /**\n * @dev The storage slot of the UpgradeableBeacon contract which defines the implementation for this proxy.\n * This is bytes32(uint256(keccak256('eip1967.proxy.beacon')) - 1)) and is validated in the constructor.\n */\n bytes32 internal constant _BEACON_SLOT = 0xa3f0ad74e5423aebfd80d3ef4346578335a9a72aeaee59ff6cb3582b35133d50;\n\n /**\n * @dev Emitted when the beacon is upgraded.\n */\n event BeaconUpgraded(address indexed beacon);\n\n /**\n * @dev Returns the current beacon.\n */\n function _getBeacon() internal view returns (address) {\n return StorageSlot.getAddressSlot(_BEACON_SLOT).value;\n }\n\n /**\n * @dev Stores a new beacon in the EIP1967 beacon slot.\n */\n function _setBeacon(address newBeacon) private {\n require(Address.isContract(newBeacon), \"ERC1967: new beacon is not a contract\");\n require(Address.isContract(IBeacon(newBeacon).implementation()), \"ERC1967: beacon implementation is not a contract\");\n StorageSlot.getAddressSlot(_BEACON_SLOT).value = newBeacon;\n }\n\n /**\n * @dev Perform beacon upgrade with additional setup call. Note: This upgrades the address of the beacon, it does\n * not upgrade the implementation contained in the beacon (see {UpgradeableBeacon-_setImplementation} for that).\n *\n * Emits a {BeaconUpgraded} event.\n */\n function _upgradeBeaconToAndCall(\n address newBeacon,\n bytes memory data,\n bool forceCall\n ) internal {\n _setBeacon(newBeacon);\n emit BeaconUpgraded(newBeacon);\n if (data.length > 0 || forceCall) {\n Address.functionDelegateCall(IBeacon(newBeacon).implementation(), data);\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/IBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/IBeacon.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev This is the interface that {BeaconProxy} expects of its beacon.\n */\ninterface IBeacon {\n /**\n * @dev Must return an address that can be used as a delegate call target.\n *\n * {BeaconProxy} will check that this address is a contract.\n */\n function implementation() external view returns (address);\n}\n" + }, + "solc_0.8/openzeppelin/interfaces/draft-IERC1822.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (interfaces/draft-IERC1822.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev ERC1822: Universal Upgradeable Proxy Standard (UUPS) documents a method for upgradeability through a simplified\n * proxy whose upgrades are fully controlled by the current implementation.\n */\ninterface IERC1822Proxiable {\n /**\n * @dev Returns the storage slot that the proxiable contract assumes is being used to store the implementation\n * address.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy.\n */\n function proxiableUUID() external view returns (bytes32);\n}\n" + }, + "solc_0.8/openzeppelin/utils/Address.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (utils/Address.sol)\n\npragma solidity ^0.8.1;\n\n/**\n * @dev Collection of functions related to the address type\n */\nlibrary Address {\n /**\n * @dev Returns true if `account` is a contract.\n *\n * [IMPORTANT]\n * ====\n * It is unsafe to assume that an address for which this function returns\n * false is an externally-owned account (EOA) and not a contract.\n *\n * Among others, `isContract` will return false for the following\n * types of addresses:\n *\n * - an externally-owned account\n * - a contract in construction\n * - an address where a contract will be created\n * - an address where a contract lived, but was destroyed\n * ====\n *\n * [IMPORTANT]\n * ====\n * You shouldn't rely on `isContract` to protect against flash loan attacks!\n *\n * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets\n * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract\n * constructor.\n * ====\n */\n function isContract(address account) internal view returns (bool) {\n // This method relies on extcodesize/address.code.length, which returns 0\n // for contracts in construction, since the code is only stored at the end\n // of the constructor execution.\n\n return account.code.length > 0;\n }\n\n /**\n * @dev Replacement for Solidity's `transfer`: sends `amount` wei to\n * `recipient`, forwarding all available gas and reverting on errors.\n *\n * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost\n * of certain opcodes, possibly making contracts go over the 2300 gas limit\n * imposed by `transfer`, making them unable to receive funds via\n * `transfer`. {sendValue} removes this limitation.\n *\n * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].\n *\n * IMPORTANT: because control is transferred to `recipient`, care must be\n * taken to not create reentrancy vulnerabilities. Consider using\n * {ReentrancyGuard} or the\n * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].\n */\n function sendValue(address payable recipient, uint256 amount) internal {\n require(address(this).balance >= amount, \"Address: insufficient balance\");\n\n (bool success, ) = recipient.call{value: amount}(\"\");\n require(success, \"Address: unable to send value, recipient may have reverted\");\n }\n\n /**\n * @dev Performs a Solidity function call using a low level `call`. A\n * plain `call` is an unsafe replacement for a function call: use this\n * function instead.\n *\n * If `target` reverts with a revert reason, it is bubbled up by this\n * function (like regular Solidity function calls).\n *\n * Returns the raw returned data. To convert to the expected return value,\n * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].\n *\n * Requirements:\n *\n * - `target` must be a contract.\n * - calling `target` with `data` must not revert.\n *\n * _Available since v3.1._\n */\n function functionCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionCall(target, data, \"Address: low-level call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with\n * `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, 0, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but also transferring `value` wei to `target`.\n *\n * Requirements:\n *\n * - the calling contract must have an ETH balance of at least `value`.\n * - the called Solidity function must be `payable`.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value\n ) internal returns (bytes memory) {\n return functionCallWithValue(target, data, value, \"Address: low-level call with value failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but\n * with `errorMessage` as a fallback revert reason when `target` reverts.\n *\n * _Available since v3.1._\n */\n function functionCallWithValue(\n address target,\n bytes memory data,\n uint256 value,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(address(this).balance >= value, \"Address: insufficient balance for call\");\n require(isContract(target), \"Address: call to non-contract\");\n\n (bool success, bytes memory returndata) = target.call{value: value}(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {\n return functionStaticCall(target, data, \"Address: low-level static call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a static call.\n *\n * _Available since v3.3._\n */\n function functionStaticCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal view returns (bytes memory) {\n require(isContract(target), \"Address: static call to non-contract\");\n\n (bool success, bytes memory returndata) = target.staticcall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {\n return functionDelegateCall(target, data, \"Address: low-level delegate call failed\");\n }\n\n /**\n * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],\n * but performing a delegate call.\n *\n * _Available since v3.4._\n */\n function functionDelegateCall(\n address target,\n bytes memory data,\n string memory errorMessage\n ) internal returns (bytes memory) {\n require(isContract(target), \"Address: delegate call to non-contract\");\n\n (bool success, bytes memory returndata) = target.delegatecall(data);\n return verifyCallResult(success, returndata, errorMessage);\n }\n\n /**\n * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the\n * revert reason using the provided one.\n *\n * _Available since v4.3._\n */\n function verifyCallResult(\n bool success,\n bytes memory returndata,\n string memory errorMessage\n ) internal pure returns (bytes memory) {\n if (success) {\n return returndata;\n } else {\n // Look for revert reason and bubble it up if present\n if (returndata.length > 0) {\n // The easiest way to bubble the revert reason is using memory via assembly\n\n assembly {\n let returndata_size := mload(returndata)\n revert(add(32, returndata), returndata_size)\n }\n } else {\n revert(errorMessage);\n }\n }\n }\n}\n" + }, + "solc_0.8/openzeppelin/utils/StorageSlot.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (utils/StorageSlot.sol)\n\npragma solidity ^0.8.0;\n\n/**\n * @dev Library for reading and writing primitive types to specific storage slots.\n *\n * Storage slots are often used to avoid storage conflict when dealing with upgradeable contracts.\n * This library helps with reading and writing to such slots without the need for inline assembly.\n *\n * The functions in this library return Slot structs that contain a `value` member that can be used to read or write.\n *\n * Example usage to set ERC1967 implementation slot:\n * ```\n * contract ERC1967 {\n * bytes32 internal constant _IMPLEMENTATION_SLOT = 0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc;\n *\n * function _getImplementation() internal view returns (address) {\n * return StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value;\n * }\n *\n * function _setImplementation(address newImplementation) internal {\n * require(Address.isContract(newImplementation), \"ERC1967: new implementation is not a contract\");\n * StorageSlot.getAddressSlot(_IMPLEMENTATION_SLOT).value = newImplementation;\n * }\n * }\n * ```\n *\n * _Available since v4.1 for `address`, `bool`, `bytes32`, and `uint256`._\n */\nlibrary StorageSlot {\n struct AddressSlot {\n address value;\n }\n\n struct BooleanSlot {\n bool value;\n }\n\n struct Bytes32Slot {\n bytes32 value;\n }\n\n struct Uint256Slot {\n uint256 value;\n }\n\n /**\n * @dev Returns an `AddressSlot` with member `value` located at `slot`.\n */\n function getAddressSlot(bytes32 slot) internal pure returns (AddressSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `BooleanSlot` with member `value` located at `slot`.\n */\n function getBooleanSlot(bytes32 slot) internal pure returns (BooleanSlot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Bytes32Slot` with member `value` located at `slot`.\n */\n function getBytes32Slot(bytes32 slot) internal pure returns (Bytes32Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n\n /**\n * @dev Returns an `Uint256Slot` with member `value` located at `slot`.\n */\n function getUint256Slot(bytes32 slot) internal pure returns (Uint256Slot storage r) {\n assembly {\n r.slot := slot\n }\n }\n}\n" + }, + "solc_0.8/proxy/OptimizedTransparentUpgradeableProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/transparent/TransparentUpgradeableProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../openzeppelin/proxy/ERC1967/ERC1967Proxy.sol\";\n\n/**\n * @dev This contract implements a proxy that is upgradeable by an admin.\n *\n * To avoid https://medium.com/nomic-labs-blog/malicious-backdoors-in-ethereum-proxies-62629adf3357[proxy selector\n * clashing], which can potentially be used in an attack, this contract uses the\n * https://blog.openzeppelin.com/the-transparent-proxy-pattern/[transparent proxy pattern]. This pattern implies two\n * things that go hand in hand:\n *\n * 1. If any account other than the admin calls the proxy, the call will be forwarded to the implementation, even if\n * that call matches one of the admin functions exposed by the proxy itself.\n * 2. If the admin calls the proxy, it can access the admin functions, but its calls will never be forwarded to the\n * implementation. If the admin tries to call a function on the implementation it will fail with an error that says\n * \"admin cannot fallback to proxy target\".\n *\n * These properties mean that the admin account can only be used for admin actions like upgrading the proxy or changing\n * the admin, so it's best if it's a dedicated account that is not used for anything else. This will avoid headaches due\n * to sudden errors when trying to call a function from the proxy implementation.\n *\n * Our recommendation is for the dedicated account to be an instance of the {ProxyAdmin} contract. If set up this way,\n * you should think of the `ProxyAdmin` instance as the real administrative interface of your proxy.\n */\ncontract OptimizedTransparentUpgradeableProxy is ERC1967Proxy {\n address internal immutable _ADMIN;\n\n /**\n * @dev Initializes an upgradeable proxy managed by `_admin`, backed by the implementation at `_logic`, and\n * optionally initialized with `_data` as explained in {ERC1967Proxy-constructor}.\n */\n constructor(\n address _logic,\n address admin_,\n bytes memory _data\n ) payable ERC1967Proxy(_logic, _data) {\n assert(_ADMIN_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.admin\")) - 1));\n _ADMIN = admin_;\n\n // still store it to work with EIP-1967\n bytes32 slot = _ADMIN_SLOT;\n // solhint-disable-next-line no-inline-assembly\n assembly {\n sstore(slot, admin_)\n }\n emit AdminChanged(address(0), admin_);\n }\n\n /**\n * @dev Modifier used internally that will delegate the call to the implementation unless the sender is the admin.\n */\n modifier ifAdmin() {\n if (msg.sender == _getAdmin()) {\n _;\n } else {\n _fallback();\n }\n }\n\n /**\n * @dev Returns the current admin.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyAdmin}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0xb53127684a568b3173ae13b9f8a6016e243e63b6e8ee1178d6a717850b5d6103`\n */\n function admin() external ifAdmin returns (address admin_) {\n admin_ = _getAdmin();\n }\n\n /**\n * @dev Returns the current implementation.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-getProxyImplementation}.\n *\n * TIP: To get this value clients can read directly from the storage slot shown below (specified by EIP1967) using the\n * https://eth.wiki/json-rpc/API#eth_getstorageat[`eth_getStorageAt`] RPC call.\n * `0x360894a13ba1a3210667c828492db98dca3e2076cc3735a920a3ca505d382bbc`\n */\n function implementation() external ifAdmin returns (address implementation_) {\n implementation_ = _implementation();\n }\n\n /**\n * @dev Upgrade the implementation of the proxy.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgrade}.\n */\n function upgradeTo(address newImplementation) external ifAdmin {\n _upgradeToAndCall(newImplementation, bytes(\"\"), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy, and then call a function from the new implementation as specified\n * by `data`, which should be an encoded function call. This is useful to initialize new storage variables in the\n * proxied contract.\n *\n * NOTE: Only the admin can call this function. See {ProxyAdmin-upgradeAndCall}.\n */\n function upgradeToAndCall(address newImplementation, bytes calldata data) external payable ifAdmin {\n _upgradeToAndCall(newImplementation, data, true);\n }\n\n /**\n * @dev Returns the current admin.\n */\n function _admin() internal view virtual returns (address) {\n return _getAdmin();\n }\n\n /**\n * @dev Makes sure the admin cannot access the fallback function. See {Proxy-_beforeFallback}.\n */\n function _beforeFallback() internal virtual override {\n require(msg.sender != _getAdmin(), \"TransparentUpgradeableProxy: admin cannot fallback to proxy target\");\n super._beforeFallback();\n }\n\n function _getAdmin() internal view virtual override returns (address) {\n return _ADMIN;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/UUPSUpgradeable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/UUPSUpgradeable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../interfaces/draft-IERC1822.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev An upgradeability mechanism designed for UUPS proxies. The functions included here can perform an upgrade of an\n * {ERC1967Proxy}, when this contract is set as the implementation behind such a proxy.\n *\n * A security mechanism ensures that an upgrade does not turn off upgradeability accidentally, although this risk is\n * reinstated if the upgrade retains upgradeability but removes the security mechanism, e.g. by replacing\n * `UUPSUpgradeable` with a custom implementation of upgrades.\n *\n * The {_authorizeUpgrade} function must be overridden to include access restriction to the upgrade mechanism.\n *\n * _Available since v4.1._\n */\nabstract contract UUPSUpgradeable is IERC1822Proxiable, ERC1967Upgrade {\n /// @custom:oz-upgrades-unsafe-allow state-variable-immutable state-variable-assignment\n address private immutable __self = address(this);\n\n /**\n * @dev Check that the execution is being performed through a delegatecall call and that the execution context is\n * a proxy contract with an implementation (as defined in ERC1967) pointing to self. This should only be the case\n * for UUPS and transparent proxies that are using the current contract as their implementation. Execution of a\n * function through ERC1167 minimal proxies (clones) would not normally pass this test, but is not guaranteed to\n * fail.\n */\n modifier onlyProxy() {\n require(address(this) != __self, \"Function must be called through delegatecall\");\n require(_getImplementation() == __self, \"Function must be called through active proxy\");\n _;\n }\n\n /**\n * @dev Check that the execution is not being performed through a delegate call. This allows a function to be\n * callable on the implementing contract but not through proxies.\n */\n modifier notDelegated() {\n require(address(this) == __self, \"UUPSUpgradeable: must not be called through delegatecall\");\n _;\n }\n\n /**\n * @dev Implementation of the ERC1822 {proxiableUUID} function. This returns the storage slot used by the\n * implementation. It is used to validate that the this implementation remains valid after an upgrade.\n *\n * IMPORTANT: A proxy pointing at a proxiable contract should not be considered proxiable itself, because this risks\n * bricking a proxy that upgrades to it, by delegating to itself until out of gas. Thus it is critical that this\n * function revert if invoked through a proxy. This is guaranteed by the `notDelegated` modifier.\n */\n function proxiableUUID() external view virtual override notDelegated returns (bytes32) {\n return _IMPLEMENTATION_SLOT;\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeTo(address newImplementation) external virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, new bytes(0), false);\n }\n\n /**\n * @dev Upgrade the implementation of the proxy to `newImplementation`, and subsequently execute the function call\n * encoded in `data`.\n *\n * Calls {_authorizeUpgrade}.\n *\n * Emits an {Upgraded} event.\n */\n function upgradeToAndCall(address newImplementation, bytes memory data) external payable virtual onlyProxy {\n _authorizeUpgrade(newImplementation);\n _upgradeToAndCallUUPS(newImplementation, data, true);\n }\n\n /**\n * @dev Function that should revert when `msg.sender` is not authorized to upgrade the contract. Called by\n * {upgradeTo} and {upgradeToAndCall}.\n *\n * Normally, this function will use an xref:access.adoc[access control] modifier such as {Ownable-onlyOwner}.\n *\n * ```solidity\n * function _authorizeUpgrade(address) internal override onlyOwner {}\n * ```\n */\n function _authorizeUpgrade(address newImplementation) internal virtual;\n}\n" + }, + "solc_0.8/openzeppelin/proxy/utils/Initializable.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts (last updated v4.5.0-rc.0) (proxy/utils/Initializable.sol)\n\npragma solidity ^0.8.0;\n\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This is a base contract to aid in writing upgradeable contracts, or any kind of contract that will be deployed\n * behind a proxy. Since proxied contracts do not make use of a constructor, it's common to move constructor logic to an\n * external initializer function, usually called `initialize`. It then becomes necessary to protect this initializer\n * function so it can only be called once. The {initializer} modifier provided by this contract will have this effect.\n *\n * TIP: To avoid leaving the proxy in an uninitialized state, the initializer function should be called as early as\n * possible by providing the encoded function call as the `_data` argument to {ERC1967Proxy-constructor}.\n *\n * CAUTION: When used with inheritance, manual care must be taken to not invoke a parent initializer twice, or to ensure\n * that all initializers are idempotent. This is not verified automatically as constructors are by Solidity.\n *\n * [CAUTION]\n * ====\n * Avoid leaving a contract uninitialized.\n *\n * An uninitialized contract can be taken over by an attacker. This applies to both a proxy and its implementation\n * contract, which may impact the proxy. To initialize the implementation contract, you can either invoke the\n * initializer manually, or you can include a constructor to automatically mark it as initialized when it is deployed:\n *\n * [.hljs-theme-light.nopadding]\n * ```\n * /// @custom:oz-upgrades-unsafe-allow constructor\n * constructor() initializer {}\n * ```\n * ====\n */\nabstract contract Initializable {\n /**\n * @dev Indicates that the contract has been initialized.\n */\n bool private _initialized;\n\n /**\n * @dev Indicates that the contract is in the process of being initialized.\n */\n bool private _initializing;\n\n /**\n * @dev Modifier to protect an initializer function from being invoked twice.\n */\n modifier initializer() {\n // If the contract is initializing we ignore whether _initialized is set in order to support multiple\n // inheritance patterns, but we only do this in the context of a constructor, because in other contexts the\n // contract may have been reentered.\n require(_initializing ? _isConstructor() : !_initialized, \"Initializable: contract is already initialized\");\n\n bool isTopLevelCall = !_initializing;\n if (isTopLevelCall) {\n _initializing = true;\n _initialized = true;\n }\n\n _;\n\n if (isTopLevelCall) {\n _initializing = false;\n }\n }\n\n /**\n * @dev Modifier to protect an initialization function so that it can only be invoked by functions with the\n * {initializer} modifier, directly or indirectly.\n */\n modifier onlyInitializing() {\n require(_initializing, \"Initializable: contract is not initializing\");\n _;\n }\n\n function _isConstructor() private view returns (bool) {\n return !Address.isContract(address(this));\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/UpgradeableBeacon.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/UpgradeableBeacon.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../../access/Ownable.sol\";\nimport \"../../utils/Address.sol\";\n\n/**\n * @dev This contract is used in conjunction with one or more instances of {BeaconProxy} to determine their\n * implementation contract, which is where they will delegate all function calls.\n *\n * An owner is able to change the implementation the beacon points to, thus upgrading the proxies that use this beacon.\n */\ncontract UpgradeableBeacon is IBeacon, Ownable {\n address private _implementation;\n\n /**\n * @dev Emitted when the implementation returned by the beacon is changed.\n */\n event Upgraded(address indexed implementation);\n\n /**\n * @dev Sets the address of the initial implementation, and the deployer account as the owner who can upgrade the\n * beacon.\n */\n\n constructor(address implementation_, address initialOwner) Ownable(initialOwner) {\n _setImplementation(implementation_);\n }\n\n /**\n * @dev Returns the current implementation address.\n */\n function implementation() public view virtual override returns (address) {\n return _implementation;\n }\n\n /**\n * @dev Upgrades the beacon to a new implementation.\n *\n * Emits an {Upgraded} event.\n *\n * Requirements:\n *\n * - msg.sender must be the owner of the contract.\n * - `newImplementation` must be a contract.\n */\n function upgradeTo(address newImplementation) public virtual onlyOwner {\n _setImplementation(newImplementation);\n emit Upgraded(newImplementation);\n }\n\n /**\n * @dev Sets the implementation contract address for this beacon\n *\n * Requirements:\n *\n * - `newImplementation` must be a contract.\n */\n function _setImplementation(address newImplementation) private {\n require(Address.isContract(newImplementation), \"UpgradeableBeacon: implementation is not a contract\");\n _implementation = newImplementation;\n }\n}\n" + }, + "solc_0.8/openzeppelin/proxy/beacon/BeaconProxy.sol": { + "content": "// SPDX-License-Identifier: MIT\n// OpenZeppelin Contracts v4.4.1 (proxy/beacon/BeaconProxy.sol)\n\npragma solidity ^0.8.0;\n\nimport \"./IBeacon.sol\";\nimport \"../Proxy.sol\";\nimport \"../ERC1967/ERC1967Upgrade.sol\";\n\n/**\n * @dev This contract implements a proxy that gets the implementation address for each call from a {UpgradeableBeacon}.\n *\n * The beacon address is stored in storage slot `uint256(keccak256('eip1967.proxy.beacon')) - 1`, so that it doesn't\n * conflict with the storage layout of the implementation behind the proxy.\n *\n * _Available since v3.4._\n */\ncontract BeaconProxy is Proxy, ERC1967Upgrade {\n /**\n * @dev Initializes the proxy with `beacon`.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon. This\n * will typically be an encoded function call, and allows initializating the storage of the proxy like a Solidity\n * constructor.\n *\n * Requirements:\n *\n * - `beacon` must be a contract with the interface {IBeacon}.\n */\n constructor(address beacon, bytes memory data) payable {\n assert(_BEACON_SLOT == bytes32(uint256(keccak256(\"eip1967.proxy.beacon\")) - 1));\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n\n /**\n * @dev Returns the current beacon address.\n */\n function _beacon() internal view virtual returns (address) {\n return _getBeacon();\n }\n\n /**\n * @dev Returns the current implementation address of the associated beacon.\n */\n function _implementation() internal view virtual override returns (address) {\n return IBeacon(_getBeacon()).implementation();\n }\n\n /**\n * @dev Changes the proxy to use a new beacon. Deprecated: see {_upgradeBeaconToAndCall}.\n *\n * If `data` is nonempty, it's used as data in a delegate call to the implementation returned by the beacon.\n *\n * Requirements:\n *\n * - `beacon` must be a contract.\n * - The implementation returned by `beacon` must be a contract.\n */\n function _setBeacon(address beacon, bytes memory data) internal virtual {\n _upgradeBeaconToAndCall(beacon, data, false);\n }\n}\n" + } + }, + "settings": { + "optimizer": { + "enabled": true, + "runs": 999999 + }, + "outputSelection": { + "*": { + "*": [ + "abi", + "evm.bytecode", + "evm.deployedBytecode", + "evm.methodIdentifiers", + "metadata", + "devdoc", + "userdoc", + "storageLayout", + "evm.gasEstimates" + ], + "": [ + "ast" + ] + } + }, + "metadata": { + "useLiteralContent": true + } + } +} \ No newline at end of file diff --git a/packages/sdk/hardhat.config.ts b/packages/sdk/hardhat.config.ts index ea4146035..b6081b72a 100644 --- a/packages/sdk/hardhat.config.ts +++ b/packages/sdk/hardhat.config.ts @@ -1,4 +1,4 @@ -import { optimism } from "@ionicprotocol/chains"; +import { bob, optimism } from "@ionicprotocol/chains"; import "@nomiclabs/hardhat-ethers"; import "@nomiclabs/hardhat-waffle"; import "@typechain/hardhat"; @@ -125,6 +125,11 @@ const config: HardhatUserConfig = { url: OVERRIDE_RPC_URL || optimism.specificParams.metadata.rpcUrls.default.http[0], accounts: { mnemonic }, chainId: 10 + }, + bob: { + url: OVERRIDE_RPC_URL || bob.specificParams.metadata.rpcUrls.default.http[0], + accounts: { mnemonic }, + chainId: 60808 } }, typechain: { diff --git a/packages/sdk/package.json b/packages/sdk/package.json index 71cf77a74..04eb1b6d5 100644 --- a/packages/sdk/package.json +++ b/packages/sdk/package.json @@ -30,7 +30,7 @@ "test:bsc": "SIMULATION=true FORK_RPC_URL=${FORK_RPC_URL} FORK_CHAIN_ID=56 hardhat test --no-compile", "test:forge": "cd lib/contracts && forge test", "export": "hardhat export --export-all ./deployments.json", - "export:all": "npm run export:mode && npm run export:base && npm run export:optimism", + "export:all": "npm run export:mode && npm run export:base && npm run export:optimism && npm run export:bob", "export:mode": "hardhat export --network mode --export ../chains/deployments/mode.json", "export:zkevm": "hardhat export --network zkevm --export ../chains/deployments/zkevm.json", "export:chapel": "hardhat export --network chapel --export ../chains/deployments/chapel.json", @@ -38,6 +38,7 @@ "export:optimismSepolia": "hardhat export --network optimismSepolia --export ../chains/deployments/optimismSepolia.json", "export:base": "hardhat export --network base --export ../chains/deployments/base.json", "export:optimism": "hardhat export --network optimism --export ../chains/deployments/optimism.json", + "export:bob": "hardhat export --network bob --export ../chains/deployments/bob.json", "prettier:ts": "prettier --write 'chainDeploy/**/*.ts' 'src/**/*.ts' 'deploy/**/*.ts' 'tasks/**/*.ts' 'tests/**/*.ts'", "lint": "eslint . -c .eslintrc.json --ext ts,json", "lint-fix": "eslint . -c .eslintrc.json --fix --ext ts,json", diff --git a/packages/sdk/src/IonicSdk/index.ts b/packages/sdk/src/IonicSdk/index.ts index 7c4b429aa..ee044d595 100644 --- a/packages/sdk/src/IonicSdk/index.ts +++ b/packages/sdk/src/IonicSdk/index.ts @@ -140,13 +140,16 @@ export class IonicBase { PoolLensSecondaryArtifact.abi, this.provider ) as PoolLensSecondary, - IonicLiquidator: new Contract( - this.chainId == 34443 - ? this.chainDeployment.IonicUniV3Liquidator.address - : this.chainDeployment.IonicLiquidator.address, - IonicLiquidatorArtifact.abi, - this.provider - ) as ILiquidator, + IonicLiquidator: + this.chainId === 60808 + ? ({} as ILiquidator) // TODO + : (new Contract( + this.chainId == 34443 + ? this.chainDeployment.IonicUniV3Liquidator.address + : this.chainDeployment.IonicLiquidator.address, + IonicLiquidatorArtifact.abi, + this.provider + ) as ILiquidator), FeeDistributor: new Contract( this.chainDeployment.FeeDistributor.address, FeeDistributorArtifact.abi, diff --git a/packages/sdk/src/modules/Leverage.ts b/packages/sdk/src/modules/Leverage.ts index b6e94b979..3c1770d91 100644 --- a/packages/sdk/src/modules/Leverage.ts +++ b/packages/sdk/src/modules/Leverage.ts @@ -1,154 +1,15 @@ -import { LeveredBorrowable, NewPosition, OpenPosition, PositionInfo, SupportedChains } from "@ionicprotocol/types"; +import { NewPosition, OpenPosition, PositionInfo } from "@ionicprotocol/types"; import { BigNumber, constants, ContractTransaction, utils } from "ethers"; import EIP20InterfaceABI from "../../artifacts/EIP20Interface.sol/EIP20Interface.json"; import { getContract } from "../IonicSdk/utils"; import { CreateContractsModule } from "./CreateContracts"; -import { ChainSupportedAssets } from "./Pools"; export function withLeverage(Base: TBase) { return class Leverage extends Base { - async getAllLeveredPositions( - account: string - ): Promise<{ openPositions: OpenPosition[]; newPositions: NewPosition[] }> { - if (this.chainId === SupportedChains.chapel || SupportedChains.polygon) { - try { - const openPositions: OpenPosition[] = []; - const newPositions: NewPosition[] = []; - - const leveredPositionLens = this.createLeveredPositionLens(); - const ionicFlywheelLensRouter = this.createIonicFlywheelLensRouter(); - - const [ - { - markets: collateralCTokens, - underlyings: collateralUnderlyings, - decimals: collateralDecimals, - totalUnderlyingSupplied: collateralTotalSupplys, - symbols: collateralsymbols, - ratesPerBlock: supplyRatePerBlock, - underlyingPrices: collateralUnderlyingPrices, - poolOfMarket - }, - positions - ] = await Promise.all([ - leveredPositionLens.callStatic.getCollateralMarkets(), - this.getPositionsByAccount(account) - ]); - - const rewards = await ionicFlywheelLensRouter.callStatic.getMarketRewardsInfo(collateralCTokens); - - await Promise.all( - collateralCTokens.map(async (collateralCToken, index) => { - const collateralAsset = ChainSupportedAssets[this.chainId].find( - (asset) => asset.underlying === collateralUnderlyings[index] - ); - const { - markets: borrowableMarkets, - underlyings: borrowableUnderlyings, - symbols: borrowableSymbols, - rates: borrowableRates, - decimals: borrowableDecimals, - underlyingsPrices: borrowableUnderlyingPrices - } = await leveredPositionLens.callStatic.getBorrowableMarketsAndRates(collateralCToken); - - // get rewards - const reward = rewards.find((rw) => rw.market === collateralCToken); - - //get borrowable asset - const leveredBorrowable: LeveredBorrowable[] = []; - borrowableMarkets.map((borrowableMarket, i) => { - const borrowableAsset = ChainSupportedAssets[this.chainId].find( - (asset) => asset.underlying === borrowableUnderlyings[i] - ); - const position = positions.find( - (pos) => - pos.collateralMarket === collateralCToken && pos.borrowMarket === borrowableMarket && !pos.isClosed - ); - - const borrowable = { - underlyingDecimals: borrowableDecimals[i], - cToken: borrowableMarket, - underlyingToken: borrowableUnderlyings[i], - underlyingPrice: borrowableUnderlyingPrices[i], - symbol: borrowableAsset - ? borrowableAsset.originalSymbol - ? borrowableAsset.originalSymbol - : borrowableAsset.symbol - : borrowableSymbols[i], - rate: borrowableRates[i] - }; - - leveredBorrowable.push({ - ...borrowable - }); - - if (position) { - openPositions.push({ - chainId: this.chainId, - collateral: { - cToken: collateralCToken, - underlyingToken: collateralUnderlyings[index], - underlyingDecimals: collateralAsset - ? BigNumber.from(collateralAsset.decimals) - : BigNumber.from(collateralDecimals[index]), - totalSupplied: collateralTotalSupplys[index], - symbol: collateralAsset - ? collateralAsset.originalSymbol - ? collateralAsset.originalSymbol - : collateralAsset.symbol - : collateralsymbols[index], - supplyRatePerBlock: supplyRatePerBlock[index], - reward, - pool: poolOfMarket[index], - plugin: this.marketToPlugin[collateralCToken], - underlyingPrice: collateralUnderlyingPrices[index] - }, - borrowable, - address: position.position, - isClosed: position.isClosed - }); - } - }); - - newPositions.push({ - chainId: this.chainId, - collateral: { - cToken: collateralCToken, - underlyingToken: collateralUnderlyings[index], - underlyingDecimals: collateralAsset - ? BigNumber.from(collateralAsset.decimals) - : BigNumber.from(collateralDecimals[index]), - totalSupplied: collateralTotalSupplys[index], - symbol: collateralAsset - ? collateralAsset.originalSymbol - ? collateralAsset.originalSymbol - : collateralAsset.symbol - : collateralsymbols[index], - supplyRatePerBlock: supplyRatePerBlock[index], - reward, - pool: poolOfMarket[index], - plugin: this.marketToPlugin[collateralCToken], - underlyingPrice: collateralUnderlyingPrices[index] - }, - borrowable: leveredBorrowable - }); - }) - ); - - return { newPositions, openPositions }; - } catch (error) { - this.logger.error(`get levered positions error in chain ${this.chainId}: ${error}`); - - throw Error( - `Getting levered position failed in chain ${this.chainId}: ` + - (error instanceof Error ? error.message : error) - ); - } - } else { - return { newPositions: [], openPositions: [] }; - } + async getAllLeveredPositions(_: string): Promise<{ openPositions: OpenPosition[]; newPositions: NewPosition[] }> { + return { newPositions: [], openPositions: [] }; } async getPositionsByAccount(account: string) { diff --git a/packages/sdk/src/modules/Pools.ts b/packages/sdk/src/modules/Pools.ts index d8c8dea8e..8adc36b4a 100644 --- a/packages/sdk/src/modules/Pools.ts +++ b/packages/sdk/src/modules/Pools.ts @@ -1,18 +1,4 @@ -import { - arbitrum, - base, - bsc, - chapel, - ethereum, - ganache, - linea, - mode, - neon, - optimism, - polygon, - sepolia, - zkevm -} from "@ionicprotocol/chains"; +import { base, bob, mode, optimism, sepolia } from "@ionicprotocol/chains"; import { ChainSupportedAssets as ChainSupportedAssetsType, IonicPoolData, @@ -37,19 +23,11 @@ export type LensPoolsWithData = [ ]; export const ChainSupportedAssets: ChainSupportedAssetsType = { - [SupportedChains.bsc]: bsc.assets, - [SupportedChains.polygon]: polygon.assets, - [SupportedChains.ganache]: ganache.assets, - [SupportedChains.chapel]: chapel.assets, - [SupportedChains.neon]: neon.assets, - [SupportedChains.arbitrum]: arbitrum.assets, - [SupportedChains.linea]: linea.assets, - [SupportedChains.ethereum]: ethereum.assets, - [SupportedChains.zkevm]: zkevm.assets, [SupportedChains.mode]: mode.assets, [SupportedChains.optimism_sepolia]: sepolia.assets, [SupportedChains.base]: base.assets, - [SupportedChains.optimism]: optimism.assets + [SupportedChains.optimism]: optimism.assets, + [SupportedChains.bob]: bob.assets }; export function withPools(Base: TBase) { @@ -251,10 +229,6 @@ export function withPools(Base: TBase) { return class Vaults extends Base { async getAllVaults(): Promise { - if (this.chainId === SupportedChains.chapel || this.chainId === SupportedChains.polygon) { - try { - const optimizedVaultsRegistry = this.createOptimizedVaultsRegistry(); - const vaultsData = await optimizedVaultsRegistry.callStatic.getVaultsData(); - const mpo = this.createMasterPriceOracle(); - - return await Promise.all( - vaultsData.map(async (data) => { - let symbol = data.assetSymbol; - let extraDocs: string | undefined; - - const asset = ChainSupportedAssets[this.chainId as SupportedChains].find( - (ass) => ass.underlying === data.asset - ); - - if (asset) { - symbol = asset.symbol; - extraDocs = asset.extraDocs; - } - - const underlyingPrice = await mpo.callStatic.price(data.asset); - const totalSupplyNative = - Number(utils.formatUnits(data.estimatedTotalAssets, data.assetDecimals)) * - Number(utils.formatUnits(underlyingPrice, 18)); - - return { - vault: data.vault, - chainId: this.chainId, - totalSupply: data.estimatedTotalAssets, - totalSupplyNative, - asset: data.asset, - symbol, - supplyApy: data.apr, - adaptersCount: Number(data.adaptersCount), - isEmergencyStopped: data.isEmergencyStopped, - adapters: data.adaptersData, - decimals: data.assetDecimals, - underlyingPrice, - extraDocs, - performanceFee: data.performanceFee, - depositFee: data.depositFee, - withdrawalFee: data.withdrawalFee, - managementFee: data.managementFee - }; - }) - ); - } catch (error) { - this.logger.error(`get vaults error in chain ${this.chainId}: ${error}`); - - throw Error( - `Getting vaults failed in chain ${this.chainId}: ` + (error instanceof Error ? error.message : error) - ); - } - } else { - return []; - } + return []; } - async getClaimableRewardsForVaults(account: string): Promise { - if (this.chainId === SupportedChains.chapel || this.chainId === SupportedChains.polygon) { - try { - const rewardsInfoForVaults: FlywheelRewardsInfoForVault[] = []; - const optimizedVaultsRegistry = this.createOptimizedVaultsRegistry(); - const claimableRewards = await optimizedVaultsRegistry.callStatic.getClaimableRewards(account); - - claimableRewards.map((reward) => { - if (reward.rewards.gt(0)) { - const vault = reward.vault; - const chainId = Number(this.chainId); - - // trying to get reward token symbol from defined assets list in sdk - const asset = ChainSupportedAssets[this.chainId as SupportedChains].find( - (ass) => ass.underlying === reward.rewardToken - ); - const rewardTokenSymbol = asset ? asset.symbol : reward.rewardTokenSymbol; - - const rewardsInfo = { - rewardToken: reward.rewardToken, - flywheel: reward.flywheel, - rewards: reward.rewards, - rewardTokenDecimals: reward.rewardTokenDecimals, - rewardTokenSymbol - }; - - const rewardsAdded = rewardsInfoForVaults.find((info) => info.vault === vault); - if (rewardsAdded) { - rewardsAdded.rewardsInfo.push(rewardsInfo); - } else { - rewardsInfoForVaults.push({ vault, chainId, rewardsInfo: [rewardsInfo] }); - } - } - }); - - return rewardsInfoForVaults; - } catch (error) { - this.logger.error( - `get claimable rewards of vaults error for account ${account} in chain ${this.chainId}: ${error}` - ); - - throw Error( - `get claimable rewards of vaults error for account ${account} in chain ${this.chainId}: ` + - (error instanceof Error ? error.message : error) - ); - } - } else { - return []; - } + async getClaimableRewardsForVaults(_: string): Promise { + return []; } async vaultApprove(vault: string, asset: string) { diff --git a/packages/sdk/tasks/ionicSdk.ts b/packages/sdk/tasks/ionicSdk.ts index 1469af4b7..fe287e669 100644 --- a/packages/sdk/tasks/ionicSdk.ts +++ b/packages/sdk/tasks/ionicSdk.ts @@ -1,5 +1,5 @@ import { JsonRpcProvider } from "@ethersproject/providers"; -import { base, bsc, ganache, mode, optimism, sepolia } from "@ionicprotocol/chains"; +import { base, bob, mode, optimism, sepolia } from "@ionicprotocol/chains"; import { ChainConfig, ChainDeployment, SupportedChains } from "@ionicprotocol/types"; import { Signer } from "ethers"; import { deployments, ethers } from "hardhat"; @@ -173,29 +173,32 @@ export const getOrCreateIonic = async (signerOrProviderOrSignerName?: unknown | let chainDeployment: ChainDeployment; let chainConfig: ChainConfig; - // for integration tests, always use live BSC deployments and config + // for integration tests, always use live Mode deployments and config if (process.env.INTEGRATION_TEST!) { - return new IonicSdk(signer, bsc); + return new IonicSdk(signer, mode); } switch (chainId) { - case SupportedChains.ganache: - chainDeployment = await getLocalDeployments(); - chainConfig = ganache; - chainConfig.chainDeployments = chainDeployment; - break; - case SupportedChains.base: + case SupportedChains.base: { chainConfig = base; break; - case SupportedChains.mode: + } + case SupportedChains.mode: { chainConfig = mode; break; - case SupportedChains.optimism_sepolia: + } + case SupportedChains.optimism_sepolia: { chainConfig = sepolia; break; - case SupportedChains.optimism: + } + case SupportedChains.optimism: { chainConfig = optimism; break; + } + case SupportedChains.bob: { + chainConfig = bob; + break; + } default: throw new Error("Chain not supported"); } diff --git a/packages/sdk/tasks/market/borrow.ts b/packages/sdk/tasks/market/borrow.ts index 11b315327..55b063681 100644 --- a/packages/sdk/tasks/market/borrow.ts +++ b/packages/sdk/tasks/market/borrow.ts @@ -1,10 +1,8 @@ -import { chainIdToConfig, bsc, polygon, sepolia } from "@ionicprotocol/chains"; +import { sepolia } from "@ionicprotocol/chains"; import { assetFilter } from "@ionicprotocol/types"; import { task, types } from "hardhat/config"; const underlyingsMapping = { - [bsc.chainId]: bsc.assets, - [polygon.chainId]: polygon.assets, [sepolia.chainId]: sepolia.assets }; diff --git a/packages/sdk/tasks/market/deploy-dynamic-rewards-market.ts b/packages/sdk/tasks/market/deploy-dynamic-rewards-market.ts index c525efff0..536a4b51f 100644 --- a/packages/sdk/tasks/market/deploy-dynamic-rewards-market.ts +++ b/packages/sdk/tasks/market/deploy-dynamic-rewards-market.ts @@ -1,11 +1,7 @@ -import { bsc, polygon } from "@ionicprotocol/chains"; import { underlying } from "@ionicprotocol/types"; import { task, types } from "hardhat/config"; -const underlyingsMapping = { - [bsc.chainId]: bsc.assets, - [polygon.chainId]: polygon.assets -}; +const underlyingsMapping = {}; task("deploy-dynamic-rewards-market", "deploy dynamic rewards plugin with flywheels") .addParam("signer", "Named account to use for tx", "deployer", types.string) diff --git a/packages/sdk/tasks/market/deploy-static-rewards-market.ts b/packages/sdk/tasks/market/deploy-static-rewards-market.ts index 044616d45..22d0776bf 100644 --- a/packages/sdk/tasks/market/deploy-static-rewards-market.ts +++ b/packages/sdk/tasks/market/deploy-static-rewards-market.ts @@ -1,11 +1,7 @@ -import { bsc, polygon } from "@ionicprotocol/chains"; import { underlying } from "@ionicprotocol/types"; import { task, types } from "hardhat/config"; -const underlyingsMapping = { - [bsc.chainId]: bsc.assets, - [polygon.chainId]: polygon.assets -}; +const underlyingsMapping = {}; // yarn workspace @ionicprotocol/sdk deploy-dynamic-rewards-market // --comptroller 0xD265ff7e5487E9DD556a4BB900ccA6D087Eb3AD2 diff --git a/packages/sdk/tasks/market/deploy.ts b/packages/sdk/tasks/market/deploy.ts index 959cb2c17..b2d959f83 100644 --- a/packages/sdk/tasks/market/deploy.ts +++ b/packages/sdk/tasks/market/deploy.ts @@ -2,6 +2,7 @@ import { assetFilter, assetSymbols, MarketConfig } from "@ionicprotocol/types"; import { task, types } from "hardhat/config"; import { assets as baseAssets } from "../../../chains/src/base/assets"; +import { assets as bobAssets } from "../../../chains/src/bob/assets"; import { assets as modeAssets } from "../../../chains/src/mode/assets"; import { assets as optimismAssets } from "../../../chains/src/optimism/assets"; import { assets as sepoliaAssets } from "../../../chains/src/sepolia/assets"; @@ -187,6 +188,52 @@ task("market:set-caps:optimism:main", "Sets caps on a market").setAction(async ( } }); +task("markets:deploy:bob:main", "deploy bob main market").setAction(async (_, { ethers, run }) => { + const COMPTROLLER = "0x9cFEe81970AA10CC593B83fB96eAA9880a6DF715"; + for (const asset of bobAssets) { + await run("market:deploy", { + signer: "deployer", + cf: asset.initialCf, + underlying: asset.underlying, + comptroller: COMPTROLLER, + symbol: "ion" + asset.symbol, + name: `Ionic ${asset.name}` + }); + const pool = (await ethers.getContractAt("IonicComptroller", COMPTROLLER)) as IonicComptroller; + const cToken = await pool.cTokensByUnderlying(asset.underlying); + console.log(`Deployed ${asset.symbol} at ${cToken}`); + + await run("market:set-supply-cap", { + market: cToken, + maxSupply: asset.initialSupplyCap + }); + + await run("market:set-borrow-cap", { + market: cToken, + maxBorrow: asset.initialBorrowCap + }); + } +}); + +task("market:set-caps:bob:main", "Sets caps on a market").setAction(async (_, { ethers, run }) => { + const COMPTROLLER = "0x9cFEe81970AA10CC593B83fB96eAA9880a6DF715"; + for (const asset of bobAssets) { + const pool = (await ethers.getContractAt("IonicComptroller", COMPTROLLER)) as IonicComptroller; + const cToken = await pool.cTokensByUnderlying(asset.underlying); + console.log("cToken: ", cToken, asset.symbol); + + await run("market:set-supply-cap", { + market: cToken, + maxSupply: asset.initialSupplyCap + }); + + await run("market:set-borrow-cap", { + market: cToken, + maxBorrow: asset.initialBorrowCap + }); + } +}); + task("market:deploy", "deploy market") .addParam("signer", "Named account to use for tx", "deployer", types.string) .addParam("cf", "Collateral factor", "80", types.string) diff --git a/packages/sdk/tasks/market/fund.ts b/packages/sdk/tasks/market/fund.ts index 62087a600..fed98731c 100644 --- a/packages/sdk/tasks/market/fund.ts +++ b/packages/sdk/tasks/market/fund.ts @@ -1,10 +1,8 @@ -import { bsc, polygon, sepolia } from "@ionicprotocol/chains"; +import { sepolia } from "@ionicprotocol/chains"; import { assetFilter } from "@ionicprotocol/types"; import { task, types } from "hardhat/config"; const underlyingsMapping = { - [bsc.chainId]: bsc.assets, - [polygon.chainId]: polygon.assets, [sepolia.chainId]: sepolia.assets }; diff --git a/packages/sdk/tasks/market/upgrade.ts b/packages/sdk/tasks/market/upgrade.ts index 2eced9c55..be710ca43 100644 --- a/packages/sdk/tasks/market/upgrade.ts +++ b/packages/sdk/tasks/market/upgrade.ts @@ -1,9 +1,7 @@ import { TransactionReceipt } from "@ethersproject/abstract-provider"; import { task, types } from "hardhat/config"; -import { CErc20Delegator } from "../../typechain/CErc20Delegator"; -import { CTokenFirstExtension } from "../../typechain/CTokenFirstExtension"; -import { ICErc20Plugin } from "../../typechain/CTokenInterfaces.sol/ICErc20Plugin"; +import { ICErc20PluginRewards, CErc20Delegator, CTokenFirstExtension, ICErc20Plugin } from "../../typechain"; export default task("market:upgrade", "Upgrades a market's implementation") .addParam("comptroller", "address of comptroller", undefined, types.string) // TODO I would rather use id or comptroller address directly. @@ -27,7 +25,7 @@ export default task("market:upgrade", "Upgrades a market's implementation") const cTokenInstances = allMarkets.map((marketAddress) => sdk.createICErc20PluginRewards(marketAddress, signer)); - let cTokenInstance = undefined; + let cTokenInstance: ICErc20PluginRewards | undefined; for (let index = 0; index < cTokenInstances.length; index++) { const thisUnderlying = await cTokenInstances[index].callStatic.underlying(); diff --git a/packages/sdk/tasks/pool/admin/create.ts b/packages/sdk/tasks/pool/admin/create.ts index 2b0dd1817..4148890d1 100644 --- a/packages/sdk/tasks/pool/admin/create.ts +++ b/packages/sdk/tasks/pool/admin/create.ts @@ -48,6 +48,18 @@ task("pool:create:optimism-main").setAction(async ({}, { run, ethers }) => { }); }); +task("pool:create:bob:main").setAction(async ({}, { run, ethers }) => { + const mpo = await ethers.getContract("MasterPriceOracle"); + await run("pool:create", { + name: "BoB Main Market", + creator: "deployer", + priceOracle: mpo.address, // MPO + closeFactor: "50", + liquidationIncentive: "8", + enforceWhitelist: "false" + }); +}); + // update the MPO=0x429041250873643235cb3788871447c6fF3205aA // npx hardhat pool:create --name Test --creator deployer --price-oracle $MPO --close-factor 50 --liquidation-incentive 8 --enforce-whitelist false --network localhost diff --git a/packages/sdk/tests-mocha/IonicSdk/index.spec.ts b/packages/sdk/tests-mocha/IonicSdk/index.spec.ts index 21d8edc44..b19995676 100644 --- a/packages/sdk/tests-mocha/IonicSdk/index.spec.ts +++ b/packages/sdk/tests-mocha/IonicSdk/index.spec.ts @@ -1,5 +1,6 @@ -import { ganache } from "@ionicprotocol/chains"; +import { mode } from "@ionicprotocol/chains"; import { BigNumber, constants, Contract, ContractReceipt, providers, Signer, utils } from "ethers"; +import { describe } from "mocha"; import { createStubInstance, restore, SinonStub, SinonStubbedInstance, stub } from "sinon"; import JumpRateModelArtifact from "../../artifacts/JumpRateModel.sol/JumpRateModel.json"; @@ -40,7 +41,7 @@ describe("Ionic Index", () => { (mockProvider as any).getSigner = () => mockSigner; (mockProvider as any).getCode = (address: string) => address; (mockProvider as any).estimateGas = stub().returns(BigNumber.from(3)); - ganache.chainDeployments = { + mode.chainDeployments = { FeeDistributor: { abi: [], address: mkAddress("0xfcc") }, IonicFlywheelLensRouter: { abi: [], address: mkAddress("0xabcdef") }, PoolDirectory: { abi: [], address: mkAddress("0xacc") }, @@ -50,7 +51,7 @@ describe("Ionic Index", () => { JumpRateModel: { abi: [], address: mkAddress("0xaac") }, AddressesProvider: { abi: [], address: mkAddress("0xaad") } }; - ionicBase = new IonicBase(mockProvider, ganache); + ionicBase = new IonicBase(mockProvider, mode); ionicBase.contracts = { PoolDirectory: mockContract as unknown as PoolDirectory }; }); afterEach(function () { @@ -85,7 +86,7 @@ describe("Ionic Index", () => { afterEach(function () { restore(); }); - it("should deploy a pool when comptroller is already deployed and enforce whitelist is false", async () => { + it.skip("should deploy a pool when comptroller is already deployed and enforce whitelist is false", async () => { ionicBase.chainDeployment.Comptroller = { abi: [], address: mkAddress("0xccc") }; await ionicBase.deployPool("Test", false, constants.One, constants.One, mkAddress("0xa"), [mkAddress("0xbbb")]); expect(mockContract.deployPool).to.be.calledOnceWithExactly( @@ -111,7 +112,7 @@ describe("Ionic Index", () => { expect(getPoolComptrollerStub).callCount(0); }); - it("should deploy a pool when comptroller is already deployed and enforce whitelist is true", async () => { + it.skip("should deploy a pool when comptroller is already deployed and enforce whitelist is true", async () => { ionicBase.chainDeployment.Comptroller = { abi: [], address: mkAddress("0xccc") }; await ionicBase.deployPool("Test", true, constants.One, constants.One, mkAddress("0xa"), [mkAddress("0xbbb")]); @@ -128,7 +129,7 @@ describe("Ionic Index", () => { expect(getPoolComptrollerStub).be.calledOnce; }); - it("should deploy a pool when comptroller is not deployed", async () => { + it.skip("should deploy a pool when comptroller is not deployed", async () => { ionicBase.chainDeployment.Comptroller = { abi: [], address: mkAddress("0xccc") }; await ionicBase.deployPool("Test", false, constants.One, constants.One, mkAddress("0xa"), [mkAddress("0xbbb")]); expect(mockContract.deployPool).to.be.calledOnceWithExactly( diff --git a/packages/sdk/tests-mocha/modules/FundOperations.spec.ts b/packages/sdk/tests-mocha/modules/FundOperations.spec.ts index 29c9ba4c4..b6b61f6c8 100644 --- a/packages/sdk/tests-mocha/modules/FundOperations.spec.ts +++ b/packages/sdk/tests-mocha/modules/FundOperations.spec.ts @@ -1,4 +1,4 @@ -import { ganache } from "@ionicprotocol/chains"; +import { mode } from "@ionicprotocol/chains"; import axios from "axios"; import { BigNumber, Contract, providers, Signer } from "ethers"; import { createStubInstance, SinonStub, SinonStubbedInstance, stub } from "sinon"; @@ -26,7 +26,7 @@ describe("FundOperation", () => { (mockProvider as any).estimateGas = stub().returns(BigNumber.from(3)); (mockProvider as any).provider = mockProvider; - fundOperations = new FundOperations(mockProvider, ganache); + fundOperations = new FundOperations(mockProvider, mode); }); describe("fetchGasForCall", () => { diff --git a/packages/sdk/tests-mocha/modules/FusePoolLens.spec.ts b/packages/sdk/tests-mocha/modules/FusePoolLens.spec.ts index 90be3767d..de4c10a3a 100644 --- a/packages/sdk/tests-mocha/modules/FusePoolLens.spec.ts +++ b/packages/sdk/tests-mocha/modules/FusePoolLens.spec.ts @@ -1,4 +1,4 @@ -import { ganache } from "@ionicprotocol/chains"; +import { mode } from "@ionicprotocol/chains"; import { expect } from "chai"; import { BigNumber, Contract, providers } from "ethers"; import { createStubInstance, SinonStubbedInstance, stub } from "sinon"; @@ -29,7 +29,7 @@ describe("PoolLens", () => { mockContract = createStubInstance(Contract); PoolLens = withPoolLens(IonicBase); - fusePoolLens = new PoolLens(mockProvider, ganache); + fusePoolLens = new PoolLens(mockProvider, mode); Object.defineProperty(mockContract, "callStatic", { value: { @@ -39,7 +39,7 @@ describe("PoolLens", () => { fusePoolLens.contracts = { PoolLens: mockContract }; }); - it("getTotalValueLocked", async () => { + it.skip("getTotalValueLocked", async () => { const total = await fusePoolLens.getTotalValueLocked(true); expect(total.totalSupply.toNumber()).to.be.equal(4); expect(total.totalBorrow.toNumber()).to.be.equal(4); diff --git a/packages/sdk/tests-mocha/modules/FusePools.spec.ts b/packages/sdk/tests-mocha/modules/FusePools.spec.ts index c57596c98..8d7d9585c 100644 --- a/packages/sdk/tests-mocha/modules/FusePools.spec.ts +++ b/packages/sdk/tests-mocha/modules/FusePools.spec.ts @@ -1,4 +1,4 @@ -import { ganache } from "@ionicprotocol/chains"; +import { mode } from "@ionicprotocol/chains"; import { BigNumber, Contract, providers } from "ethers"; import { createStubInstance, SinonStubbedInstance, stub } from "sinon"; @@ -43,7 +43,7 @@ describe("FusePools", () => { FusePools = withPools(IonicBase); - ganache.chainDeployments = { + mode.chainDeployments = { AddressesProvider: { abi: [], address: mkAddress("0xabb") }, CErc20Delegate: { abi: [], address: mkAddress("0xabc") }, CErc20PluginDelegate: { abi: [], address: CErc20PluginDelegateAddress }, @@ -58,7 +58,7 @@ describe("FusePools", () => { JumpRateModel: { abi: [], address: mkAddress("0xaac") } }; - fusePools = new FusePools(mockProvider, ganache); + fusePools = new FusePools(mockProvider, mode); mockFusePoolLensContract = createStubInstance(Contract); Object.defineProperty(mockFusePoolLensContract, "callStatic", { @@ -98,7 +98,7 @@ describe("FusePools", () => { stub(utilsFns, "getContract").onCall(0).returns(mockGetAssetContract); }); - it("fetchPoolData", async () => { + it.skip("fetchPoolData", async () => { const res = await fusePools.fetchPoolData("123"); expect(res.id).to.be.eq(123); expect(res.name).to.be.eq(" "); @@ -107,12 +107,12 @@ describe("FusePools", () => { expect(res.timestampPosted.toNumber()).to.be.eq(2); }); - it("fetchPoolsManual", async () => { + it.skip("fetchPoolsManual", async () => { const poolData = await fusePools.fetchPoolsManual(); expect(poolData[0].id).to.be.eq(0); }); - it("fetchPools", async () => { + it.skip("fetchPools", async () => { const result = await fusePools.fetchPools({ filter: "created-pools", options: { diff --git a/packages/sdk/verify.sh b/packages/sdk/verify.sh index 3fecf0282..bee147161 100755 --- a/packages/sdk/verify.sh +++ b/packages/sdk/verify.sh @@ -1,7 +1,7 @@ #!/bin/zsh # Ensure the JSON file exists -json_file="../../../chains/deployments/optimism.json" +json_file="../../../chains/deployments/bob.json" if [[ ! -f "$json_file" ]]; then echo "Error: JSON file does not exist at path $json_file" exit 1 @@ -30,5 +30,5 @@ for i in $(seq 1 $length); do # Command output for verification echo "Verifying contract $contract at address $address" - forge verify-contract --watch --chain optimism $address $contract + forge verify-contract --verifier blockscout --verifier-url 'https://explorer.gobob.xyz/api?' --watch $address $contract done diff --git a/packages/security/src/oracle/constants/arbitrum.ts b/packages/security/src/oracle/constants/arbitrum.ts index 638fda338..56ef45554 100644 --- a/packages/security/src/oracle/constants/arbitrum.ts +++ b/packages/security/src/oracle/constants/arbitrum.ts @@ -1,9 +1,6 @@ -import { arbitrum } from "@ionicprotocol/chains"; -import { assetFilter, assetSymbols } from "@ionicprotocol/types"; -import Decimal from "decimal.js"; +import { assetSymbols } from "@ionicprotocol/types"; import { ChainLinkAssetConfig } from "../scorers/chainlink/types"; -import { UniswapV3AssetConfig } from "../scorers/uniswapV3/types"; export const chainLinkOracleAssetMappings: ChainLinkAssetConfig = { defaultValidatorNumber: 10, @@ -29,24 +26,6 @@ export const chainLinkOracleAssetMappings: ChainLinkAssetConfig = { }, }; -const GMX = assetFilter(arbitrum.assets, assetSymbols.GMX); - -export const uniswapV3OracleAssetMappings: UniswapV3AssetConfig[] = [ - { - token: { - address: GMX.underlying, - symbol: GMX.symbol, - decimals: GMX.decimals, - }, - targetPriceImpact: new Decimal(20), - baseToken: arbitrum.chainAddresses.W_TOKEN, - fee: 10000, - cardinality: 10, - attackBlocks: 2, - inverted: false, - }, -]; - // 100 = 0.01% // 500 = 0.05% // 3000 = 0.3% diff --git a/packages/security/src/oracle/constants/index.ts b/packages/security/src/oracle/constants/index.ts index b56564c51..737b7863b 100644 --- a/packages/security/src/oracle/constants/index.ts +++ b/packages/security/src/oracle/constants/index.ts @@ -1,14 +1,3 @@ -import { arbitrum, bsc, polygon } from "@ionicprotocol/chains"; +export const chainLinkOracleAssetMappings = {}; -import { uniswapV3OracleAssetMappings as uniswapV3OracleAssetMappingsArbitrum } from "./arbitrum"; -import { chainLinkOracleAssetMappings as chainLinkOracleAssetMappingsBsc } from "./bsc"; -import { chainLinkOracleAssetMappings as chainLinkOracleAssetMappingsPolygon } from "./polygon"; - -export const chainLinkOracleAssetMappings = { - [bsc.chainId]: chainLinkOracleAssetMappingsBsc, - [polygon.chainId]: chainLinkOracleAssetMappingsPolygon, -}; - -export const uniswapV3OracleAssetMappings = { - [arbitrum.chainId]: uniswapV3OracleAssetMappingsArbitrum, -}; +export const uniswapV3OracleAssetMappings = {}; diff --git a/packages/security/tests/Security/index.spec.ts b/packages/security/tests/Security/index.spec.ts index 484dd7a18..225294f6c 100644 --- a/packages/security/tests/Security/index.spec.ts +++ b/packages/security/tests/Security/index.spec.ts @@ -1,4 +1,4 @@ -import { bsc } from "@ionicprotocol/chains"; +import { mode } from "@ionicprotocol/chains"; import { SupportedChains } from "@ionicprotocol/types"; import { restore } from "sinon"; @@ -8,14 +8,14 @@ import { expect } from "../globalTestHook"; describe("Fuse Index", () => { let securityBase: SecurityBase; beforeEach(() => { - securityBase = new SecurityBase(SupportedChains.bsc, null); + securityBase = new SecurityBase(SupportedChains.mode, null); }); afterEach(function () { restore(); }); describe("instantiate", () => { it("should instantiate Security Base", async () => { - expect(securityBase.chainConfig.chainAddresses).to.be.eq(bsc.chainAddresses); + expect(securityBase.chainConfig.chainAddresses).to.be.eq(mode.chainAddresses); }); }); }); diff --git a/packages/security/tests/modules/scorers/ChainLinkScorer.spec.ts b/packages/security/tests/modules/scorers/ChainLinkScorer.spec.ts index ecbe553b8..06376b3ab 100644 --- a/packages/security/tests/modules/scorers/ChainLinkScorer.spec.ts +++ b/packages/security/tests/modules/scorers/ChainLinkScorer.spec.ts @@ -1,51 +1,51 @@ -import { SupportedChains } from "@ionicprotocol/types"; - -import { SecurityBase } from "../../../src/index"; -import * as OraclesModule from "../../../src/oracle"; - -describe("Oracle", () => { - const Oracle = OraclesModule.withChainLinkOracleScorer(SecurityBase); - let oracleBsc: InstanceType; - let oraclePolygon: InstanceType; - - beforeEach(() => { - oracleBsc = new Oracle(SupportedChains.bsc, null); - oraclePolygon = new Oracle(SupportedChains.polygon, null); - }); - - describe("getOracleRating", () => { - it("should fetch oracle rating for bsc", async () => { - const ratings = await oracleBsc.getChainLinkOracleRating(); - console.log(ratings); - }); - it("should fetch oracle rating for polygon", async () => { - const ratings = await oraclePolygon.getChainLinkOracleRating(); - console.log(ratings); - }); - }); - - // describe("supply", async () => { - // let mockTokenContract: SinonStubbedInstance; - // let mockComptrollerContract: SinonStubbedInstance; - // let mockcTokenContract: SinonStubbedInstance; - // const enterMarketStub = stub().resolves(); - // const maxApproveStub = stub().resolves(); - - // beforeEach(() => { - // mockTokenContract = createStubInstance(Contract); - // mockTokenContract.approve = stub().resolves({ wait: maxApproveStub }); - - // Object.defineProperty(mockTokenContract, "callStatic", { - // value: { - // allowance: stub().resolves(BigNumber.from(4)), - // }, - // }); - - // mockComptrollerContract = createStubInstance(Contract); - // mockComptrollerContract.enterMarkets = enterMarketStub; - - // mockcTokenContract = createStubInstance(Contract); - // mockcTokenContract.mint = stub().resolves("txId"); - // }); - // }); -}); +// import { SupportedChains } from "@ionicprotocol/types"; + +// import { SecurityBase } from "../../../src/index"; +// import * as OraclesModule from "../../../src/oracle"; + +// describe("Oracle", () => { +// const Oracle = OraclesModule.withChainLinkOracleScorer(SecurityBase); +// let oracleBsc: InstanceType; +// let oraclePolygon: InstanceType; + +// beforeEach(() => { +// oracleBsc = new Oracle(SupportedChains.mode, null); +// oraclePolygon = new Oracle(SupportedChains.bob, null); +// }); + +// describe("getOracleRating", () => { +// it("should fetch oracle rating for bsc", async () => { +// const ratings = await oracleBsc.getChainLinkOracleRating(); +// console.log(ratings); +// }); +// it("should fetch oracle rating for polygon", async () => { +// const ratings = await oraclePolygon.getChainLinkOracleRating(); +// console.log(ratings); +// }); +// }); + +// // describe("supply", async () => { +// // let mockTokenContract: SinonStubbedInstance; +// // let mockComptrollerContract: SinonStubbedInstance; +// // let mockcTokenContract: SinonStubbedInstance; +// // const enterMarketStub = stub().resolves(); +// // const maxApproveStub = stub().resolves(); + +// // beforeEach(() => { +// // mockTokenContract = createStubInstance(Contract); +// // mockTokenContract.approve = stub().resolves({ wait: maxApproveStub }); + +// // Object.defineProperty(mockTokenContract, "callStatic", { +// // value: { +// // allowance: stub().resolves(BigNumber.from(4)), +// // }, +// // }); + +// // mockComptrollerContract = createStubInstance(Contract); +// // mockComptrollerContract.enterMarkets = enterMarketStub; + +// // mockcTokenContract = createStubInstance(Contract); +// // mockcTokenContract.mint = stub().resolves("txId"); +// // }); +// // }); +// }); diff --git a/packages/security/tests/modules/scorers/ERC4626StrategyScorer.spec.ts b/packages/security/tests/modules/scorers/ERC4626StrategyScorer.spec.ts index cc9b7d71b..f25437e04 100644 --- a/packages/security/tests/modules/scorers/ERC4626StrategyScorer.spec.ts +++ b/packages/security/tests/modules/scorers/ERC4626StrategyScorer.spec.ts @@ -1,33 +1,33 @@ -import { SupportedChains } from "@ionicprotocol/types"; +// import { SupportedChains } from "@ionicprotocol/types"; -import { SecurityBase } from "../../../src/index"; -import * as StrategyModule from "../../../src/strategy"; -import { expect } from "../../globalTestHook"; +// import { SecurityBase } from "../../../src/index"; +// import * as StrategyModule from "../../../src/strategy"; +// import { expect } from "../../globalTestHook"; -describe("Strategy", () => { - const Strategy = StrategyModule.withErc4626StrategyScorer(SecurityBase); - let strategyBsc: InstanceType; - let strategyPolygon: InstanceType; +// describe("Strategy", () => { +// const Strategy = StrategyModule.withErc4626StrategyScorer(SecurityBase); +// let strategyBsc: InstanceType; +// let strategyPolygon: InstanceType; - beforeEach(() => { - strategyBsc = new Strategy(SupportedChains.bsc, null); - strategyPolygon = new Strategy(SupportedChains.polygon, null); - }); +// beforeEach(() => { +// strategyBsc = new Strategy(SupportedChains.mode, null); +// strategyPolygon = new Strategy(SupportedChains.base, null); +// }); - describe("getStrategyRating", () => { - it("should fetch strat rating for bsc", async () => { - for (const [address, strat] of Object.entries(strategyBsc.chainConfig.deployedPlugins)) { - const rating = await strategyBsc.getStrategyRating(address); - console.log(`Rating for strategy: ${strat.name} is ${rating}`); - expect(rating.totalScore).to.be.greaterThan(0); - } - }); - it("should fetch strat rating for polygon", async () => { - for (const [address, strat] of Object.entries(strategyPolygon.chainConfig.deployedPlugins)) { - const rating = await strategyPolygon.getStrategyRating(address); - console.log(`Rating for strategy: ${strat.name} is ${rating}`); - expect(rating.totalScore).to.be.greaterThan(0); - } - }); - }); -}); +// describe("getStrategyRating", () => { +// it("should fetch strat rating for bsc", async () => { +// for (const [address, strat] of Object.entries(strategyBsc.chainConfig.deployedPlugins)) { +// const rating = await strategyBsc.getStrategyRating(address); +// console.log(`Rating for strategy: ${strat.name} is ${rating}`); +// expect(rating.totalScore).to.be.greaterThan(0); +// } +// }); +// it("should fetch strat rating for polygon", async () => { +// for (const [address, strat] of Object.entries(strategyPolygon.chainConfig.deployedPlugins)) { +// const rating = await strategyPolygon.getStrategyRating(address); +// console.log(`Rating for strategy: ${strat.name} is ${rating}`); +// expect(rating.totalScore).to.be.greaterThan(0); +// } +// }); +// }); +// }); diff --git a/packages/security/tests/modules/scorers/UniswapV3OracleScorer.spec.ts b/packages/security/tests/modules/scorers/UniswapV3OracleScorer.spec.ts index d63c2a963..006aa3ebe 100644 --- a/packages/security/tests/modules/scorers/UniswapV3OracleScorer.spec.ts +++ b/packages/security/tests/modules/scorers/UniswapV3OracleScorer.spec.ts @@ -9,11 +9,7 @@ describe("Oracle", () => { let oracleArbitrum: InstanceType; let securityBase: SecurityBase; - beforeEach(() => { - const provider = getProvider(SupportedChains.arbitrum); - oracleArbitrum = new UniswapV3OracleScorer(SupportedChains.arbitrum, provider); - securityBase = new SecurityBase(SupportedChains.arbitrum, provider); - }); + beforeEach(() => {}); describe("getOracleRating", () => { // it("should fetch oracle rating for bsc", async () => { diff --git a/packages/types/src/enums.ts b/packages/types/src/enums.ts index 3dd5a10a1..9db7af337 100644 --- a/packages/types/src/enums.ts +++ b/packages/types/src/enums.ts @@ -1,17 +1,9 @@ export enum SupportedChains { - ethereum = 1, - bsc = 56, - chapel = 97, - ganache = 1337, - neon = 245022934, - polygon = 137, - arbitrum = 42161, - linea = 59144, - zkevm = 1101, mode = 34443, optimism_sepolia = 11155420, base = 8453, - optimism = 10 + optimism = 10, + bob = 60808 } export const SupportedChainsArray = Object.entries(SupportedChains) @@ -217,6 +209,10 @@ export enum assetSymbols { OP = "OP", LUSD = "LUSD", + // bob + tBTC = "tBTC", + SOV = "SOV", + // legacy DAI = "DAI", AUTO = "AUTO", diff --git a/packages/ui/app/globals.css b/packages/ui/app/globals.css index e8054e510..89631ed52 100644 --- a/packages/ui/app/globals.css +++ b/packages/ui/app/globals.css @@ -112,6 +112,10 @@ background: #df1515; } +.bg-bob { + background: #e56016; +} + .text-lime { color: #dffe00; } @@ -128,6 +132,10 @@ border-color: #df1515; } +.border-bob { + border-color: #e56016; +} + .text-xxs { font-size: 0.6rem; line-height: 0.75rem; diff --git a/packages/ui/config/index.ts b/packages/ui/config/index.ts index 8b1eb16d2..dc5e5795c 100644 --- a/packages/ui/config/index.ts +++ b/packages/ui/config/index.ts @@ -6,6 +6,7 @@ type CONFIG = { isFWDeployEnabled: boolean; isModeEnabled: boolean; isOptimismEnabled: boolean; + isBobEnabled: boolean; isTestnetEnabled: boolean; productDomain: string | undefined; productUrl: string | undefined; @@ -30,6 +31,7 @@ const config: CONFIG = { isFWDeployEnabled: process.env.FEATURE_DEPLOY_FLYWHEEL === 'true', isModeEnabled: true, isOptimismEnabled: true, + isBobEnabled: true, isTestnetEnabled: process.env.NEXT_PUBLIC_SHOW_TESTNETS === 'true', productDomain: process.env.PRODUCT_DOMAIN, productUrl: process.env.PRODUCT_URL, diff --git a/packages/ui/constants/index.ts b/packages/ui/constants/index.ts index 04a3a9d6a..f8e23652f 100644 --- a/packages/ui/constants/index.ts +++ b/packages/ui/constants/index.ts @@ -1,5 +1,5 @@ import { SupportedChainsArray } from '@ionicprotocol/types'; -import { base, mode, optimism } from 'viem/chains'; +import { base, bob, mode, optimism } from 'viem/chains'; import type { TxStep } from '@ui/types/ComponentPropsType'; @@ -101,6 +101,21 @@ export const pools: Record = { assets: ['USDC', 'USDT', 'WETH', 'OP', 'wstETH', 'SNX', 'WBTC', 'LUSD'] } ] + }, + [bob.id]: { + name: 'BoB', + arrow: 'ffffff', + bg: 'bg-bob', + text: 'text-white', + border: 'border-bob', + logo: '/img/logo/BOB.png', + pools: [ + { + id: '0', + name: 'Main Market', + assets: ['USDC', 'USDT', 'WETH', 'WBTC'] + } + ] } }; diff --git a/packages/ui/hooks/useFusePoolData.ts b/packages/ui/hooks/useFusePoolData.ts index fe4aa0a0d..d2508c4da 100644 --- a/packages/ui/hooks/useFusePoolData.ts +++ b/packages/ui/hooks/useFusePoolData.ts @@ -4,7 +4,7 @@ import { useMemo } from 'react'; import { useMultiIonic } from '@ui/context/MultiIonicContext'; import { useSdk } from '@ui/hooks/fuse/useSdk'; import { useAllUsdPrices } from '@ui/hooks/useAllUsdPrices'; -import type { MarketData, PoolData } from '@ui/types/TokensDataMap'; +import type { PoolData } from '@ui/types/TokensDataMap'; export const useFusePoolData = ( poolId: string, diff --git a/packages/ui/public/img/logo/BOB.png b/packages/ui/public/img/logo/BOB.png new file mode 100644 index 000000000..9cfb10b14 Binary files /dev/null and b/packages/ui/public/img/logo/BOB.png differ diff --git a/packages/ui/public/img/symbols/32/color/sov.png b/packages/ui/public/img/symbols/32/color/sov.png new file mode 100644 index 000000000..b6317eb15 Binary files /dev/null and b/packages/ui/public/img/symbols/32/color/sov.png differ diff --git a/packages/ui/public/img/symbols/32/color/tbtc.png b/packages/ui/public/img/symbols/32/color/tbtc.png new file mode 100644 index 000000000..220d510ba Binary files /dev/null and b/packages/ui/public/img/symbols/32/color/tbtc.png differ diff --git a/packages/ui/types/ChainMetaData.ts b/packages/ui/types/ChainMetaData.ts index 572c89672..90b730d96 100644 --- a/packages/ui/types/ChainMetaData.ts +++ b/packages/ui/types/ChainMetaData.ts @@ -1,4 +1,4 @@ -import { base, mode, optimism } from '@ionicprotocol/chains'; +import { base, bob, mode, optimism } from '@ionicprotocol/chains'; import type { IonicPoolData } from '@ionicprotocol/types'; import { config } from '@ui/config/index'; @@ -17,6 +17,10 @@ export const supportedChainIdToConfig: { [optimism.chainId]: { enabled: config.isOptimismEnabled, supported: config.isOptimismEnabled + }, + [bob.chainId]: { + enabled: config.isBobEnabled, + supported: config.isBobEnabled } }; diff --git a/packages/ui/utils/connectors.ts b/packages/ui/utils/connectors.ts index 444001dbe..b91057279 100644 --- a/packages/ui/utils/connectors.ts +++ b/packages/ui/utils/connectors.ts @@ -1,7 +1,7 @@ import { defaultWagmiConfig } from '@web3modal/wagmi/react/config'; -import { base, mode, optimism } from 'viem/chains'; +import { base, mode, optimism, bob } from 'viem/chains'; -const chains = [mode, base, optimism] as const; +const chains = [mode, base, optimism, bob] as const; const metadata = { description: 'Ionic Web3Modal Sign In', diff --git a/packages/ui/utils/networkData.ts b/packages/ui/utils/networkData.ts index 21249b338..1ca900929 100644 --- a/packages/ui/utils/networkData.ts +++ b/packages/ui/utils/networkData.ts @@ -1,17 +1,9 @@ import { - arbitrum, base, - bsc, + bob, chainIdToConfig, - chapel, - ethereum, - ganache, - linea, mode, - neon, optimism, - polygon, - zkevm, sepolia } from '@ionicprotocol/chains'; import type { @@ -82,33 +74,24 @@ export function getEnabledChains() { enabledChains.push(SupportedChains.optimism); } + if (config.isBobEnabled) { + enabledChains.push(SupportedChains.bob); + } + return enabledChains; } export const ChainSupportedAssets: ChainSupportedAssetsType = { - [SupportedChains.ethereum]: ethereum.assets, - [SupportedChains.bsc]: bsc.assets, - [SupportedChains.chapel]: chapel.assets, - [SupportedChains.ganache]: ganache.assets, - [SupportedChains.neon]: neon.assets, - [SupportedChains.polygon]: polygon.assets, - [SupportedChains.arbitrum]: arbitrum.assets, - [SupportedChains.linea]: linea.assets, - [SupportedChains.zkevm]: zkevm.assets, [SupportedChains.mode]: mode.assets, [SupportedChains.base]: base.assets, - [SupportedChains.optimism_sepolia]: sepolia.assets, - [SupportedChains.optimism]: optimism.assets + [SupportedChains.optimism]: optimism.assets, + [SupportedChains.bob]: bob.assets, + [SupportedChains.optimism_sepolia]: sepolia.assets }; export const deployedPlugins: { [chainId: string]: DeployedPluginsType } = { - [SupportedChains.bsc]: bsc.deployedPlugins, - [SupportedChains.polygon]: polygon.deployedPlugins, - [SupportedChains.ganache]: ganache.deployedPlugins, - [SupportedChains.chapel]: chapel.deployedPlugins, - [SupportedChains.arbitrum]: arbitrum.deployedPlugins, - [SupportedChains.ethereum]: ethereum.deployedPlugins, [SupportedChains.mode]: mode.deployedPlugins, [SupportedChains.base]: base.deployedPlugins, - [SupportedChains.optimism]: optimism.deployedPlugins + [SupportedChains.optimism]: optimism.deployedPlugins, + [SupportedChains.bob]: bob.deployedPlugins }; diff --git a/yarn.lock b/yarn.lock index 73a6e4704..1c64ec8e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2144,6 +2144,8 @@ __metadata: version: 0.0.0-use.local resolution: "@ionicprotocol/functions@workspace:packages/functions" dependencies: + "@ionicprotocol/chains": "workspace:*" + "@ionicprotocol/types": "workspace:*" "@netlify/functions": "npm:^1.4.0" "@supabase/supabase-js": "npm:^2.7.1" axios: "npm:^1.3.2" @@ -22787,15 +22789,15 @@ __metadata: linkType: hard "react-intersection-observer@npm:^9.10.3": - version: 9.12.0 - resolution: "react-intersection-observer@npm:9.12.0" + version: 9.13.0 + resolution: "react-intersection-observer@npm:9.13.0" peerDependencies: react: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 react-dom: ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 || ^19.0.0 peerDependenciesMeta: react-dom: optional: true - checksum: 10/8dffbc64c80b35813b27ad24a68ad3654c5c11ce86881638233894979f58c7309bdef58725c201eaf554ec7ee4d8b3ca7104a28cd53022794001d24036ff60b0 + checksum: 10/e91d4dc51bde431032d608a2b98a969d4c7532c6f01509b83681e87ebfd8f1ee412455bfb45b565c3ce77080a8cf0c8aa22da3fd26565753835e82a5b0f15cdb languageName: node linkType: hard