S Price: $0.449047 (-0.45%)

Contract

0xaebA5a9762Aa7dd57B686F752128a2F30169C293

Overview

S Balance

Sonic LogoSonic LogoSonic Logo0 S

S Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

Parent Transaction Hash Block From To
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OffchainOracle

Compiler Version
v0.7.6+commit.7338295f

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at SonicScan.org on 2024-12-29
*/

// SPDX-License-Identifier: No

pragma solidity 0.7.6;

library SafeMath {
    function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        uint256 c = a + b;
        if (c < a) return (false, 0);
        return (true, c);
    }
    function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b > a) return (false, 0);
        return (true, a - b);
    }
    function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (a == 0) return (true, 0);
        uint256 c = a * b;
        if (c / a != b) return (false, 0);
        return (true, c);
    }
    function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a / b);
    }
    function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
        if (b == 0) return (false, 0);
        return (true, a % b);
    }
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b <= a, "SafeMath: subtraction overflow");
        return a - b;
    }
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) return 0;
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: division by zero");
        return a / b;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        require(b > 0, "SafeMath: modulo by zero");
        return a % b;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        return a - b;
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a / b;
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        return a % b;
    }
}

library Sqrt {
    function sqrt(uint y) internal pure returns (uint z) {
        if (y > 3) {
            z = y;
            uint x = y / 2 + 1;
            while (x < z) {
                z = x;
                x = (y / x + x) / 2;
            }
        } else if (y != 0) {
            z = 1;
        }
    }
}

