ETH Price: $3,630.66 (+0.11%)
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To

There are no matching entries

Please try again later

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ConnectAaveV2

Compiler Version
v0.6.0+commit.26b70077

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-12-16
*/

pragma solidity ^0.6.0;
pragma experimental ABIEncoderV2;


interface TokenInterface {
    function approve(address, uint256) external;
    function transfer(address, uint) external;
    function transferFrom(address, address, uint) external;
    function deposit() external payable;
    function withdraw(uint) external;
    function balanceOf(address) external view returns (uint);
    function decimals() external view returns (uint);
}

interface MemoryInterface {
    function getUint(uint id) external returns (uint num);
    function setUint(uint id, uint val) external;
}

interface EventInterface {
    function emitEvent(uint connectorType, uint connectorID, bytes32 eventCode, bytes calldata eventData) external;
}

contract Stores {

  /**
   * @dev Return ethereum address
   */
  function getEthAddr() internal pure returns (address) {
    return 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE; // ETH Address
  }

  /**
   * @dev Return memory variable address
   */
  function getMemoryAddr() internal pure returns (address) {
    return 0x8a5419CfC711B2343c17a6ABf4B2bAFaBb06957F; // InstaMemory Address
  }

  /**
   * @dev Return InstaEvent Address.
   */
  function getEventAddr() internal pure returns (address) {
    return 0x2af7ea6Cb911035f3eb1ED895Cb6692C39ecbA97; // InstaEvent Address
  }

  /**
   * @dev Get Uint value from InstaMemory Contract.
   */
  function getUint(uint getId, uint val) internal returns (uint returnVal) {
    returnVal = getId == 0 ? val : MemoryInterface(getMemoryAddr()).getUint(getId);
  }

  /**
  * @dev Set Uint value in InstaMemory Contract.
  */
  function setUint(uint setId, uint val) virtual internal {
    if (setId != 0) MemoryInterface(getMemoryAddr()).setUint(setId, val);
  }

  /**
  * @dev Connector Details
  */
  function connectorID() public pure returns(uint model, uint id) {
    (model, id) = (1, 66);
  }

}

/**
 * @dev Wrappers over Solidity's arithmetic operations with added overflow
 * checks.
 *
 * Arithmetic operations in Solidity wrap on overflow. This can easily result
 * in bugs, because programmers usually assume that an overflow raises an
 * error, which is the standard behavior in high level programming languages.
 * `SafeMath` restores this intuition by reverting the transaction when an
 * operation overflows.
 *
 * Using this library instead of the unchecked operations eliminates an entire
 * class of bugs, so it's recommended to use it always.
 */
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }

        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");

        return c;
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold

        return c;
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }

    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

contract DSMath {
  uint constant WAD = 10 ** 18;
  uint constant RAY = 10 ** 27;

  function add(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(x, y);
  }

  function sub(uint x, uint y) internal virtual pure returns (uint z) {
    z = SafeMath.sub(x, y);
  }

  function mul(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.mul(x, y);
  }

  function div(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.div(x, y);
  }

  function wmul(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(SafeMath.mul(x, y), WAD / 2) / WAD;
  }

  function wdiv(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(SafeMath.mul(x, WAD), y / 2) / y;
  }

  function rdiv(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(SafeMath.mul(x, RAY), y / 2) / y;
  }

  function rmul(uint x, uint y) internal pure returns (uint z) {
    z = SafeMath.add(SafeMath.mul(x, y), RAY / 2) / RAY;
  }

}

interface AaveInterface {
    function deposit(address _asset, uint256 _amount, address _onBehalfOf, uint16 _referralCode) external;
    function withdraw(address _asset, uint256 _amount, address _to) external;
    function borrow(
        address _asset,
        uint256 _amount,
        uint256 _interestRateMode,
        uint16 _referralCode,
        address _onBehalfOf
    ) external;
    function repay(address _asset, uint256 _amount, uint256 _rateMode, address _onBehalfOf) external;
    function setUserUseReserveAsCollateral(address _asset, bool _useAsCollateral) external;
}

interface AaveLendingPoolProviderInterface {
    function getLendingPool() external view returns (address);
}

// Aave Protocol Data Provider
interface AaveDataProviderInterface {
    function getReserveTokensAddresses(address _asset) external view returns (
        address aTokenAddress,
        address stableDebtTokenAddress,
        address variableDebtTokenAddress
    );
    function getUserReserveData(address _asset, address _user) external view returns (
        uint256 currentATokenBalance,
        uint256 currentStableDebt,
        uint256 currentVariableDebt,
        uint256 principalStableDebt,
        uint256 scaledVariableDebt,
        uint256 stableBorrowRate,
        uint256 liquidityRate,
        uint40 stableRateLastUpdated,
        bool usageAsCollateralEnabled
    );
}

interface AaveAddressProviderRegistryInterface {
    function getAddressesProvidersList() external view returns (address[] memory);
}

interface ATokenInterface {
    function balanceOf(address _user) external view returns(uint256);
}

contract AaveHelpers is DSMath, Stores {
    /**
     * @dev get Aave Lending Pool Provider
    */
    function getAaveProvider() internal pure returns (AaveLendingPoolProviderInterface) {
        return AaveLendingPoolProviderInterface(0xB53C1a33016B2DC2fF3653530bfF1848a515c8c5); //mainnet
        // return AaveLendingPoolProviderInterface(0x652B2937Efd0B5beA1c8d54293FC1289672AFC6b); //kovan
    }

    /**
     * @dev get Aave Protocol Data Provider
    */
    function getAaveDataProvider() internal pure returns (AaveDataProviderInterface) {
        return AaveDataProviderInterface(0x057835Ad21a177dbdd3090bB1CAE03EaCF78Fc6d); //mainnet
        // return AaveDataProviderInterface(0x744C1aaA95232EeF8A9994C4E0b3a89659D9AB79); //kovan
    }

    /**
     * @dev Return Weth address
    */
    function getWethAddr() internal pure returns (address) {
        return 0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2; // Mainnet WETH Address
        // return 0xd0A1E359811322d97991E03f863a0C30C2cF029C; // Kovan WETH Address
    }

    /**
     * @dev get Referral Code
    */
    function getReferralCode() internal pure returns (uint16) {
        return 3228;
    }

    function getIsColl(AaveDataProviderInterface aaveData, address token, address user) internal view returns (bool isCol) {
        (, , , , , , , , isCol) = aaveData.getUserReserveData(token, user);
    }

    function convertEthToWeth(bool isEth, TokenInterface token, uint amount) internal {
        if(isEth) token.deposit.value(amount)();
    }

    function convertWethToEth(bool isEth, TokenInterface token, uint amount) internal {
       if(isEth) {
            token.approve(address(token), amount);
            token.withdraw(amount);
        }
    }

    function getPaybackBalance(AaveDataProviderInterface aaveData, address token, uint rateMode) internal view returns (uint) {
        (, uint stableDebt, uint variableDebt, , , , , , ) = aaveData.getUserReserveData(token, address(this));
        return rateMode == 1 ? stableDebt : variableDebt;
    }

    function getCollateralBalance(AaveDataProviderInterface aaveData, address token) internal view returns (uint bal) {
        (bal, , , , , , , ,) = aaveData.getUserReserveData(token, address(this));
    }
}

contract BasicResolver is AaveHelpers {
    event LogDeposit(address indexed token, uint256 tokenAmt, uint256 getId, uint256 setId);
    event LogWithdraw(address indexed token, uint256 tokenAmt, uint256 getId, uint256 setId);
    event LogBorrow(address indexed token, uint256 tokenAmt, uint256 indexed rateMode, uint256 getId, uint256 setId);
    event LogPayback(address indexed token, uint256 tokenAmt, uint256 indexed rateMode, uint256 getId, uint256 setId);
    event LogEnableCollateral(address[] tokens);

    /**
     * @dev Deposit ETH/ERC20_Token.
     * @param token token address to deposit.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param amt token amount to deposit.
     * @param getId Get token amount at this ID from `InstaMemory` Contract.
     * @param setId Set token amount at this ID in `InstaMemory` Contract.
    */
    function deposit(address token, uint amt, uint getId, uint setId) external payable {
        uint _amt = getUint(getId, amt);

        AaveInterface aave = AaveInterface(getAaveProvider().getLendingPool());
        AaveDataProviderInterface aaveData = getAaveDataProvider();

        bool isEth = token == getEthAddr();
        address _token = isEth ? getWethAddr() : token;

        TokenInterface tokenContract = TokenInterface(_token);

        if (isEth) {
            _amt = _amt == uint(-1) ? address(this).balance : _amt;
            convertEthToWeth(isEth, tokenContract, _amt);
        } else {
            _amt = _amt == uint(-1) ? tokenContract.balanceOf(address(this)) : _amt;
        }

        tokenContract.approve(address(aave), _amt);

        aave.deposit(_token, _amt, address(this), getReferralCode());

        if (!getIsColl(aaveData, _token, address(this))) {
            aave.setUserUseReserveAsCollateral(_token, true);
        }

        setUint(setId, _amt);

        emit LogDeposit(token, _amt, getId, setId);
    }

    /**
     * @dev Withdraw ETH/ERC20_Token.
     * @param token token address to withdraw.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param amt token amount to withdraw.
     * @param getId Get token amount at this ID from `InstaMemory` Contract.
     * @param setId Set token amount at this ID in `InstaMemory` Contract.
    */
    function withdraw(address token, uint amt, uint getId, uint setId) external payable {
        uint _amt = getUint(getId, amt);

        AaveInterface aave = AaveInterface(getAaveProvider().getLendingPool());
        bool isEth = token == getEthAddr();
        address _token = isEth ? getWethAddr() : token;

        TokenInterface tokenContract = TokenInterface(_token);

        uint initialBal = tokenContract.balanceOf(address(this));
        aave.withdraw(_token, _amt, address(this));
        uint finalBal = tokenContract.balanceOf(address(this));

        _amt = sub(finalBal, initialBal);

        convertWethToEth(isEth, tokenContract, _amt);
        
        setUint(setId, _amt);

        emit LogWithdraw(token, _amt, getId, setId);
    }

    /**
     * @dev Borrow ETH/ERC20_Token.
     * @param token token address to borrow.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param amt token amount to borrow.
     * @param rateMode type of borrow debt.(For Stable: 1, Variable: 2)
     * @param getId Get token amount at this ID from `InstaMemory` Contract.
     * @param setId Set token amount at this ID in `InstaMemory` Contract.
    */
    function borrow(address token, uint amt, uint rateMode, uint getId, uint setId) external payable {
        uint _amt = getUint(getId, amt);

        AaveInterface aave = AaveInterface(getAaveProvider().getLendingPool());

        bool isEth = token == getEthAddr();
        address _token = isEth ? getWethAddr() : token;

        aave.borrow(_token, _amt, rateMode, getReferralCode(), address(this));
        convertWethToEth(isEth, TokenInterface(_token), _amt);

        setUint(setId, _amt);

        emit LogBorrow(token, _amt, rateMode, getId, setId);
    }

    /**
     * @dev Payback borrowed ETH/ERC20_Token.
     * @param token token address to payback.(For ETH: 0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE)
     * @param amt token amount to payback.
     * @param rateMode type of borrow debt.(For Stable: 1, Variable: 2)
     * @param getId Get token amount at this ID from `InstaMemory` Contract.
     * @param setId Set token amount at this ID in `InstaMemory` Contract.
    */
    function payback(address token, uint amt, uint rateMode, uint getId, uint setId) external payable {
        uint _amt = getUint(getId, amt);

        AaveInterface aave = AaveInterface(getAaveProvider().getLendingPool());
        AaveDataProviderInterface aaveData = getAaveDataProvider();

        bool isEth = token == getEthAddr();
        address _token = isEth ? getWethAddr() : token;

        TokenInterface tokenContract = TokenInterface(_token);

        _amt = _amt == uint(-1) ? getPaybackBalance(aaveData, _token, rateMode) : _amt;

        if (isEth) convertEthToWeth(isEth, tokenContract, _amt);

        tokenContract.approve(address(aave), _amt);

        aave.repay(_token, _amt, rateMode, address(this));

        setUint(setId, _amt);

        emit LogPayback(token, _amt, rateMode, getId, setId);
    }

    /**
     * @dev Enable collateral
     * @param tokens Array of tokens to enable collateral
    */
    function enableCollateral(address[] calldata tokens) external payable {
        uint _length = tokens.length;
        require(_length > 0, "0-tokens-not-allowed");

        AaveInterface aave = AaveInterface(getAaveProvider().getLendingPool());
        AaveDataProviderInterface aaveData = getAaveDataProvider();

        for (uint i = 0; i < _length; i++) {
            address token = tokens[i];
            if (getCollateralBalance(aaveData, token) > 0 && !getIsColl(aaveData, token, address(this))) {
                aave.setUserUseReserveAsCollateral(token, true);
            }
        }

        emit LogEnableCollateral(tokens);
    }
}

contract ConnectAaveV2 is BasicResolver {
    string public name = "AaveV2-v1.1";
}

Contract Security Audit

Contract ABI