interface IERC20 {
    function totalSupply() external view returns (uint256);
    function balanceOf(address account) external view returns (uint256);
    function transfer(address recipient, uint256 amount) external returns (bool);
    function allowance(address owner, address spender) external view returns (uint256);
    function approve(address spender, uint256 amount) external returns (bool);
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

interface IERC20Metadata is IERC20 {
    function name() external view returns (string memory);
    function symbol() external view returns (string memory);
    function decimals() external view returns (uint8);
}
// For Uniswap v1
interface IUniswapV1 {
    function getTokenToEthInputPrice(uint256 tokens_sold) external view returns (uint256 );
}
// For Uniswap v2, Quickswap v2, Sushiswap v2, pancakeswap v2
interface IUniswapV2Pair {
    function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// For Uniswap v3, Sushiswap v3, Pancakeswap v3
interface IUniswapV3Pool {
    function slot0() external view returns (uint160 sqrtPriceX96, int24, uint16, uint16, uint16, uint8, bool);
    function ticks(int24 tick) external view returns (uint128, int128, uint256, uint256, int56, uint160, uint32, bool);
    function tickSpacing() external view returns (int24);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function liquidity() external view returns (uint128);
}
// For Quickswap v3
interface IAlgebraPool {
    function globalState() external view returns (uint160 price, int24 tick, uint16 fee, uint16 timepointIndex, uint8 communityFeeToken0, uint8 communityFeeToken1, bool unlocked);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function liquidity() external view returns (uint128);
}
// For Meshswap
interface IMeshswapPool {
    function token0() external view returns (address);
    function token1() external view returns (address);
    function reserve0() external view returns (uint112);
    function reserve1() external view returns (uint112);
}
// For Balancer v2
interface IStablePool {
    function getTokenRate(address) external view returns (uint256);
}
// For Balancer v2
interface IWeightedPool {
    function getPoolId() external view returns (bytes32);
    function getNormalizedWeights() external view returns (uint256[] memory);
}
// For Balancer v2
interface IVault {
    function getPoolTokens(bytes32 poolId) external view returns (address[] memory tokens, uint256[] memory balances, uint256 lastChangeBlock);
}
// For Kyber swap
interface IKyberDmmPool {
    function getTradeInfo() external view returns (uint112 reserve0, uint112 reserve1, uint112 _vReserve0, uint112 _vReserve1, uint256 feeInPrecision);
    function token0() external view returns (address);
    function token1() external view returns (address);
}
// For Curve v2
interface ICurveV2Pool {
    function price_oracle() external view returns (uint256); 
    function coins(uint256 arg0) external view returns (address);
}
// For Curve Stable
interface ICurveStablePool {
    function price_oracle(uint256 arg0) external view returns (uint256); 
    function N_COINS() external view returns (uint256); 
    function coins(uint256 arg0) external view returns (address); 
}
// // For Dodoex V2 DSP
// interface IDodoDSP {
//     function _BASE_TOKEN_() external view returns (address);
//     function _QUOTE_TOKEN_() external view returns (address);
//     function querySellBase(address trader, uint256 payBaseAmount) external view returns (uint256 receiveQuoteAmount, uint256 mtFee, uint8 newRState, uint256 newBaseTarget);
//     function querySellQuote(address trader, uint256 payQuoteAmount) external view returns (uint256 receiveBaseAmount, uint256 mtFee, uint8 newRState, uint256 newQuoteTarget);
// }
// For Dodoex V2 DVM & DSP
interface IDodoDVM {
    function _BASE_TOKEN_() external view returns (address);
    function _QUOTE_TOKEN_() external view returns (address);
    function querySellBase(address trader, uint256 payBaseAmount) external view returns (uint256 receiveQuoteAmount, uint256 mtFee);
    function querySellQuote(address trader, uint256 payQuoteAmount) external view returns (uint256 receiveBaseAmount, uint256 mtFee);
}
contract OffchainOracle {
    using SafeMath for uint256;
    using SafeMath for uint112;
    using Sqrt for uint256;

    function getRate(address tokenFrom, address tokenTo, address poolAddress, uint8 ver) external view returns (uint256 rate, uint8 decimalsFrom, uint8 decimalsTo) {
        if(ver == 2 || ver == 5 || ver == 7) {
            address token0;
            address token1;
            uint256 reserve0;
            uint256 reserve1;
            // version = 2 : Uniswap V2 like
            if(ver == 2) {
                token0 = IUniswapV2Pair(poolAddress).token0();
                token1 = IUniswapV2Pair(poolAddress).token1();
                (reserve0, reserve1,) = IUniswapV2Pair(poolAddress).getReserves(); 
            } 
            // version = 5 : Meshswap
            else if(ver == 5) {
                token0 = IMeshswapPool(poolAddress).token0();
                token1 = IMeshswapPool(poolAddress).token1();
                reserve0 = IMeshswapPool(poolAddress).reserve0();
                reserve1 = IMeshswapPool(poolAddress).reserve1();
            }
            // version = 7 : Kyber swap
            else if(ver == 7) {
                token0 = IKyberDmmPool(poolAddress).token0();
                token1 = IKyberDmmPool(poolAddress).token1();
                (,, reserve0, reserve1,) = IKyberDmmPool(poolAddress).getTradeInfo();
            }
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = reserve1.mul(1e18).div(reserve0);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = reserve0.mul(1e18).div(reserve1);
            }
        }
        // version = 1 : Uniswap V1
        else if(ver == 1) {
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = 18;
            rate = IUniswapV1(poolAddress).getTokenToEthInputPrice(10**decimalsFrom);
        }
        // version = 3 : Uniswap V3
        else if(ver == 3) {
            address token0 = IUniswapV3Pool(poolAddress).token0();
            address token1 = IUniswapV3Pool(poolAddress).token1();
            (uint256 sqrtPriceX96,,,,,,) = IUniswapV3Pool(poolAddress).slot0();
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = (((1e18 * sqrtPriceX96) >> 96) * sqrtPriceX96) >> 96;
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = (1e18 << 192) / sqrtPriceX96 / sqrtPriceX96;
            }
        } 
        // version = 4 : QuickSwap V3
        else if(ver == 4) {
            address token0 = IAlgebraPool(poolAddress).token0();
            address token1 = IAlgebraPool(poolAddress).token1();
            (uint256 sqrtPriceX96,,,,,,) = IAlgebraPool(poolAddress).globalState();
            if(token0 == tokenFrom) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                rate = (((1e18 * sqrtPriceX96) >> 96) * sqrtPriceX96) >> 96;
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                rate = (1e18 << 192) / sqrtPriceX96 / sqrtPriceX96;
            }
        }
        // version = 6 : balancer v2
        else if(ver == 6) {
            address balancerVaultAddress = 0xBA12222222228d8Ba445958a75a0704d566BF2C8;
            bytes32 poolId = IWeightedPool(poolAddress).getPoolId();
            (uint256[] memory weights) = IWeightedPool(poolAddress).getNormalizedWeights();
            (address[] memory tokens, uint256[] memory balances,) = IVault(balancerVaultAddress).getPoolTokens(poolId);
            uint256 balanceOfTokenFrom = 0;
            uint256 balanceOfTokenTo = 0;
            for(uint8 i = 0; i < tokens.length; i++ ){
                if(tokens[i] == tokenFrom) {
                    balanceOfTokenFrom = balances[i].mul(1e18).div(weights[i]);
                }
                if(tokens[i] == tokenTo) {
                    balanceOfTokenTo = balances[i].mul(1e18).div(weights[i]);
                }
            }
            decimalsFrom = IERC20Metadata(tokenFrom).decimals();
            decimalsTo = IERC20Metadata(tokenTo).decimals();
            rate = balanceOfTokenTo.mul(1e18).div(balanceOfTokenFrom);
        } 
        // version = 8 : Curve v2
        // return price_oracle
        else if(ver == 8) {
            rate = ICurveV2Pool(poolAddress).price_oracle();
            address token0 = ICurveV2Pool(poolAddress).coins(0);
            if(tokenFrom == token0) {
                uint256 num1e36 = 1e36;
                rate = num1e36.div(rate);
            }
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 9 : Dodoex v2 DVM & DSP with sell = 1 
        // (ver=12 : sell=10^(-4)) 
        // (ver=13 : sell=10^(-2)) 
        // (ver=14 : sell=10^(2)) 
        // (ver=15 : sell=10^(4)) 
        // (ver=16 : sell=10^(6)) 
        else if(ver == 9 || ver == 12 || ver == 13 || ver == 14 || ver == 15 || ver == 16) {
            address token0 = IDodoDVM(poolAddress)._BASE_TOKEN_();
            address token1 = IDodoDVM(poolAddress)._QUOTE_TOKEN_();
            
            uint8 num = 4;
            if(ver == 9) {
                num = 4;
            } else if(ver == 12) {
                num = 0;
            } else if(ver == 13) {
                num = 2;
            } else if(ver == 14) {
                num = 6;
            } else if(ver == 15) {
                num = 8;
            } else if(ver == 16) {
                num = 10;
            }

            if(tokenFrom == token0) {
                decimalsFrom = IERC20Metadata(token0).decimals();
                decimalsTo = IERC20Metadata(token1).decimals();
                (uint256 receiveQuoteAmount, ) = IDodoDVM(poolAddress).querySellBase(0xD692C31E5ec0d87D032ABC243c1eb2C9Ae204FeA, 10**(decimalsFrom+num-4));
                rate = receiveQuoteAmount.mul(1e18).div(10**decimalsTo);
            } else {
                decimalsFrom = IERC20Metadata(token1).decimals();
                decimalsTo = IERC20Metadata(token0).decimals();
                (uint256 receiveBaseAmount, ) = IDodoDVM(poolAddress).querySellQuote(0xD692C31E5ec0d87D032ABC243c1eb2C9Ae204FeA, 10**(decimalsFrom+num-4));
                rate = receiveBaseAmount.mul(1e18).div(10**decimalsTo);
            }

            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 10: Balancer stable pool
        else if(ver == 10) {
            uint256 rateFrom = IStablePool(poolAddress).getTokenRate(tokenFrom);
            uint256 rateTo = IStablePool(poolAddress).getTokenRate(tokenTo);
            rate = rateFrom.mul(1e18).div(rateTo);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
        // version = 11 :, Curve Stable
        // return price_oracle(i)
        else if(ver == 11) {
            uint256 N_COINS = ICurveStablePool(poolAddress).N_COINS();
            uint256 tokenFromInd = 0;
            for(uint256 i = 1; i < N_COINS; i++) {
                address tmpToken = ICurveStablePool(poolAddress).coins(i);
                if(tmpToken == tokenFrom) {
                    tokenFromInd = i - 1;
                    break;
                }
            }
            rate = ICurveStablePool(poolAddress).price_oracle(tokenFromInd);
            decimalsFrom = 18;
            decimalsTo = 18;
        }
    }
}

Contract Security Audit

Contract ABI

API
[{"inputs":[{"internalType":"address","name":"tokenFrom","type":"address"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"address","name":"poolAddress","type":"address"},{"internalType":"uint8","name":"ver","type":"uint8"}],"name":"getRate","outputs":[{"internalType":"uint256","name":"rate","type":"uint256"},{"internalType":"uint8","name":"decimalsFrom","type":"uint8"},{"internalType":"uint8","name":"decimalsTo","type":"uint8"}],"stateMutability":"view","type":"function"}]

608060405234801561001057600080fd5b50612766806100206000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ecbbfef414610030575b600080fd5b6100bf6004803603608081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506100e9565b604051808481526020018360ff1681526020018260ff168152602001935050505060405180910390f35b600080600060028460ff161480610103575060058460ff16145b80610111575060078460ff16145b156109d75760008060008060028860ff1614156102f7578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561016e57600080fd5b505afa158015610182573d6000803e3d6000fd5b505050506040513d602081101561019857600080fd5b810190808051906020019092919050505093508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156101f157600080fd5b505afa158015610205573d6000803e3d6000fd5b505050506040513d602081101561021b57600080fd5b810190808051906020019092919050505092508873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561027457600080fd5b505afa158015610288573d6000803e3d6000fd5b505050506040513d606081101561029e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff16915050809250819350505061072a565b60058860ff161415610534578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561034957600080fd5b505afa15801561035d573d6000803e3d6000fd5b505050506040513d602081101561037357600080fd5b810190808051906020019092919050505093508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156103cc57600080fd5b505afa1580156103e0573d6000803e3d6000fd5b505050506040513d60208110156103f657600080fd5b810190808051906020019092919050505092508873ffffffffffffffffffffffffffffffffffffffff1663443cb4bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561044f57600080fd5b505afa158015610463573d6000803e3d6000fd5b505050506040513d602081101561047957600080fd5b81019080805190602001909291905050506dffffffffffffffffffffffffffff1691508873ffffffffffffffffffffffffffffffffffffffff16635a76f25e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e257600080fd5b505afa1580156104f6573d6000803e3d6000fd5b505050506040513d602081101561050c57600080fd5b81019080805190602001909291905050506dffffffffffffffffffffffffffff169050610729565b60078860ff161415610728578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561058657600080fd5b505afa15801561059a573d6000803e3d6000fd5b505050506040513d60208110156105b057600080fd5b810190808051906020019092919050505093508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561060957600080fd5b505afa15801561061d573d6000803e3d6000fd5b505050506040513d602081101561063357600080fd5b810190808051906020019092919050505092508873ffffffffffffffffffffffffffffffffffffffff1663d66940276040518163ffffffff1660e01b815260040160a06040518083038186803b15801561068c57600080fd5b505afa1580156106a0573d6000803e3d6000fd5b505050506040513d60a08110156106b657600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192935090919250826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050505b5b5b8a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610898578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a457600080fd5b505afa1580156107b8573d6000803e3d6000fd5b505050506040513d60208110156107ce57600080fd5b810190808051906020019092919050505095508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561082757600080fd5b505afa15801561083b573d6000803e3d6000fd5b505050506040513d602081101561085157600080fd5b8101908080519060200190929190505050945061089182610883670de0b6b3a76400008461260090919063ffffffff16565b61268690919063ffffffff16565b96506109ce565b8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156108de57600080fd5b505afa1580156108f2573d6000803e3d6000fd5b505050506040513d602081101561090857600080fd5b810190808051906020019092919050505095508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561096157600080fd5b505afa158015610975573d6000803e3d6000fd5b505050506040513d602081101561098b57600080fd5b810190808051906020019092919050505094506109cb816109bd670de0b6b3a76400008561260090919063ffffffff16565b61268690919063ffffffff16565b96505b505050506125f6565b60018460ff161415610b03578673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2957600080fd5b505afa158015610a3d573d6000803e3d6000fd5b505050506040513d6020811015610a5357600080fd5b81019080805190602001909291905050509150601290508473ffffffffffffffffffffffffffffffffffffffff166395b68fe78360ff16600a0a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d6020811015610aeb57600080fd5b810190808051906020019092919050505092506125f5565b60038460ff161415610f905760008573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5757600080fd5b505afa158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b8101908080519060200190929190505050905060008673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610bdc57600080fd5b505afa158015610bf0573d6000803e3d6000fd5b505050506040513d6020811015610c0657600080fd5b8101908080519060200190929190505050905060008773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610c6157600080fd5b505afa158015610c75573d6000803e3d6000fd5b505050506040513d60e0811015610c8b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505050505073ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e4c578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b810190808051906020019092919050505094508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d6020811015610e1d57600080fd5b81019080805190602001909291905050509350606081606083670de0b6b3a764000002901c02901c9550610f88565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9257600080fd5b505afa158015610ea6573d6000803e3d6000fd5b505050506040513d6020811015610ebc57600080fd5b810190808051906020019092919050505094508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1557600080fd5b505afa158015610f29573d6000803e3d6000fd5b505050506040513d6020811015610f3f57600080fd5b8101908080519060200190929190505050935080817f0de0b6b3a764000000000000000000000000000000000000000000000000000081610f7c57fe5b0481610f8457fe5b0495505b5050506125f4565b60048460ff16141561141d5760008573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610fe457600080fd5b505afa158015610ff8573d6000803e3d6000fd5b505050506040513d602081101561100e57600080fd5b8101908080519060200190929190505050905060008673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561106957600080fd5b505afa15801561107d573d6000803e3d6000fd5b505050506040513d602081101561109357600080fd5b8101908080519060200190929190505050905060008773ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160e06040518083038186803b1580156110ee57600080fd5b505afa158015611102573d6000803e3d6000fd5b505050506040513d60e081101561111857600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505050505073ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112d9578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156111fd57600080fd5b505afa158015611211573d6000803e3d6000fd5b505050506040513d602081101561122757600080fd5b810190808051906020019092919050505094508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561128057600080fd5b505afa158015611294573d6000803e3d6000fd5b505050506040513d60208110156112aa57600080fd5b81019080805190602001909291905050509350606081606083670de0b6b3a764000002901c02901c9550611415565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561131f57600080fd5b505afa158015611333573d6000803e3d6000fd5b505050506040513d602081101561134957600080fd5b810190808051906020019092919050505094508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a257600080fd5b505afa1580156113b6573d6000803e3d6000fd5b505050506040513d60208110156113cc57600080fd5b8101908080519060200190929190505050935080817f0de0b6b3a76400000000000000000000000000000000000000000000000000008161140957fe5b048161141157fe5b0495505b5050506125f3565b60068460ff161415611a6157600073ba12222222228d8ba445958a75a0704d566bf2c8905060008673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561148a57600080fd5b505afa15801561149e573d6000803e3d6000fd5b505050506040513d60208110156114b457600080fd5b8101908080519060200190929190505050905060008773ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b815260040160006040518083038186803b15801561150f57600080fd5b505afa158015611523573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561154d57600080fd5b810190808051604051939291908464010000000082111561156d57600080fd5b8382019150602082018581111561158357600080fd5b82518660208202830111640100000000821117156115a057600080fd5b8083526020830192505050908051906020019060200280838360005b838110156115d75780820151818401526020810190506115bc565b5050505090500160405250505090506000808473ffffffffffffffffffffffffffffffffffffffff1663f94d4668856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561163a57600080fd5b505afa15801561164e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250606081101561167857600080fd5b810190808051604051939291908464010000000082111561169857600080fd5b838201915060208201858111156116ae57600080fd5b82518660208202830111640100000000821117156116cb57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156117025780820151818401526020810190506116e7565b505050509050016040526020018051604051939291908464010000000082111561172b57600080fd5b8382019150602082018581111561174157600080fd5b825186602082028301116401000000008211171561175e57600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561179557808201518184015260208101905061177a565b5050505090500160405260200180519060200190929190505050509150915060008060005b84518160ff16101561191f578e73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106117ec57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561186c57611869868260ff168151811061182257fe5b602002602001015161185b670de0b6b3a7640000878560ff168151811061184557fe5b602002602001015161260090919063ffffffff16565b61268690919063ffffffff16565b92505b8d73ffffffffffffffffffffffffffffffffffffffff16858260ff168151811061189257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156119125761190f868260ff16815181106118c857fe5b6020026020010151611901670de0b6b3a7640000878560ff16815181106118eb57fe5b602002602001015161260090919063ffffffff16565b61268690919063ffffffff16565b91505b80806001019150506117ba565b508d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d602081101561199057600080fd5b810190808051906020019092919050505098508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e957600080fd5b505afa1580156119fd573d6000803e3d6000fd5b505050506040513d6020811015611a1357600080fd5b81019080805190602001909291905050509750611a5382611a45670de0b6b3a76400008461260090919063ffffffff16565b61268690919063ffffffff16565b9950505050505050506125f2565b60088460ff161415611bee578473ffffffffffffffffffffffffffffffffffffffff166386fc88d36040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab357600080fd5b505afa158015611ac7573d6000803e3d6000fd5b505050506040513d6020811015611add57600080fd5b8101908080519060200190929190505050925060008573ffffffffffffffffffffffffffffffffffffffff1663c661065760006040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611b4457600080fd5b505afa158015611b58573d6000803e3d6000fd5b505050506040513d6020811015611b6e57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415611be05760006ec097ce7bc90715b34b9f10000000009050611bdc858261268690919063ffffffff16565b9450505b6012925060129150506125f1565b60098460ff161480611c035750600c8460ff16145b80611c115750600d8460ff16145b80611c1f5750600e8460ff16145b80611c2d5750600f8460ff16145b80611c3b575060108460ff16145b1561223f5760008573ffffffffffffffffffffffffffffffffffffffff16634a248d2a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8857600080fd5b505afa158015611c9c573d6000803e3d6000fd5b505050506040513d6020811015611cb257600080fd5b8101908080519060200190929190505050905060008673ffffffffffffffffffffffffffffffffffffffff1663d4b970466040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0d57600080fd5b505afa158015611d21573d6000803e3d6000fd5b505050506040513d6020811015611d3757600080fd5b8101908080519060200190929190505050905060006004905060098760ff161415611d655760049050611dcf565b600c8760ff161415611d7a5760009050611dce565b600d8760ff161415611d8f5760029050611dcd565b600e8760ff161415611da45760069050611dcc565b600f8760ff161415611db95760089050611dcb565b60108760ff161415611dca57600a90505b5b5b5b5b5b8273ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141561201b578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b810190808051906020019092919050505094508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611ecc57600080fd5b505afa158015611ee0573d6000803e3d6000fd5b505050506040513d6020811015611ef657600080fd5b8101908080519060200190929190505050935060008873ffffffffffffffffffffffffffffffffffffffff166379a0487673d692c31e5ec0d87d032abc243c1eb2c9ae204fea6004858a010360ff16600a0a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604080518083038186803b158015611f9857600080fd5b505afa158015611fac573d6000803e3d6000fd5b505050506040513d6040811015611fc257600080fd5b8101908080519060200190929190805190602001909291905050505090506120138560ff16600a0a612005670de0b6b3a76400008461260090919063ffffffff16565b61268690919063ffffffff16565b96505061222f565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d602081101561208b57600080fd5b810190808051906020019092919050505094508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156120e457600080fd5b505afa1580156120f8573d6000803e3d6000fd5b505050506040513d602081101561210e57600080fd5b8101908080519060200190929190505050935060008873ffffffffffffffffffffffffffffffffffffffff166366410a2173d692c31e5ec0d87d032abc243c1eb2c9ae204fea6004858a010360ff16600a0a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604080518083038186803b1580156121b057600080fd5b505afa1580156121c4573d6000803e3d6000fd5b505050506040513d60408110156121da57600080fd5b81019080805190602001909291908051906020019092919050505050905061222b8560ff16600a0a61221d670de0b6b3a76400008461260090919063ffffffff16565b61268690919063ffffffff16565b9650505b60129450601293505050506125f0565b600a8460ff1614156123d55760008573ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122b457600080fd5b505afa1580156122c8573d6000803e3d6000fd5b505050506040513d60208110156122de57600080fd5b8101908080519060200190929190505050905060008673ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561235a57600080fd5b505afa15801561236e573d6000803e3d6000fd5b505050506040513d602081101561238457600080fd5b810190808051906020019092919050505090506123c4816123b6670de0b6b3a76400008561260090919063ffffffff16565b61268690919063ffffffff16565b9450601293506012925050506125ef565b600b8460ff1614156125ee5760008573ffffffffffffffffffffffffffffffffffffffff1663293577506040518163ffffffff1660e01b815260040160206040518083038186803b15801561242957600080fd5b505afa15801561243d573d6000803e3d6000fd5b505050506040513d602081101561245357600080fd5b81019080805190602001909291905050509050600080600190505b828110156125545760008873ffffffffffffffffffffffffffffffffffffffff1663c6610657836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156124c957600080fd5b505afa1580156124dd573d6000803e3d6000fd5b505050506040513d60208110156124f357600080fd5b810190808051906020019092919050505090508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125465760018203925050612554565b50808060010191505061246e565b508673ffffffffffffffffffffffffffffffffffffffff166368727653826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125a657600080fd5b505afa1580156125ba573d6000803e3d6000fd5b505050506040513d60208110156125d057600080fd5b81019080805190602001909291905050509450601293506012925050505b5b5b5b5b5b5b5b5b9450945094915050565b6000808314156126135760009050612680565b600082840290508284828161262457fe5b041461267b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806127106021913960400191505060405180910390fd5b809150505b92915050565b60008082116126fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161270657fe5b0490509291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e301f0e7a98da5657fd3530724151f7c43b78bf21de897184367ed418bd02ce164736f6c63430007060033

Deployed Bytecode

0x608060405234801561001057600080fd5b506004361061002b5760003560e01c8063ecbbfef414610030575b600080fd5b6100bf6004803603608081101561004657600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803573ffffffffffffffffffffffffffffffffffffffff169060200190929190803560ff1690602001909291905050506100e9565b604051808481526020018360ff1681526020018260ff168152602001935050505060405180910390f35b600080600060028460ff161480610103575060058460ff16145b80610111575060078460ff16145b156109d75760008060008060028860ff1614156102f7578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561016e57600080fd5b505afa158015610182573d6000803e3d6000fd5b505050506040513d602081101561019857600080fd5b810190808051906020019092919050505093508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156101f157600080fd5b505afa158015610205573d6000803e3d6000fd5b505050506040513d602081101561021b57600080fd5b810190808051906020019092919050505092508873ffffffffffffffffffffffffffffffffffffffff16630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561027457600080fd5b505afa158015610288573d6000803e3d6000fd5b505050506040513d606081101561029e57600080fd5b81019080805190602001909291908051906020019092919080519060200190929190505050826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff16915050809250819350505061072a565b60058860ff161415610534578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561034957600080fd5b505afa15801561035d573d6000803e3d6000fd5b505050506040513d602081101561037357600080fd5b810190808051906020019092919050505093508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b1580156103cc57600080fd5b505afa1580156103e0573d6000803e3d6000fd5b505050506040513d60208110156103f657600080fd5b810190808051906020019092919050505092508873ffffffffffffffffffffffffffffffffffffffff1663443cb4bc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561044f57600080fd5b505afa158015610463573d6000803e3d6000fd5b505050506040513d602081101561047957600080fd5b81019080805190602001909291905050506dffffffffffffffffffffffffffff1691508873ffffffffffffffffffffffffffffffffffffffff16635a76f25e6040518163ffffffff1660e01b815260040160206040518083038186803b1580156104e257600080fd5b505afa1580156104f6573d6000803e3d6000fd5b505050506040513d602081101561050c57600080fd5b81019080805190602001909291905050506dffffffffffffffffffffffffffff169050610729565b60078860ff161415610728578873ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b15801561058657600080fd5b505afa15801561059a573d6000803e3d6000fd5b505050506040513d60208110156105b057600080fd5b810190808051906020019092919050505093508873ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561060957600080fd5b505afa15801561061d573d6000803e3d6000fd5b505050506040513d602081101561063357600080fd5b810190808051906020019092919050505092508873ffffffffffffffffffffffffffffffffffffffff1663d66940276040518163ffffffff1660e01b815260040160a06040518083038186803b15801561068c57600080fd5b505afa1580156106a0573d6000803e3d6000fd5b505050506040513d60a08110156106b657600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050909192935090919250826dffffffffffffffffffffffffffff169250816dffffffffffffffffffffffffffff1691505080925081935050505b5b5b8a73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415610898578373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156107a457600080fd5b505afa1580156107b8573d6000803e3d6000fd5b505050506040513d60208110156107ce57600080fd5b810190808051906020019092919050505095508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561082757600080fd5b505afa15801561083b573d6000803e3d6000fd5b505050506040513d602081101561085157600080fd5b8101908080519060200190929190505050945061089182610883670de0b6b3a76400008461260090919063ffffffff16565b61268690919063ffffffff16565b96506109ce565b8273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156108de57600080fd5b505afa1580156108f2573d6000803e3d6000fd5b505050506040513d602081101561090857600080fd5b810190808051906020019092919050505095508373ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561096157600080fd5b505afa158015610975573d6000803e3d6000fd5b505050506040513d602081101561098b57600080fd5b810190808051906020019092919050505094506109cb816109bd670de0b6b3a76400008561260090919063ffffffff16565b61268690919063ffffffff16565b96505b505050506125f6565b60018460ff161415610b03578673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610a2957600080fd5b505afa158015610a3d573d6000803e3d6000fd5b505050506040513d6020811015610a5357600080fd5b81019080805190602001909291905050509150601290508473ffffffffffffffffffffffffffffffffffffffff166395b68fe78360ff16600a0a6040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015610ac157600080fd5b505afa158015610ad5573d6000803e3d6000fd5b505050506040513d6020811015610aeb57600080fd5b810190808051906020019092919050505092506125f5565b60038460ff161415610f905760008573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610b5757600080fd5b505afa158015610b6b573d6000803e3d6000fd5b505050506040513d6020811015610b8157600080fd5b8101908080519060200190929190505050905060008673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b158015610bdc57600080fd5b505afa158015610bf0573d6000803e3d6000fd5b505050506040513d6020811015610c0657600080fd5b8101908080519060200190929190505050905060008773ffffffffffffffffffffffffffffffffffffffff16633850c7bd6040518163ffffffff1660e01b815260040160e06040518083038186803b158015610c6157600080fd5b505afa158015610c75573d6000803e3d6000fd5b505050506040513d60e0811015610c8b57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505050505073ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610e4c578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610d7057600080fd5b505afa158015610d84573d6000803e3d6000fd5b505050506040513d6020811015610d9a57600080fd5b810190808051906020019092919050505094508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610df357600080fd5b505afa158015610e07573d6000803e3d6000fd5b505050506040513d6020811015610e1d57600080fd5b81019080805190602001909291905050509350606081606083670de0b6b3a764000002901c02901c9550610f88565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610e9257600080fd5b505afa158015610ea6573d6000803e3d6000fd5b505050506040513d6020811015610ebc57600080fd5b810190808051906020019092919050505094508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015610f1557600080fd5b505afa158015610f29573d6000803e3d6000fd5b505050506040513d6020811015610f3f57600080fd5b8101908080519060200190929190505050935080817f0de0b6b3a764000000000000000000000000000000000000000000000000000081610f7c57fe5b0481610f8457fe5b0495505b5050506125f4565b60048460ff16141561141d5760008573ffffffffffffffffffffffffffffffffffffffff16630dfe16816040518163ffffffff1660e01b815260040160206040518083038186803b158015610fe457600080fd5b505afa158015610ff8573d6000803e3d6000fd5b505050506040513d602081101561100e57600080fd5b8101908080519060200190929190505050905060008673ffffffffffffffffffffffffffffffffffffffff1663d21220a76040518163ffffffff1660e01b815260040160206040518083038186803b15801561106957600080fd5b505afa15801561107d573d6000803e3d6000fd5b505050506040513d602081101561109357600080fd5b8101908080519060200190929190505050905060008773ffffffffffffffffffffffffffffffffffffffff1663e76c01e46040518163ffffffff1660e01b815260040160e06040518083038186803b1580156110ee57600080fd5b505afa158015611102573d6000803e3d6000fd5b505050506040513d60e081101561111857600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505050505073ffffffffffffffffffffffffffffffffffffffff1690508973ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156112d9578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156111fd57600080fd5b505afa158015611211573d6000803e3d6000fd5b505050506040513d602081101561122757600080fd5b810190808051906020019092919050505094508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561128057600080fd5b505afa158015611294573d6000803e3d6000fd5b505050506040513d60208110156112aa57600080fd5b81019080805190602001909291905050509350606081606083670de0b6b3a764000002901c02901c9550611415565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561131f57600080fd5b505afa158015611333573d6000803e3d6000fd5b505050506040513d602081101561134957600080fd5b810190808051906020019092919050505094508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156113a257600080fd5b505afa1580156113b6573d6000803e3d6000fd5b505050506040513d60208110156113cc57600080fd5b8101908080519060200190929190505050935080817f0de0b6b3a76400000000000000000000000000000000000000000000000000008161140957fe5b048161141157fe5b0495505b5050506125f3565b60068460ff161415611a6157600073ba12222222228d8ba445958a75a0704d566bf2c8905060008673ffffffffffffffffffffffffffffffffffffffff166338fff2d06040518163ffffffff1660e01b815260040160206040518083038186803b15801561148a57600080fd5b505afa15801561149e573d6000803e3d6000fd5b505050506040513d60208110156114b457600080fd5b8101908080519060200190929190505050905060008773ffffffffffffffffffffffffffffffffffffffff1663f89f27ed6040518163ffffffff1660e01b815260040160006040518083038186803b15801561150f57600080fd5b505afa158015611523573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250602081101561154d57600080fd5b810190808051604051939291908464010000000082111561156d57600080fd5b8382019150602082018581111561158357600080fd5b82518660208202830111640100000000821117156115a057600080fd5b8083526020830192505050908051906020019060200280838360005b838110156115d75780820151818401526020810190506115bc565b5050505090500160405250505090506000808473ffffffffffffffffffffffffffffffffffffffff1663f94d4668856040518263ffffffff1660e01b81526004018082815260200191505060006040518083038186803b15801561163a57600080fd5b505afa15801561164e573d6000803e3d6000fd5b505050506040513d6000823e3d601f19601f82011682018060405250606081101561167857600080fd5b810190808051604051939291908464010000000082111561169857600080fd5b838201915060208201858111156116ae57600080fd5b82518660208202830111640100000000821117156116cb57600080fd5b8083526020830192505050908051906020019060200280838360005b838110156117025780820151818401526020810190506116e7565b505050509050016040526020018051604051939291908464010000000082111561172b57600080fd5b8382019150602082018581111561174157600080fd5b825186602082028301116401000000008211171561175e57600080fd5b8083526020830192505050908051906020019060200280838360005b8381101561179557808201518184015260208101905061177a565b5050505090500160405260200180519060200190929190505050509150915060008060005b84518160ff16101561191f578e73ffffffffffffffffffffffffffffffffffffffff16858260ff16815181106117ec57fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff16141561186c57611869868260ff168151811061182257fe5b602002602001015161185b670de0b6b3a7640000878560ff168151811061184557fe5b602002602001015161260090919063ffffffff16565b61268690919063ffffffff16565b92505b8d73ffffffffffffffffffffffffffffffffffffffff16858260ff168151811061189257fe5b602002602001015173ffffffffffffffffffffffffffffffffffffffff1614156119125761190f868260ff16815181106118c857fe5b6020026020010151611901670de0b6b3a7640000878560ff16815181106118eb57fe5b602002602001015161260090919063ffffffff16565b61268690919063ffffffff16565b91505b80806001019150506117ba565b508d73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561196657600080fd5b505afa15801561197a573d6000803e3d6000fd5b505050506040513d602081101561199057600080fd5b810190808051906020019092919050505098508c73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156119e957600080fd5b505afa1580156119fd573d6000803e3d6000fd5b505050506040513d6020811015611a1357600080fd5b81019080805190602001909291905050509750611a5382611a45670de0b6b3a76400008461260090919063ffffffff16565b61268690919063ffffffff16565b9950505050505050506125f2565b60088460ff161415611bee578473ffffffffffffffffffffffffffffffffffffffff166386fc88d36040518163ffffffff1660e01b815260040160206040518083038186803b158015611ab357600080fd5b505afa158015611ac7573d6000803e3d6000fd5b505050506040513d6020811015611add57600080fd5b8101908080519060200190929190505050925060008573ffffffffffffffffffffffffffffffffffffffff1663c661065760006040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b158015611b4457600080fd5b505afa158015611b58573d6000803e3d6000fd5b505050506040513d6020811015611b6e57600080fd5b810190808051906020019092919050505090508073ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff161415611be05760006ec097ce7bc90715b34b9f10000000009050611bdc858261268690919063ffffffff16565b9450505b6012925060129150506125f1565b60098460ff161480611c035750600c8460ff16145b80611c115750600d8460ff16145b80611c1f5750600e8460ff16145b80611c2d5750600f8460ff16145b80611c3b575060108460ff16145b1561223f5760008573ffffffffffffffffffffffffffffffffffffffff16634a248d2a6040518163ffffffff1660e01b815260040160206040518083038186803b158015611c8857600080fd5b505afa158015611c9c573d6000803e3d6000fd5b505050506040513d6020811015611cb257600080fd5b8101908080519060200190929190505050905060008673ffffffffffffffffffffffffffffffffffffffff1663d4b970466040518163ffffffff1660e01b815260040160206040518083038186803b158015611d0d57600080fd5b505afa158015611d21573d6000803e3d6000fd5b505050506040513d6020811015611d3757600080fd5b8101908080519060200190929190505050905060006004905060098760ff161415611d655760049050611dcf565b600c8760ff161415611d7a5760009050611dce565b600d8760ff161415611d8f5760029050611dcd565b600e8760ff161415611da45760069050611dcc565b600f8760ff161415611db95760089050611dcb565b60108760ff161415611dca57600a90505b5b5b5b5b5b8273ffffffffffffffffffffffffffffffffffffffff168a73ffffffffffffffffffffffffffffffffffffffff16141561201b578273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611e4957600080fd5b505afa158015611e5d573d6000803e3d6000fd5b505050506040513d6020811015611e7357600080fd5b810190808051906020019092919050505094508173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b158015611ecc57600080fd5b505afa158015611ee0573d6000803e3d6000fd5b505050506040513d6020811015611ef657600080fd5b8101908080519060200190929190505050935060008873ffffffffffffffffffffffffffffffffffffffff166379a0487673d692c31e5ec0d87d032abc243c1eb2c9ae204fea6004858a010360ff16600a0a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604080518083038186803b158015611f9857600080fd5b505afa158015611fac573d6000803e3d6000fd5b505050506040513d6040811015611fc257600080fd5b8101908080519060200190929190805190602001909291905050505090506120138560ff16600a0a612005670de0b6b3a76400008461260090919063ffffffff16565b61268690919063ffffffff16565b96505061222f565b8173ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561206157600080fd5b505afa158015612075573d6000803e3d6000fd5b505050506040513d602081101561208b57600080fd5b810190808051906020019092919050505094508273ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156120e457600080fd5b505afa1580156120f8573d6000803e3d6000fd5b505050506040513d602081101561210e57600080fd5b8101908080519060200190929190505050935060008873ffffffffffffffffffffffffffffffffffffffff166366410a2173d692c31e5ec0d87d032abc243c1eb2c9ae204fea6004858a010360ff16600a0a6040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604080518083038186803b1580156121b057600080fd5b505afa1580156121c4573d6000803e3d6000fd5b505050506040513d60408110156121da57600080fd5b81019080805190602001909291908051906020019092919050505050905061222b8560ff16600a0a61221d670de0b6b3a76400008461260090919063ffffffff16565b61268690919063ffffffff16565b9650505b60129450601293505050506125f0565b600a8460ff1614156123d55760008573ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156122b457600080fd5b505afa1580156122c8573d6000803e3d6000fd5b505050506040513d60208110156122de57600080fd5b8101908080519060200190929190505050905060008673ffffffffffffffffffffffffffffffffffffffff166354dea00a896040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561235a57600080fd5b505afa15801561236e573d6000803e3d6000fd5b505050506040513d602081101561238457600080fd5b810190808051906020019092919050505090506123c4816123b6670de0b6b3a76400008561260090919063ffffffff16565b61268690919063ffffffff16565b9450601293506012925050506125ef565b600b8460ff1614156125ee5760008573ffffffffffffffffffffffffffffffffffffffff1663293577506040518163ffffffff1660e01b815260040160206040518083038186803b15801561242957600080fd5b505afa15801561243d573d6000803e3d6000fd5b505050506040513d602081101561245357600080fd5b81019080805190602001909291905050509050600080600190505b828110156125545760008873ffffffffffffffffffffffffffffffffffffffff1663c6610657836040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156124c957600080fd5b505afa1580156124dd573d6000803e3d6000fd5b505050506040513d60208110156124f357600080fd5b810190808051906020019092919050505090508a73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156125465760018203925050612554565b50808060010191505061246e565b508673ffffffffffffffffffffffffffffffffffffffff166368727653826040518263ffffffff1660e01b81526004018082815260200191505060206040518083038186803b1580156125a657600080fd5b505afa1580156125ba573d6000803e3d6000fd5b505050506040513d60208110156125d057600080fd5b81019080805190602001909291905050509450601293506012925050505b5b5b5b5b5b5b5b5b9450945094915050565b6000808314156126135760009050612680565b600082840290508284828161262457fe5b041461267b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260218152602001806127106021913960400191505060405180910390fd5b809150505b92915050565b60008082116126fd576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601a8152602001807f536166654d6174683a206469766973696f6e206279207a65726f00000000000081525060200191505060405180910390fd5b81838161270657fe5b0490509291505056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f77a2646970667358221220e301f0e7a98da5657fd3530724151f7c43b78bf21de897184367ed418bd02ce164736f6c63430007060033

Deployed Bytecode Sourcemap

7521:8026:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7649:7895;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7757:12;7771:18;7791:16;7830:1;7823:3;:8;;;:20;;;;7842:1;7835:3;:8;;;7823:20;:32;;;;7854:1;7847:3;:8;;;7823:32;7820:7717;;;7872:14;7901;7930:16;7961;8048:1;8041:3;:8;;;8038:892;;;8094:11;8079:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8070:45;;8158:11;8143:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8134:45;;8237:11;8222:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8198:65;;;;;;;;;;;;;;;;;;;8038:892;;;8349:1;8342:3;:8;;;8339:591;;;8394:11;8380:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8371:44;;8457:11;8443:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8434:44;;8522:11;8508:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8497:48;;;;8589:11;8575:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8564:48;;;;8339:591;;;8698:1;8691:3;:8;;;8688:242;;;8743:11;8729:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8720:44;;8806:11;8792:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8783:44;;8887:11;8873:39;;;:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8846:68;;;;;;;;;;;;;;;;;;;;;;;;;;;;8688:242;8339:591;8038:892;8957:9;8947:19;;:6;:19;;;8944:442;;;9017:6;9002:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8987:48;;9082:6;9067:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9054:46;;9126:32;9149:8;9126:18;9139:4;9126:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;9119:39;;8944:442;;;9229:6;9214:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9199:48;;9294:6;9279:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9266:46;;9338:32;9361:8;9338:18;9351:4;9338:8;:12;;:18;;;;:::i;:::-;:22;;:32;;;;:::i;:::-;9331:39;;8944:442;7820:7717;;;;;;;9459:1;9452:3;:8;;;9449:6088;;;9507:9;9492:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9477:51;;9556:2;9543:15;;9591:11;9580:47;;;9632:12;9628:16;;:2;:16;9580:65;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9573:72;;9449:6088;;;9719:1;9712:3;:8;;;9709:5828;;;9737:14;9769:11;9754:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9737:53;;9805:14;9837:11;9822:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9805:53;;9874:20;9919:11;9904:33;;;:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9873:66;;;;;;;;;;9967:9;9957:19;;:6;:19;;;9954:473;;;10027:6;10012:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9997:48;;10092:6;10077:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10064:46;;10186:2;10169:12;10163:2;10146:12;10139:4;:19;10138:27;;10137:44;10136:52;;10129:59;;9954:473;;;10259:6;10244:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10229:48;;10324:6;10309:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10296:46;;10399:12;10384;10369:11;10368:28;;;;;;:43;;;;;;10361:50;;9954:473;9709:5828;;;;;;10503:1;10496:3;:8;;;10493:5044;;;10521:14;10551:11;10538:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10521:51;;10587:14;10617:11;10604:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10587:51;;10654:20;10697:11;10684:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10653:70;;;;;;;;;;10751:9;10741:19;;:6;:19;;;10738:473;;;10811:6;10796:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10781:48;;10876:6;10861:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10848:46;;10970:2;10953:12;10947:2;10930:12;10923:4;:19;10922:27;;10921:44;10920:52;;10913:59;;10738:473;;;11043:6;11028:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11013:48;;11108:6;11093:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11080:46;;11183:12;11168;11153:11;11152:28;;;;;;:43;;;;;;11145:50;;10738:473;10493:5044;;;;;;11285:1;11278:3;:8;;;11275:4262;;;11303:28;11334:42;11303:73;;11391:14;11422:11;11408:36;;;:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11391:55;;11462:24;11504:11;11490:47;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11461:78;;11555:23;11580:25;11617:20;11610:42;;;11653:6;11610:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11554:106;;;;;11675:26;11720:24;11767:7;11763:345;11784:6;:13;11780:1;:17;;;11763:345;;;11839:9;11826:22;;:6;11833:1;11826:9;;;;;;;;;;;;;;;;:22;;;11823:128;;;11894:37;11920:7;11928:1;11920:10;;;;;;;;;;;;;;;;11894:21;11910:4;11894:8;11903:1;11894:11;;;;;;;;;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;11873:58;;11823:128;11985:7;11972:20;;:6;11979:1;11972:9;;;;;;;;;;;;;;;;:20;;;11969:124;;;12036:37;12062:7;12070:1;12062:10;;;;;;;;;;;;;;;;12036:21;12052:4;12036:8;12045:1;12036:11;;;;;;;;;;;;;;;;:15;;:21;;;;:::i;:::-;:25;;:37;;;;:::i;:::-;12017:56;;11969:124;11799:3;;;;;;;11763:345;;;;12152:9;12137:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12122:51;;12216:7;12201:32;;;:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12188:47;;12257:50;12288:18;12257:26;12278:4;12257:16;:20;;:26;;;;:::i;:::-;:30;;:50;;;;:::i;:::-;12250:57;;11275:4262;;;;;;;;;;12412:1;12405:3;:8;;;12402:3135;;;12450:11;12437:38;;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12430:47;;12492:14;12522:11;12509:31;;;12541:1;12509:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12492:51;;12574:6;12561:19;;:9;:19;;;12558:124;;;12601:15;12619:4;12601:22;;12649:17;12661:4;12649:7;:11;;:17;;;;:::i;:::-;12642:24;;12558:124;;12711:2;12696:17;;12741:2;12728:15;;12402:3135;;;;13023:1;13016:3;:8;;;:21;;;;13035:2;13028:3;:9;;;13016:21;:34;;;;13048:2;13041:3;:9;;;13016:34;:47;;;;13061:2;13054:3;:9;;;13016:47;:60;;;;13074:2;13067:3;:9;;;13016:60;:73;;;;13087:2;13080:3;:9;;;13016:73;13013:2524;;;13106:14;13132:11;13123:34;;;:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13106:53;;13174:14;13200:11;13191:35;;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13174:54;;13257:9;13269:1;13257:13;;13295:1;13288:3;:8;;;13285:366;;;13323:1;13317:7;;13285:366;;;13356:2;13349:3;:9;;;13346:305;;;13385:1;13379:7;;13346:305;;;13418:2;13411:3;:9;;;13408:243;;;13447:1;13441:7;;13408:243;;;13480:2;13473:3;:9;;;13470:181;;;13509:1;13503:7;;13470:181;;;13542:2;13535:3;:9;;;13532:119;;;13571:1;13565:7;;13532:119;;;13604:2;13597:3;:9;;;13594:57;;;13633:2;13627:8;;13594:57;13532:119;13470:181;13408:243;13346:305;13285:366;13683:6;13670:19;;:9;:19;;;13667:787;;;13740:6;13725:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13710:48;;13805:6;13790:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13777:46;;13843:26;13884:11;13875:35;;;13911:42;13977:1;13973:3;13960:12;:16;:18;13955:24;;:2;:24;13875:105;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13842:138;;;14006:48;14043:10;14039:14;;:2;:14;14006:28;14029:4;14006:18;:22;;:28;;;;:::i;:::-;:32;;:48;;;;:::i;:::-;13999:55;;13667:787;;;;14125:6;14110:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14095:48;;14190:6;14175:31;;;:33;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14162:46;;14228:25;14268:11;14259:36;;;14296:42;14362:1;14358:3;14345:12;:16;:18;14340:24;;:2;:24;14259:106;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14227:138;;;14391:47;14427:10;14423:14;;:2;:14;14391:27;14413:4;14391:17;:21;;:27;;;;:::i;:::-;:31;;:47;;;;:::i;:::-;14384:54;;13667:787;;14485:2;14470:17;;14515:2;14502:15;;13013:2524;;;;;;14601:2;14594:3;:9;;;14591:946;;;14620:16;14651:11;14639:37;;;14677:9;14639:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14620:67;;14702:14;14731:11;14719:37;;;14757:7;14719:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;14702:63;;14787:30;14810:6;14787:18;14800:4;14787:8;:12;;:18;;;;:::i;:::-;:22;;:30;;;;:::i;:::-;14780:37;;14847:2;14832:17;;14877:2;14864:15;;14591:946;;;;;14992:2;14985:3;:9;;;14982:555;;;15011:15;15046:11;15029:37;;;:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15011:57;;15083:20;15126:9;15138:1;15126:13;;15122:264;15145:7;15141:1;:11;15122:264;;;15178:16;15214:11;15197:35;;;15233:1;15197:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15178:57;;15269:9;15257:21;;:8;:21;;;15254:117;;;15322:1;15318;:5;15303:20;;15346:5;;;15254:117;15122:264;15154:3;;;;;;;15122:264;;;;15424:11;15407:42;;;15450:12;15407:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;15400:63;;15493:2;15478:17;;15523:2;15510:15;;14982:555;;;14591:946;13013:2524;12402:3135;11275:4262;10493:5044;9709:5828;9449:6088;7820:7717;7649:7895;;;;;;;;:::o;1327:220::-;1385:7;1414:1;1409;:6;1405:20;;;1424:1;1417:8;;;;1405:20;1436:9;1452:1;1448;:5;1436:17;;1481:1;1476;1472;:5;;;;;;:10;1464:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1538:1;1531:8;;;1327:220;;;;;:::o;1553:153::-;1611:7;1643:1;1639;:5;1631:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1697:1;1693;:5;;;;;;1686:12;;1553:153;;;;:::o

Swarm Source

ipfs://e301f0e7a98da5657fd3530724151f7c43b78bf21de897184367ed418bd02ce1

Block Transaction Gas Used Reward
view all blocks ##produced##

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.