[{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"rateMode","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogBorrow","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogDeposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"LogEnableCollateral","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"rateMode","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogPayback","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"getId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"setId","type":"uint256"}],"name":"LogWithdraw","type":"event"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"borrow","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"connectorID","outputs":[{"internalType":"uint256","name":"model","type":"uint256"},{"internalType":"uint256","name":"id","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tokens","type":"address[]"}],"name":"enableCollateral","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"rateMode","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"payback","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"amt","type":"uint256"},{"internalType":"uint256","name":"getId","type":"uint256"},{"internalType":"uint256","name":"setId","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]

60806040526040518060400160405280600b81526020017f4161766556322d76312e31000000000000000000000000000000000000000000815250600090805190602001906200005192919062000066565b503480156200005f57600080fd5b5062000115565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f10620000a957805160ff1916838001178555620000da565b82800160010185558215620000da579182015b82811115620000d9578251825591602001919060010190620000bc565b5b509050620000e99190620000ed565b5090565b6200011291905b808211156200010e576000816000905550600101620000f4565b5090565b90565b611e1580620001256000396000f3fe6080604052600436106100705760003560e01c80636abcd3de1161004e5780636abcd3de146100d8578063ce88b439146100f4578063da2b65c814610110578063eb15f7811461012c57610070565b806306fdde03146100755780634532d776146100a05780634e5e60e7146100bc575b600080fd5b34801561008157600080fd5b5061008a610158565b6040516100979190611b93565b60405180910390f35b6100ba60048036036100b59190810190611645565b6101f6565b005b6100d660048036036100d191908101906116a8565b6104ed565b005b6100f260048036036100ed91908101906116a8565b61077c565b005b61010e60048036036101099190810190611645565b610952565b005b61012a6004803603610125919081019061171f565b610d18565b005b34801561013857600080fd5b50610141610f0f565b60405161014f929190611c12565b60405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101ee5780601f106101c3576101008083540402835291602001916101ee565b820191906000526020600020905b8154815290600101906020018083116101d157829003601f168201915b505050505081565b60006102028385610f28565b9050600061020e610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025357600080fd5b505afa158015610267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061028b919081019061161c565b90506000610297610fee565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161490506000816102d457876102dd565b6102dc61100a565b5b9050600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161031f91906119c5565b60206040518083038186803b15801561033757600080fd5b505afa15801561034b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061036f9190810190611764565b90508473ffffffffffffffffffffffffffffffffffffffff166369328dec8488306040518463ffffffff1660e01b81526004016103ae93929190611a5b565b600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161041b91906119c5565b60206040518083038186803b15801561043357600080fd5b505afa158015610447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061046b9190810190611764565b90506104778183611026565b965061048485848961103a565b61048e888861111e565b8a73ffffffffffffffffffffffffffffffffffffffff167f9744d0a120f7c7d7906cfe3c05b50669fb49aa6d778b099d5d6edc386dee5b59888b8b6040516104d893929190611c3b565b60405180910390a25050505050505050505050565b60006104f98386610f28565b90506000610505610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561054a57600080fd5b505afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610582919081019061161c565b9050600061058e61119f565b9050600061059a610fee565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161490506000816105d757896105e0565b6105df61100a565b5b905060008190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86146106145785610620565b61061f84838b6111bb565b5b9550821561063457610633838288611272565b5b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b386886040518363ffffffff1660e01b815260040161066f929190611a32565b600060405180830381600087803b15801561068957600080fd5b505af115801561069d573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663573ade8183888c306040518563ffffffff1660e01b81526004016106e09493929190611ad7565b600060405180830381600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b5050505061071c878761111e565b888b73ffffffffffffffffffffffffffffffffffffffff167fda2016a89958b5c9b3ee30a3e0858b2dfcce432f8792d8f71dbf040e295e98e2888b8b60405161076793929190611c3b565b60405180910390a35050505050505050505050565b60006107888386610f28565b90506000610794610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d957600080fd5b505afa1580156107ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610811919081019061161c565b9050600061081d610fee565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614905060008161085a5788610863565b61086261100a565b5b90508273ffffffffffffffffffffffffffffffffffffffff1663a415bcad82868a61088c6112df565b306040518663ffffffff1660e01b81526004016108ad959493929190611b1c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050506108ea82828661103a565b6108f4858561111e565b868973ffffffffffffffffffffffffffffffffffffffff167f7a820240d9f3ec4b998f20c82601ad5d316c006138f52c435c349ef46eae7ffb86898960405161093f93929190611c3b565b60405180910390a3505050505050505050565b600061095e8385610f28565b9050600061096a610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109af57600080fd5b505afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109e7919081019061161c565b905060006109f361119f565b905060006109ff610fee565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16149050600081610a3c5788610a45565b610a4461100a565b5b905060008190508215610a93577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8614610a7f5785610a81565b475b9550610a8e838288611272565b610b4d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8614610ac05785610b4a565b8073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610af991906119c5565b60206040518083038186803b158015610b1157600080fd5b505afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b499190810190611764565b5b95505b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b386886040518363ffffffff1660e01b8152600401610b88929190611a32565b600060405180830381600087803b158015610ba257600080fd5b505af1158015610bb6573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663e8eda9df838830610be16112df565b6040518563ffffffff1660e01b8152600401610c009493929190611a92565b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b50505050610c3d8483306112e9565b610cb0578473ffffffffffffffffffffffffffffffffffffffff16635a3b74b98360016040518363ffffffff1660e01b8152600401610c7d929190611a09565b600060405180830381600087803b158015610c9757600080fd5b505af1158015610cab573d6000803e3d6000fd5b505050505b610cba878761111e565b8973ffffffffffffffffffffffffffffffffffffffff167f4b2bcb0ca50531683faa51870e1018aa0d7272c7f2acc5399389b0c0493865d9878a8a604051610d0493929190611c3b565b60405180910390a250505050505050505050565b600082829050905060008111610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90611bd7565b60405180910390fd5b6000610d6d610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610db257600080fd5b505afa158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dea919081019061161c565b90506000610df661119f565b905060008090505b83811015610ece576000868683818110610e1457fe5b9050602002016020610e2991908101906115f3565b90506000610e3784836113ae565b118015610e4c5750610e4a8382306112e9565b155b15610ec0578373ffffffffffffffffffffffffffffffffffffffff16635a3b74b98260016040518363ffffffff1660e01b8152600401610e8d929190611a09565b600060405180830381600087803b158015610ea757600080fd5b505af1158015610ebb573d6000803e3d6000fd5b505050505b508080600101915050610dfe565b507f212f3c548fe60533d258f99a4d5a1b8578b6467e650b7ff5059b4c77f8e82cdb8585604051610f00929190611b6f565b60405180910390a15050505050565b6000806001604281915080905080925081935050509091565b6000808314610fc857610f3961146a565b73ffffffffffffffffffffffffffffffffffffffff1663a9c70eaa846040518263ffffffff1660e01b8152600401610f719190611bf7565b602060405180830381600087803b158015610f8b57600080fd5b505af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fc39190810190611764565b610fca565b815b905092915050565b600073b53c1a33016b2dc2ff3653530bff1848a515c8c5905090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905090565b60006110328383611486565b905092915050565b8215611119578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b815260040161107b929190611a32565b600060405180830381600087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016110e69190611bf7565b600060405180830381600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b505050505b505050565b6000821461119b5761112e61146a565b73ffffffffffffffffffffffffffffffffffffffff166361e3c94483836040518363ffffffff1660e01b8152600401611168929190611c12565b600060405180830381600087803b15801561118257600080fd5b505af1158015611196573d6000803e3d6000fd5b505050505b5050565b600073057835ad21a177dbdd3090bb1cae03eacf78fc6d905090565b60008060008573ffffffffffffffffffffffffffffffffffffffff166328dd2d0186306040518363ffffffff1660e01b81526004016111fb9291906119e0565b6101206040518083038186803b15801561121457600080fd5b505afa158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061124c919081019061178d565b5050505050509250925050600184146112655780611267565b815b925050509392505050565b82156112da578173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156112c057600080fd5b505af11580156112d4573d6000803e3d6000fd5b50505050505b505050565b6000610c9c905090565b60008373ffffffffffffffffffffffffffffffffffffffff166328dd2d0184846040518363ffffffff1660e01b81526004016113269291906119e0565b6101206040518083038186803b15801561133f57600080fd5b505afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611377919081019061178d565b9091929394959697509091929394959650909192939495509091929394509091929350909192509091509050809150509392505050565b60008273ffffffffffffffffffffffffffffffffffffffff166328dd2d0183306040518363ffffffff1660e01b81526004016113eb9291906119e0565b6101206040518083038186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061143c919081019061178d565b9091929394959650909192939495509091929394509091929350909192509091509050508091505092915050565b6000738a5419cfc711b2343c17a6abf4b2bafabb06957f905090565b60006114c883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114d0565b905092915050565b6000838311158290611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f9190611bb5565b60405180910390fd5b5060008385039050809150509392505050565b60008135905061153a81611d83565b92915050565b60008151905061154f81611d83565b92915050565b60008083601f84011261156757600080fd5b8235905067ffffffffffffffff81111561158057600080fd5b60208301915083602082028301111561159857600080fd5b9250929050565b6000815190506115ae81611d9a565b92915050565b6000813590506115c381611db1565b92915050565b6000815190506115d881611db1565b92915050565b6000815190506115ed81611dc8565b92915050565b60006020828403121561160557600080fd5b60006116138482850161152b565b91505092915050565b60006020828403121561162e57600080fd5b600061163c84828501611540565b91505092915050565b6000806000806080858703121561165b57600080fd5b60006116698782880161152b565b945050602061167a878288016115b4565b935050604061168b878288016115b4565b925050606061169c878288016115b4565b91505092959194509250565b600080600080600060a086880312156116c057600080fd5b60006116ce8882890161152b565b95505060206116df888289016115b4565b94505060406116f0888289016115b4565b9350506060611701888289016115b4565b9250506080611712888289016115b4565b9150509295509295909350565b6000806020838503121561173257600080fd5b600083013567ffffffffffffffff81111561174c57600080fd5b61175885828601611555565b92509250509250929050565b60006020828403121561177657600080fd5b6000611784848285016115c9565b91505092915050565b60008060008060008060008060006101208a8c0312156117ac57600080fd5b60006117ba8c828d016115c9565b99505060206117cb8c828d016115c9565b98505060406117dc8c828d016115c9565b97505060606117ed8c828d016115c9565b96505060806117fe8c828d016115c9565b95505060a061180f8c828d016115c9565b94505060c06118208c828d016115c9565b93505060e06118318c828d016115de565b9250506101006118438c828d0161159f565b9150509295985092959850929598565b600061185f838361186b565b60208301905092915050565b61187481611cd8565b82525050565b61188381611cd8565b82525050565b60006118958385611c9f565b93506118a082611c72565b8060005b858110156118d9576118b68284611cc1565b6118c08882611853565b97506118cb83611c92565b9250506001810190506118a4565b5085925050509392505050565b6118ef81611cea565b82525050565b600061190082611c87565b61190a8185611cb0565b935061191a818560208601611d3f565b61192381611d72565b840191505092915050565b600061193982611c7c565b6119438185611cb0565b9350611953818560208601611d3f565b61195c81611d72565b840191505092915050565b6000611974601483611cb0565b91507f302d746f6b656e732d6e6f742d616c6c6f7765640000000000000000000000006000830152602082019050919050565b6119b081611cf6565b82525050565b6119bf81611d24565b82525050565b60006020820190506119da600083018461187a565b92915050565b60006040820190506119f5600083018561187a565b611a02602083018461187a565b9392505050565b6000604082019050611a1e600083018561187a565b611a2b60208301846118e6565b9392505050565b6000604082019050611a47600083018561187a565b611a5460208301846119b6565b9392505050565b6000606082019050611a70600083018661187a565b611a7d60208301856119b6565b611a8a604083018461187a565b949350505050565b6000608082019050611aa7600083018761187a565b611ab460208301866119b6565b611ac1604083018561187a565b611ace60608301846119a7565b95945050505050565b6000608082019050611aec600083018761187a565b611af960208301866119b6565b611b0660408301856119b6565b611b13606083018461187a565b95945050505050565b600060a082019050611b31600083018861187a565b611b3e60208301876119b6565b611b4b60408301866119b6565b611b5860608301856119a7565b611b65608083018461187a565b9695505050505050565b60006020820190508181036000830152611b8a818486611889565b90509392505050565b60006020820190508181036000830152611bad818461192e565b905092915050565b60006020820190508181036000830152611bcf81846118f5565b905092915050565b60006020820190508181036000830152611bf081611967565b9050919050565b6000602082019050611c0c60008301846119b6565b92915050565b6000604082019050611c2760008301856119b6565b611c3460208301846119b6565b9392505050565b6000606082019050611c5060008301866119b6565b611c5d60208301856119b6565b611c6a60408301846119b6565b949350505050565b6000819050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611cd0602084018461152b565b905092915050565b6000611ce382611d04565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b60005b83811015611d5d578082015181840152602081019050611d42565b83811115611d6c576000848401525b50505050565b6000601f19601f8301169050919050565b611d8c81611cd8565b8114611d9757600080fd5b50565b611da381611cea565b8114611dae57600080fd5b50565b611dba81611d24565b8114611dc557600080fd5b50565b611dd181611d2e565b8114611ddc57600080fd5b5056fea2646970667358221220fe84969c6e8297ef80372d8b6340080ef0a33f673c1681c56bc50af0a5f3db2564736f6c63430006000033

Deployed Bytecode

0x6080604052600436106100705760003560e01c80636abcd3de1161004e5780636abcd3de146100d8578063ce88b439146100f4578063da2b65c814610110578063eb15f7811461012c57610070565b806306fdde03146100755780634532d776146100a05780634e5e60e7146100bc575b600080fd5b34801561008157600080fd5b5061008a610158565b6040516100979190611b93565b60405180910390f35b6100ba60048036036100b59190810190611645565b6101f6565b005b6100d660048036036100d191908101906116a8565b6104ed565b005b6100f260048036036100ed91908101906116a8565b61077c565b005b61010e60048036036101099190810190611645565b610952565b005b61012a6004803603610125919081019061171f565b610d18565b005b34801561013857600080fd5b50610141610f0f565b60405161014f929190611c12565b60405180910390f35b60008054600181600116156101000203166002900480601f0160208091040260200160405190810160405280929190818152602001828054600181600116156101000203166002900480156101ee5780601f106101c3576101008083540402835291602001916101ee565b820191906000526020600020905b8154815290600101906020018083116101d157829003601f168201915b505050505081565b60006102028385610f28565b9050600061020e610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561025357600080fd5b505afa158015610267573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061028b919081019061161c565b90506000610297610fee565b73ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff161490506000816102d457876102dd565b6102dc61100a565b5b9050600081905060008173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161031f91906119c5565b60206040518083038186803b15801561033757600080fd5b505afa15801561034b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061036f9190810190611764565b90508473ffffffffffffffffffffffffffffffffffffffff166369328dec8488306040518463ffffffff1660e01b81526004016103ae93929190611a5b565b600060405180830381600087803b1580156103c857600080fd5b505af11580156103dc573d6000803e3d6000fd5b5050505060008273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b815260040161041b91906119c5565b60206040518083038186803b15801561043357600080fd5b505afa158015610447573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061046b9190810190611764565b90506104778183611026565b965061048485848961103a565b61048e888861111e565b8a73ffffffffffffffffffffffffffffffffffffffff167f9744d0a120f7c7d7906cfe3c05b50669fb49aa6d778b099d5d6edc386dee5b59888b8b6040516104d893929190611c3b565b60405180910390a25050505050505050505050565b60006104f98386610f28565b90506000610505610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b15801561054a57600080fd5b505afa15801561055e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610582919081019061161c565b9050600061058e61119f565b9050600061059a610fee565b73ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff161490506000816105d757896105e0565b6105df61100a565b5b905060008190507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff86146106145785610620565b61061f84838b6111bb565b5b9550821561063457610633838288611272565b5b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b386886040518363ffffffff1660e01b815260040161066f929190611a32565b600060405180830381600087803b15801561068957600080fd5b505af115801561069d573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663573ade8183888c306040518563ffffffff1660e01b81526004016106e09493929190611ad7565b600060405180830381600087803b1580156106fa57600080fd5b505af115801561070e573d6000803e3d6000fd5b5050505061071c878761111e565b888b73ffffffffffffffffffffffffffffffffffffffff167fda2016a89958b5c9b3ee30a3e0858b2dfcce432f8792d8f71dbf040e295e98e2888b8b60405161076793929190611c3b565b60405180910390a35050505050505050505050565b60006107888386610f28565b90506000610794610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156107d957600080fd5b505afa1580156107ed573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610811919081019061161c565b9050600061081d610fee565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff1614905060008161085a5788610863565b61086261100a565b5b90508273ffffffffffffffffffffffffffffffffffffffff1663a415bcad82868a61088c6112df565b306040518663ffffffff1660e01b81526004016108ad959493929190611b1c565b600060405180830381600087803b1580156108c757600080fd5b505af11580156108db573d6000803e3d6000fd5b505050506108ea82828661103a565b6108f4858561111e565b868973ffffffffffffffffffffffffffffffffffffffff167f7a820240d9f3ec4b998f20c82601ad5d316c006138f52c435c349ef46eae7ffb86898960405161093f93929190611c3b565b60405180910390a3505050505050505050565b600061095e8385610f28565b9050600061096a610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156109af57600080fd5b505afa1580156109c3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109e7919081019061161c565b905060006109f361119f565b905060006109ff610fee565b73ffffffffffffffffffffffffffffffffffffffff168873ffffffffffffffffffffffffffffffffffffffff16149050600081610a3c5788610a45565b610a4461100a565b5b905060008190508215610a93577fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8614610a7f5785610a81565b475b9550610a8e838288611272565b610b4d565b7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8614610ac05785610b4a565b8073ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401610af991906119c5565b60206040518083038186803b158015610b1157600080fd5b505afa158015610b25573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610b499190810190611764565b5b95505b8073ffffffffffffffffffffffffffffffffffffffff1663095ea7b386886040518363ffffffff1660e01b8152600401610b88929190611a32565b600060405180830381600087803b158015610ba257600080fd5b505af1158015610bb6573d6000803e3d6000fd5b505050508473ffffffffffffffffffffffffffffffffffffffff1663e8eda9df838830610be16112df565b6040518563ffffffff1660e01b8152600401610c009493929190611a92565b600060405180830381600087803b158015610c1a57600080fd5b505af1158015610c2e573d6000803e3d6000fd5b50505050610c3d8483306112e9565b610cb0578473ffffffffffffffffffffffffffffffffffffffff16635a3b74b98360016040518363ffffffff1660e01b8152600401610c7d929190611a09565b600060405180830381600087803b158015610c9757600080fd5b505af1158015610cab573d6000803e3d6000fd5b505050505b610cba878761111e565b8973ffffffffffffffffffffffffffffffffffffffff167f4b2bcb0ca50531683faa51870e1018aa0d7272c7f2acc5399389b0c0493865d9878a8a604051610d0493929190611c3b565b60405180910390a250505050505050505050565b600082829050905060008111610d63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d5a90611bd7565b60405180910390fd5b6000610d6d610fd2565b73ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b158015610db257600080fd5b505afa158015610dc6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dea919081019061161c565b90506000610df661119f565b905060008090505b83811015610ece576000868683818110610e1457fe5b9050602002016020610e2991908101906115f3565b90506000610e3784836113ae565b118015610e4c5750610e4a8382306112e9565b155b15610ec0578373ffffffffffffffffffffffffffffffffffffffff16635a3b74b98260016040518363ffffffff1660e01b8152600401610e8d929190611a09565b600060405180830381600087803b158015610ea757600080fd5b505af1158015610ebb573d6000803e3d6000fd5b505050505b508080600101915050610dfe565b507f212f3c548fe60533d258f99a4d5a1b8578b6467e650b7ff5059b4c77f8e82cdb8585604051610f00929190611b6f565b60405180910390a15050505050565b6000806001604281915080905080925081935050509091565b6000808314610fc857610f3961146a565b73ffffffffffffffffffffffffffffffffffffffff1663a9c70eaa846040518263ffffffff1660e01b8152600401610f719190611bf7565b602060405180830381600087803b158015610f8b57600080fd5b505af1158015610f9f573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610fc39190810190611764565b610fca565b815b905092915050565b600073b53c1a33016b2dc2ff3653530bff1848a515c8c5905090565b600073eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee905090565b600073c02aaa39b223fe8d0a0e5c4f27ead9083c756cc2905090565b60006110328383611486565b905092915050565b8215611119578173ffffffffffffffffffffffffffffffffffffffff1663095ea7b383836040518363ffffffff1660e01b815260040161107b929190611a32565b600060405180830381600087803b15801561109557600080fd5b505af11580156110a9573d6000803e3d6000fd5b505050508173ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d826040518263ffffffff1660e01b81526004016110e69190611bf7565b600060405180830381600087803b15801561110057600080fd5b505af1158015611114573d6000803e3d6000fd5b505050505b505050565b6000821461119b5761112e61146a565b73ffffffffffffffffffffffffffffffffffffffff166361e3c94483836040518363ffffffff1660e01b8152600401611168929190611c12565b600060405180830381600087803b15801561118257600080fd5b505af1158015611196573d6000803e3d6000fd5b505050505b5050565b600073057835ad21a177dbdd3090bb1cae03eacf78fc6d905090565b60008060008573ffffffffffffffffffffffffffffffffffffffff166328dd2d0186306040518363ffffffff1660e01b81526004016111fb9291906119e0565b6101206040518083038186803b15801561121457600080fd5b505afa158015611228573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061124c919081019061178d565b5050505050509250925050600184146112655780611267565b815b925050509392505050565b82156112da578173ffffffffffffffffffffffffffffffffffffffff1663d0e30db0826040518263ffffffff1660e01b81526004016000604051808303818588803b1580156112c057600080fd5b505af11580156112d4573d6000803e3d6000fd5b50505050505b505050565b6000610c9c905090565b60008373ffffffffffffffffffffffffffffffffffffffff166328dd2d0184846040518363ffffffff1660e01b81526004016113269291906119e0565b6101206040518083038186803b15801561133f57600080fd5b505afa158015611353573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250611377919081019061178d565b9091929394959697509091929394959650909192939495509091929394509091929350909192509091509050809150509392505050565b60008273ffffffffffffffffffffffffffffffffffffffff166328dd2d0183306040518363ffffffff1660e01b81526004016113eb9291906119e0565b6101206040518083038186803b15801561140457600080fd5b505afa158015611418573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061143c919081019061178d565b9091929394959650909192939495509091929394509091929350909192509091509050508091505092915050565b6000738a5419cfc711b2343c17a6abf4b2bafabb06957f905090565b60006114c883836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f7700008152506114d0565b905092915050565b6000838311158290611518576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161150f9190611bb5565b60405180910390fd5b5060008385039050809150509392505050565b60008135905061153a81611d83565b92915050565b60008151905061154f81611d83565b92915050565b60008083601f84011261156757600080fd5b8235905067ffffffffffffffff81111561158057600080fd5b60208301915083602082028301111561159857600080fd5b9250929050565b6000815190506115ae81611d9a565b92915050565b6000813590506115c381611db1565b92915050565b6000815190506115d881611db1565b92915050565b6000815190506115ed81611dc8565b92915050565b60006020828403121561160557600080fd5b60006116138482850161152b565b91505092915050565b60006020828403121561162e57600080fd5b600061163c84828501611540565b91505092915050565b6000806000806080858703121561165b57600080fd5b60006116698782880161152b565b945050602061167a878288016115b4565b935050604061168b878288016115b4565b925050606061169c878288016115b4565b91505092959194509250565b600080600080600060a086880312156116c057600080fd5b60006116ce8882890161152b565b95505060206116df888289016115b4565b94505060406116f0888289016115b4565b9350506060611701888289016115b4565b9250506080611712888289016115b4565b9150509295509295909350565b6000806020838503121561173257600080fd5b600083013567ffffffffffffffff81111561174c57600080fd5b61175885828601611555565b92509250509250929050565b60006020828403121561177657600080fd5b6000611784848285016115c9565b91505092915050565b60008060008060008060008060006101208a8c0312156117ac57600080fd5b60006117ba8c828d016115c9565b99505060206117cb8c828d016115c9565b98505060406117dc8c828d016115c9565b97505060606117ed8c828d016115c9565b96505060806117fe8c828d016115c9565b95505060a061180f8c828d016115c9565b94505060c06118208c828d016115c9565b93505060e06118318c828d016115de565b9250506101006118438c828d0161159f565b9150509295985092959850929598565b600061185f838361186b565b60208301905092915050565b61187481611cd8565b82525050565b61188381611cd8565b82525050565b60006118958385611c9f565b93506118a082611c72565b8060005b858110156118d9576118b68284611cc1565b6118c08882611853565b97506118cb83611c92565b9250506001810190506118a4565b5085925050509392505050565b6118ef81611cea565b82525050565b600061190082611c87565b61190a8185611cb0565b935061191a818560208601611d3f565b61192381611d72565b840191505092915050565b600061193982611c7c565b6119438185611cb0565b9350611953818560208601611d3f565b61195c81611d72565b840191505092915050565b6000611974601483611cb0565b91507f302d746f6b656e732d6e6f742d616c6c6f7765640000000000000000000000006000830152602082019050919050565b6119b081611cf6565b82525050565b6119bf81611d24565b82525050565b60006020820190506119da600083018461187a565b92915050565b60006040820190506119f5600083018561187a565b611a02602083018461187a565b9392505050565b6000604082019050611a1e600083018561187a565b611a2b60208301846118e6565b9392505050565b6000604082019050611a47600083018561187a565b611a5460208301846119b6565b9392505050565b6000606082019050611a70600083018661187a565b611a7d60208301856119b6565b611a8a604083018461187a565b949350505050565b6000608082019050611aa7600083018761187a565b611ab460208301866119b6565b611ac1604083018561187a565b611ace60608301846119a7565b95945050505050565b6000608082019050611aec600083018761187a565b611af960208301866119b6565b611b0660408301856119b6565b611b13606083018461187a565b95945050505050565b600060a082019050611b31600083018861187a565b611b3e60208301876119b6565b611b4b60408301866119b6565b611b5860608301856119a7565b611b65608083018461187a565b9695505050505050565b60006020820190508181036000830152611b8a818486611889565b90509392505050565b60006020820190508181036000830152611bad818461192e565b905092915050565b60006020820190508181036000830152611bcf81846118f5565b905092915050565b60006020820190508181036000830152611bf081611967565b9050919050565b6000602082019050611c0c60008301846119b6565b92915050565b6000604082019050611c2760008301856119b6565b611c3460208301846119b6565b9392505050565b6000606082019050611c5060008301866119b6565b611c5d60208301856119b6565b611c6a60408301846119b6565b949350505050565b6000819050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000611cd0602084018461152b565b905092915050565b6000611ce382611d04565b9050919050565b60008115159050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600064ffffffffff82169050919050565b60005b83811015611d5d578082015181840152602081019050611d42565b83811115611d6c576000848401525b50505050565b6000601f19601f8301169050919050565b611d8c81611cd8565b8114611d9757600080fd5b50565b611da381611cea565b8114611dae57600080fd5b50565b611dba81611d24565b8114611dc557600080fd5b50565b611dd181611d2e565b8114611ddc57600080fd5b5056fea2646970667358221220fe84969c6e8297ef80372d8b6340080ef0a33f673c1681c56bc50af0a5f3db2564736f6c63430006000033

Deployed Bytecode Sourcemap

18409:85:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18456:34;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18456:34:0;;;:::i;:::-;;;;;;;;;;;;;;;;14564:771;;;;;;;;;;;;;;;;:::i;:::-;;16786:844;;;;;;;;;;;;;;;;:::i;:::-;;15766:577;;;;;;;;;;;;;;;;:::i;:::-;;13126:1074;;;;;;;;;;;;;;;;:::i;:::-;;17745:657;;;;;;;;;;;;;;;;:::i;:::-;;1845:98;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1845:98:0;;;:::i;:::-;;;;;;;;;;;;;;;;;18456:34;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14564:771::-;14659:9;14671:19;14679:5;14686:3;14671:7;:19::i;:::-;14659:31;;14703:18;14738:17;:15;:17::i;:::-;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14738:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14738:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14738:34:0;;;;;;;;;14703:70;;14784:10;14806:12;:10;:12::i;:::-;14797:21;;:5;:21;;;14784:34;;14829:14;14846:5;:29;;14870:5;14846:29;;;14854:13;:11;:13::i;:::-;14846:29;14829:46;;14888:28;14934:6;14888:53;;14954:15;14972:13;:23;;;15004:4;14972:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14972:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14972:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;14972:38:0;;;;;;;;;14954:56;;15021:4;:13;;;15035:6;15043:4;15057;15021:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15021:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15021:42:0;;;;15074:13;15090;:23;;;15122:4;15090:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15090:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15090:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15090:38:0;;;;;;;;;15074:54;;15148:25;15152:8;15162:10;15148:3;:25::i;:::-;15141:32;;15186:44;15203:5;15210:13;15225:4;15186:16;:44::i;:::-;15251:20;15259:5;15266:4;15251:7;:20::i;:::-;15301:5;15289:38;;;15308:4;15314:5;15321;15289:38;;;;;;;;;;;;;;;;;14564:771;;;;;;;;;;;:::o;16786:844::-;16895:9;16907:19;16915:5;16922:3;16907:7;:19::i;:::-;16895:31;;16939:18;16974:17;:15;:17::i;:::-;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16974:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16974:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;16974:34:0;;;;;;;;;16939:70;;17020:34;17057:21;:19;:21::i;:::-;17020:58;;17091:10;17113:12;:10;:12::i;:::-;17104:21;;:5;:21;;;17091:34;;17136:14;17153:5;:29;;17177:5;17153:29;;;17161:13;:11;:13::i;:::-;17153:29;17136:46;;17195:28;17241:6;17195:53;;17281:2;17268:4;:16;:71;;17335:4;17268:71;;;17287:45;17305:8;17315:6;17323:8;17287:17;:45::i;:::-;17268:71;17261:78;;17356:5;17352:55;;;17363:44;17380:5;17387:13;17402:4;17363:16;:44::i;:::-;17352:55;17420:13;:21;;;17450:4;17457;17420:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17420:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17420:42:0;;;;17475:4;:10;;;17486:6;17494:4;17500:8;17518:4;17475:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17475:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17475:49:0;;;;17537:20;17545:5;17552:4;17537:7;:20::i;:::-;17599:8;17586:5;17575:47;;;17593:4;17609:5;17616;17575:47;;;;;;;;;;;;;;;;;16786:844;;;;;;;;;;;:::o;15766:577::-;15874:9;15886:19;15894:5;15901:3;15886:7;:19::i;:::-;15874:31;;15918:18;15953:17;:15;:17::i;:::-;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;15953:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;15953:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;15953:34:0;;;;;;;;;15918:70;;16001:10;16023:12;:10;:12::i;:::-;16014:21;;:5;:21;;;16001:34;;16046:14;16063:5;:29;;16087:5;16063:29;;;16071:13;:11;:13::i;:::-;16063:29;16046:46;;16105:4;:11;;;16117:6;16125:4;16131:8;16141:17;:15;:17::i;:::-;16168:4;16105:69;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;16105:69:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;16105:69:0;;;;16185:53;16202:5;16224:6;16233:4;16185:16;:53::i;:::-;16251:20;16259:5;16266:4;16251:7;:20::i;:::-;16312:8;16299:5;16289:46;;;16306:4;16322:5;16329;16289:46;;;;;;;;;;;;;;;;;15766:577;;;;;;;;;:::o;13126:1074::-;13220:9;13232:19;13240:5;13247:3;13232:7;:19::i;:::-;13220:31;;13264:18;13299:17;:15;:17::i;:::-;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13299:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13299:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13299:34:0;;;;;;;;;13264:70;;13345:34;13382:21;:19;:21::i;:::-;13345:58;;13416:10;13438:12;:10;:12::i;:::-;13429:21;;:5;:21;;;13416:34;;13461:14;13478:5;:29;;13502:5;13478:29;;;13486:13;:11;:13::i;:::-;13478:29;13461:46;;13520:28;13566:6;13520:53;;13590:5;13586:255;;;13632:2;13619:4;:16;:47;;13662:4;13619:47;;;13638:21;13619:47;13612:54;;13681:44;13698:5;13705:13;13720:4;13681:16;:44::i;:::-;13586:255;;;13778:2;13765:4;:16;:64;;13825:4;13765:64;;;13784:13;:23;;;13816:4;13784:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13784:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13784:38:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;13784:38:0;;;;;;;;;13765:64;13758:71;;13586:255;13853:13;:21;;;13883:4;13890;13853:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13853:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13853:42:0;;;;13908:4;:12;;;13921:6;13929:4;13943;13950:17;:15;:17::i;:::-;13908:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;13908:60:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;13908:60:0;;;;13986:42;13996:8;14006:6;14022:4;13986:9;:42::i;:::-;13981:124;;14045:4;:34;;;14080:6;14088:4;14045:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;14045:48:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;14045:48:0;;;;13981:124;14117:20;14125:5;14132:4;14117:7;:20::i;:::-;14166:5;14155:37;;;14173:4;14179:5;14186;14155:37;;;;;;;;;;;;;;;;;13126:1074;;;;;;;;;;:::o;17745:657::-;17826:12;17841:6;;:13;;17826:28;;17883:1;17873:7;:11;17865:44;;;;;;;;;;;;;;;;;;;;;;17922:18;17957:17;:15;:17::i;:::-;:32;;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;17957:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;17957:34:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;17957:34:0;;;;;;;;;17922:70;;18003:34;18040:21;:19;:21::i;:::-;18003:58;;18079:6;18088:1;18079:10;;18074:276;18095:7;18091:1;:11;18074:276;;;18124:13;18140:6;;18147:1;18140:9;;;;;;;;;;;;;;;;;;;;;;18124:25;;18208:1;18168:37;18189:8;18199:5;18168:20;:37::i;:::-;:41;:87;;;;;18214:41;18224:8;18234:5;18249:4;18214:9;:41::i;:::-;18213:42;18168:87;18164:175;;;18276:4;:34;;;18311:5;18318:4;18276:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;18276:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;18276:47:0;;;;18164:175;18074:276;18104:3;;;;;;;18074:276;;;;18367:27;18387:6;;18367:27;;;;;;;;;;;;;;;;17745:657;;;;;:::o;1845:98::-;1888:10;1900:7;1931:1;1934:2;1916:21;;;;;;;;;;;;;;1845:98;;:::o;1428:164::-;1485:14;1529:1;1520:5;:10;:66;;1555:15;:13;:15::i;:::-;1539:40;;;1580:5;1539:47;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1539:47:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1539:47:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;1539:47:0;;;;;;;;;1520:66;;;1533:3;1520:66;1508:78;;1428:164;;;;:::o;10051:301::-;10101:32;10186:42;10146:83;;10051:301;:::o;822:131::-;867:7;890:42;883:49;;822:131;:::o;10764:232::-;10810:7;10837:42;10830:49;;10764:232;:::o;7442:103::-;7502:6;7521:18;7534:1;7537;7521:12;:18::i;:::-;7517:22;;7442:103;;;;:::o;11508:210::-;11603:5;11600:111;;;11625:5;:13;;;11647:5;11655:6;11625:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11625:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11625:37:0;;;;11677:5;:14;;;11692:6;11677:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11677:22:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11677:22:0;;;;11600:111;11508:210;;;:::o;1661:137::-;1737:1;1728:5;:10;1724:68;;1756:15;:13;:15::i;:::-;1740:40;;;1781:5;1788:3;1740:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;1740:52:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;1740:52:0;;;;1724:68;1661:137;;:::o;10422:284::-;10476:25;10547:42;10514:76;;10422:284;:::o;11726:302::-;11842:4;11862:15;11879:17;11912:8;:27;;;11940:5;11955:4;11912:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11912:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11912:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11912:49:0;;;;;;;;;11859:102;;;;;;;;;;;11991:1;11979:8;:13;:41;;12008:12;11979:41;;;11995:10;11979:41;11972:48;;;;11726:302;;;;;:::o;11360:140::-;11456:5;11453:39;;;11463:5;:13;;;11483:6;11463:29;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11463:29:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11463:29:0;;;;;11453:39;11360:140;;;:::o;11052:88::-;11102:6;11128:4;11121:11;;11052:88;:::o;11148:204::-;11255:10;11304:8;:27;;;11332:5;11339:4;11304:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11304:40:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11304:40:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;11304:40:0;;;;;;;;;11278:66;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11148:204;;;;;:::o;12036:205::-;12140:8;12184;:27;;;12212:5;12227:4;12184:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12184:49:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12184:49:0;;;;;;;101:4:-1;97:9;90:4;84;80:15;76:31;69:5;65:43;126:6;120:4;113:20;0:138;12184:49:0;;;;;;;;;12161:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12036:205;;;;:::o;1015:142::-;1063:7;1086:42;1079:49;;1015:142;:::o;3256:136::-;3314:7;3341:43;3345:1;3348;3341:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;3334:50;;3256:136;;;;:::o;3695:192::-;3781:7;3814:1;3809;:6;;3817:12;3801:29;;;;;;;;;;;;;;;;;;;;;;;;;3841:9;3857:1;3853;:5;3841:17;;3878:1;3871:8;;;3695:192;;;;;:::o;5:130:-1:-;;85:6;72:20;63:29;;97:33;124:5;97:33;;;57:78;;;;;142:134;;226:6;220:13;211:22;;238:33;265:5;238:33;;;205:71;;;;;301:352;;;431:3;424:4;416:6;412:17;408:27;398:2;;449:1;446;439:12;398:2;482:6;469:20;459:30;;509:18;501:6;498:30;495:2;;;541:1;538;531:12;495:2;575:4;567:6;563:17;551:29;;626:3;618:4;610:6;606:17;596:8;592:32;589:41;586:2;;;643:1;640;633:12;586:2;391:262;;;;;;661:128;;742:6;736:13;727:22;;754:30;778:5;754:30;;;721:68;;;;;796:130;;876:6;863:20;854:29;;888:33;915:5;888:33;;;848:78;;;;;933:134;;1017:6;1011:13;1002:22;;1029:33;1056:5;1029:33;;;996:71;;;;;1074:132;;1157:6;1151:13;1142:22;;1169:32;1195:5;1169:32;;;1136:70;;;;;1213:241;;1317:2;1305:9;1296:7;1292:23;1288:32;1285:2;;;1333:1;1330;1323:12;1285:2;1368:1;1385:53;1430:7;1421:6;1410:9;1406:22;1385:53;;;1375:63;;1347:97;1279:175;;;;;1461:263;;1576:2;1564:9;1555:7;1551:23;1547:32;1544:2;;;1592:1;1589;1582:12;1544:2;1627:1;1644:64;1700:7;1691:6;1680:9;1676:22;1644:64;;;1634:74;;1606:108;1538:186;;;;;1731:617;;;;;1886:3;1874:9;1865:7;1861:23;1857:33;1854:2;;;1903:1;1900;1893:12;1854:2;1938:1;1955:53;2000:7;1991:6;1980:9;1976:22;1955:53;;;1945:63;;1917:97;2045:2;2063:53;2108:7;2099:6;2088:9;2084:22;2063:53;;;2053:63;;2024:98;2153:2;2171:53;2216:7;2207:6;2196:9;2192:22;2171:53;;;2161:63;;2132:98;2261:2;2279:53;2324:7;2315:6;2304:9;2300:22;2279:53;;;2269:63;;2240:98;1848:500;;;;;;;;2355:743;;;;;;2527:3;2515:9;2506:7;2502:23;2498:33;2495:2;;;2544:1;2541;2534:12;2495:2;2579:1;2596:53;2641:7;2632:6;2621:9;2617:22;2596:53;;;2586:63;;2558:97;2686:2;2704:53;2749:7;2740:6;2729:9;2725:22;2704:53;;;2694:63;;2665:98;2794:2;2812:53;2857:7;2848:6;2837:9;2833:22;2812:53;;;2802:63;;2773:98;2902:2;2920:53;2965:7;2956:6;2945:9;2941:22;2920:53;;;2910:63;;2881:98;3010:3;3029:53;3074:7;3065:6;3054:9;3050:22;3029:53;;;3019:63;;2989:99;2489:609;;;;;;;;;3105:397;;;3244:2;3232:9;3223:7;3219:23;3215:32;3212:2;;;3260:1;3257;3250:12;3212:2;3323:1;3312:9;3308:17;3295:31;3346:18;3338:6;3335:30;3332:2;;;3378:1;3375;3368:12;3332:2;3406:80;3478:7;3469:6;3458:9;3454:22;3406:80;;;3396:90;;;;3274:218;3206:296;;;;;;3509:263;;3624:2;3612:9;3603:7;3599:23;3595:32;3592:2;;;3640:1;3637;3630:12;3592:2;3675:1;3692:64;3748:7;3739:6;3728:9;3724:22;3692:64;;;3682:74;;3654:108;3586:186;;;;;3779:1349;;;;;;;;;;4026:3;4014:9;4005:7;4001:23;3997:33;3994:2;;;4043:1;4040;4033:12;3994:2;4078:1;4095:64;4151:7;4142:6;4131:9;4127:22;4095:64;;;4085:74;;4057:108;4196:2;4214:64;4270:7;4261:6;4250:9;4246:22;4214:64;;;4204:74;;4175:109;4315:2;4333:64;4389:7;4380:6;4369:9;4365:22;4333:64;;;4323:74;;4294:109;4434:2;4452:64;4508:7;4499:6;4488:9;4484:22;4452:64;;;4442:74;;4413:109;4553:3;4572:64;4628:7;4619:6;4608:9;4604:22;4572:64;;;4562:74;;4532:110;4673:3;4692:64;4748:7;4739:6;4728:9;4724:22;4692:64;;;4682:74;;4652:110;4793:3;4812:64;4868:7;4859:6;4848:9;4844:22;4812:64;;;4802:74;;4772:110;4913:3;4932:63;4987:7;4978:6;4967:9;4963:22;4932:63;;;4922:73;;4892:109;5032:3;5051:61;5104:7;5095:6;5084:9;5080:22;5051:61;;;5041:71;;5011:107;3988:1140;;;;;;;;;;;;5136:173;;5223:46;5265:3;5257:6;5223:46;;;5298:4;5293:3;5289:14;5275:28;;5216:93;;;;;5317:103;5390:24;5408:5;5390:24;;;5385:3;5378:37;5372:48;;;5427:113;5510:24;5528:5;5510:24;;;5505:3;5498:37;5492:48;;;5578:665;;5732:86;5811:6;5806:3;5732:86;;;5725:93;;5839:58;5891:5;5839:58;;;5917:7;5945:1;5930:291;5955:6;5952:1;5949:13;5930:291;;;6016:42;6051:6;6042:7;6016:42;;;6072:63;6131:3;6116:13;6072:63;;;6065:70;;6152:62;6207:6;6152:62;;;6142:72;;5987:234;5977:1;5974;5970:9;5965:14;;5930:291;;;5934:14;6234:3;6227:10;;5712:531;;;;;;;;6251:104;6328:21;6343:5;6328:21;;;6323:3;6316:34;6310:45;;;6362:347;;6474:39;6507:5;6474:39;;;6525:71;6589:6;6584:3;6525:71;;;6518:78;;6601:52;6646:6;6641:3;6634:4;6627:5;6623:16;6601:52;;;6674:29;6696:6;6674:29;;;6669:3;6665:39;6658:46;;6454:255;;;;;;6716:339;;6824:35;6853:5;6824:35;;;6871:71;6935:6;6930:3;6871:71;;;6864:78;;6947:52;6992:6;6987:3;6980:4;6973:5;6969:16;6947:52;;;7020:29;7042:6;7020:29;;;7015:3;7011:39;7004:46;;6804:251;;;;;;7063:320;;7223:67;7287:2;7282:3;7223:67;;;7216:74;;7323:22;7319:1;7314:3;7310:11;7303:43;7374:2;7369:3;7365:12;7358:19;;7209:174;;;;7391:110;7472:23;7489:5;7472:23;;;7467:3;7460:36;7454:47;;;7508:113;7591:24;7609:5;7591:24;;;7586:3;7579:37;7573:48;;;7628:213;;7746:2;7735:9;7731:18;7723:26;;7760:71;7828:1;7817:9;7813:17;7804:6;7760:71;;;7717:124;;;;;7848:324;;7994:2;7983:9;7979:18;7971:26;;8008:71;8076:1;8065:9;8061:17;8052:6;8008:71;;;8090:72;8158:2;8147:9;8143:18;8134:6;8090:72;;;7965:207;;;;;;8179:312;;8319:2;8308:9;8304:18;8296:26;;8333:71;8401:1;8390:9;8386:17;8377:6;8333:71;;;8415:66;8477:2;8466:9;8462:18;8453:6;8415:66;;;8290:201;;;;;;8498:324;;8644:2;8633:9;8629:18;8621:26;;8658:71;8726:1;8715:9;8711:17;8702:6;8658:71;;;8740:72;8808:2;8797:9;8793:18;8784:6;8740:72;;;8615:207;;;;;;8829:435;;9003:2;8992:9;8988:18;8980:26;;9017:71;9085:1;9074:9;9070:17;9061:6;9017:71;;;9099:72;9167:2;9156:9;9152:18;9143:6;9099:72;;;9182;9250:2;9239:9;9235:18;9226:6;9182:72;;;8974:290;;;;;;;9271:543;;9471:3;9460:9;9456:19;9448:27;;9486:71;9554:1;9543:9;9539:17;9530:6;9486:71;;;9568:72;9636:2;9625:9;9621:18;9612:6;9568:72;;;9651;9719:2;9708:9;9704:18;9695:6;9651:72;;;9734:70;9800:2;9789:9;9785:18;9776:6;9734:70;;;9442:372;;;;;;;;9821:547;;10023:3;10012:9;10008:19;10000:27;;10038:71;10106:1;10095:9;10091:17;10082:6;10038:71;;;10120:72;10188:2;10177:9;10173:18;10164:6;10120:72;;;10203;10271:2;10260:9;10256:18;10247:6;10203:72;;;10286;10354:2;10343:9;10339:18;10330:6;10286:72;;;9994:374;;;;;;;;10375:655;;10603:3;10592:9;10588:19;10580:27;;10618:71;10686:1;10675:9;10671:17;10662:6;10618:71;;;10700:72;10768:2;10757:9;10753:18;10744:6;10700:72;;;10783;10851:2;10840:9;10836:18;10827:6;10783:72;;;10866:70;10932:2;10921:9;10917:18;10908:6;10866:70;;;10947:73;11015:3;11004:9;11000:19;10991:6;10947:73;;;10574:456;;;;;;;;;11037:381;;11215:2;11204:9;11200:18;11192:26;;11265:9;11259:4;11255:20;11251:1;11240:9;11236:17;11229:47;11290:118;11403:4;11394:6;11386;11290:118;;;11282:126;;11186:232;;;;;;11425:293;;11559:2;11548:9;11544:18;11536:26;;11609:9;11603:4;11599:20;11595:1;11584:9;11580:17;11573:47;11634:74;11703:4;11694:6;11634:74;;;11626:82;;11530:188;;;;;11725:301;;11863:2;11852:9;11848:18;11840:26;;11913:9;11907:4;11903:20;11899:1;11888:9;11884:17;11877:47;11938:78;12011:4;12002:6;11938:78;;;11930:86;;11834:192;;;;;12033:407;;12224:2;12213:9;12209:18;12201:26;;12274:9;12268:4;12264:20;12260:1;12249:9;12245:17;12238:47;12299:131;12425:4;12299:131;;;12291:139;;12195:245;;;;12447:213;;12565:2;12554:9;12550:18;12542:26;;12579:71;12647:1;12636:9;12632:17;12623:6;12579:71;;;12536:124;;;;;12667:324;;12813:2;12802:9;12798:18;12790:26;;12827:71;12895:1;12884:9;12880:17;12871:6;12827:71;;;12909:72;12977:2;12966:9;12962:18;12953:6;12909:72;;;12784:207;;;;;;12998:435;;13172:2;13161:9;13157:18;13149:26;;13186:71;13254:1;13243:9;13239:17;13230:6;13186:71;;;13268:72;13336:2;13325:9;13321:18;13312:6;13268:72;;;13351;13419:2;13408:9;13404:18;13395:6;13351:72;;;13143:290;;;;;;;13440:118;;13528:3;13520:11;;13514:44;;;;13565:118;;13655:5;13649:12;13639:22;;13620:63;;;;13690:122;;13784:5;13778:12;13768:22;;13749:63;;;;13819:110;;13919:4;13914:3;13910:14;13902:22;;13896:33;;;;13937:178;;14067:6;14062:3;14055:19;14104:4;14099:3;14095:14;14080:29;;14048:67;;;;;14124:163;;14239:6;14234:3;14227:19;14276:4;14271:3;14267:14;14252:29;;14220:67;;;;;14296:119;;14370:39;14405:2;14400:3;14396:12;14391:3;14370:39;;;14361:48;;14354:61;;;;;14423:91;;14485:24;14503:5;14485:24;;;14474:35;;14468:46;;;;14521:85;;14594:5;14587:13;14580:21;14569:32;;14563:43;;;;14613:84;;14685:6;14678:5;14674:18;14663:29;;14657:40;;;;14704:121;;14777:42;14770:5;14766:54;14755:65;;14749:76;;;;14832:72;;14894:5;14883:16;;14877:27;;;;14911:90;;14983:12;14976:5;14972:24;14961:35;;14955:46;;;;15009:268;15074:1;15081:101;15095:6;15092:1;15089:13;15081:101;;;15171:1;15166:3;15162:11;15156:18;15152:1;15147:3;15143:11;15136:39;15117:2;15114:1;15110:10;15105:15;;15081:101;;;15197:6;15194:1;15191:13;15188:2;;;15262:1;15253:6;15248:3;15244:16;15237:27;15188:2;15058:219;;;;;15285:97;;15373:2;15369:7;15364:2;15357:5;15353:14;15349:28;15339:38;;15333:49;;;;15390:117;15459:24;15477:5;15459:24;;;15452:5;15449:35;15439:2;;15498:1;15495;15488:12;15439:2;15433:74;;15514:111;15580:21;15595:5;15580:21;;;15573:5;15570:32;15560:2;;15616:1;15613;15606:12;15560:2;15554:71;;15632:117;15701:24;15719:5;15701:24;;;15694:5;15691:35;15681:2;;15740:1;15737;15730:12;15681:2;15675:74;;15756:115;15824:23;15841:5;15824:23;;;15817:5;15814:34;15804:2;;15862:1;15859;15852:12;15804:2;15798:73;

Swarm Source

ipfs://fe84969c6e8297ef80372d8b6340080ef0a33f673c1681c56bc50af0a5f3db25

Block Transaction Difficulty 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
Loading...
Loading

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.