Contract 0x35CEE4c61B7619956e0B2015B5411F93CBba817A

 
 
Txn Hash
Method
Block
From
To
Value
0x59be1fc34479a2f7b35479066af23071ce5a6f1e54f238c6904edc257945c4100x60806040106038232020-08-06 3:43:16909 days 19 hrs ago0x2d407ddb06311396fe14d4b49da5f0471447d45c IN  Create: StrategyVaultTUSD0 Ether0.1646460660
[ Download CSV Export 
View more zero value Internal Transactions in Advanced View mode
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
StrategyVaultTUSD

Compiler Version
v0.5.17+commit.d19bba13

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2020-08-06
*/

/**
 *Submitted for verification at Etherscan.io on 2020-08-04
*/

// SPDX-License-Identifier: MIT

pragma solidity ^0.5.17;

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 decimals() external view returns (uint);
    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);
}

library SafeMath {
    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) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }
    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) {
        return div(a, b, "SafeMath: division by zero");
    }
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, errorMessage);
        uint256 c = a / b;

        return c;
    }
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}

library Address {
    function isContract(address account) internal view returns (bool) {
        bytes32 codehash;
        bytes32 accountHash = 0xc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a470;
        // solhint-disable-next-line no-inline-assembly
        assembly { codehash := extcodehash(account) }
        return (codehash != 0x0 && codehash != accountHash);
    }
    function toPayable(address account) internal pure returns (address payable) {
        return address(uint160(account));
    }
    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

        // solhint-disable-next-line avoid-call-value
        (bool success, ) = recipient.call.value(amount)("");
        require(success, "Address: unable to send value, recipient may have reverted");
    }
}

library SafeERC20 {
    using SafeMath for uint256;
    using Address for address;

    function safeTransfer(IERC20 token, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transfer.selector, to, value));
    }

    function safeTransferFrom(IERC20 token, address from, address to, uint256 value) internal {
        callOptionalReturn(token, abi.encodeWithSelector(token.transferFrom.selector, from, to, value));
    }

    function safeApprove(IERC20 token, address spender, uint256 value) internal {
        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }
    function callOptionalReturn(IERC20 token, bytes memory data) private {
        require(address(token).isContract(), "SafeERC20: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = address(token).call(data);
        require(success, "SafeERC20: low-level call failed");

        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface Controller {
    function vaults(address) external view returns (address);
}

interface Vault {
    function deposit(uint) external;
    function withdraw(uint) external;
    function getPricePerFullShare() external view returns (uint);
}

interface Aave {
    function borrow(address _reserve, uint _amount, uint _interestRateModel, uint16 _referralCode) external;
    function setUserUseReserveAsCollateral(address _reserve, bool _useAsCollateral) external;
    function repay(address _reserve, uint _amount, address payable _onBehalfOf) external payable;
    function getUserAccountData(address _user)
        external
        view
        returns (
            uint totalLiquidityETH,
            uint totalCollateralETH,
            uint totalBorrowsETH,
            uint totalFeesETH,
            uint availableBorrowsETH,
            uint currentLiquidationThreshold,
            uint ltv,
            uint healthFactor
        );
    function getUserReserveData(address _reserve, address _user)
        external
        view
        returns (
            uint currentATokenBalance,
            uint currentBorrowBalance,
            uint principalBorrowBalance,
            uint borrowRateMode,
            uint borrowRate,
            uint liquidityRate,
            uint originationFee,
            uint variableBorrowIndex,
            uint lastUpdateTimestamp,
            bool usageAsCollateralEnabled
        );
}

interface LendingPoolAddressesProvider {
    function getLendingPool() external view returns (address);
    function getLendingPoolCore() external view returns (address);
    function getPriceOracle() external view returns (address);
}

/*

 A strategy must implement the following calls;
 
 - deposit()
 - withdraw(address) must exclude any tokens used in the yield - Controller role - withdraw should return to Controller
 - withdraw(uint) - Controller | Vault role - withdraw should always return to vault
 - withdrawAll() - Controller | Vault role - withdraw should always return to vault
 - balanceOf()
 
 Where possible, strategies must remain as immutable as possible, instead of updating variables, we update the contract by linking it in the controller
 
*/

contract StrategyVaultTUSD {
    using SafeERC20 for IERC20;
    using Address for address;
    using SafeMath for uint256;
    
    address constant public want = address(0x0000000000085d4780B73119b644AE5ecd22b376);
    address constant public vault = address(0x37d19d1c4E1fa9DC47bD1eA12f742a0887eDa74a);
    
    address public constant aave = address(0x24a42fD28C976A61Df5D00D0599C34c4f90748c8);

    address public governance;
    address public controller;
    
    constructor(address _controller) public {
        governance = msg.sender;
        controller = _controller;
    }
    
    function deposit() external {
        uint _balance = IERC20(want).balanceOf(address(this));
        if (_balance > 0) {
            IERC20(want).safeApprove(address(vault), 0);
            IERC20(want).safeApprove(address(vault), _balance);
            Vault(vault).deposit(_balance);
        }
    }
    
    function getAave() public view returns (address) {
        return LendingPoolAddressesProvider(aave).getLendingPool();
    }
    
    function getName() external pure returns (string memory) {
        return "StrategyVaultTUSD";
    }
    
    function debt() external view returns (uint) {
        (,uint currentBorrowBalance,,,,,,,,) = Aave(getAave()).getUserReserveData(want, Controller(controller).vaults(address(this)));
        return currentBorrowBalance;
    }
    
    function have() external view returns (uint) {
        uint _have = balanceOf();
        _have = _have.mul(999).div(1000); // Adjust for yVault fee
        return _have;
    }
    
    function skimmable() external view returns (uint) {
        (,uint currentBorrowBalance,,,,,,,,) = Aave(getAave()).getUserReserveData(want, Controller(controller).vaults(address(this)));
        uint _have = balanceOf();
        _have = _have.mul(999).div(1000); // Adjust for yVault fee
        if (_have > currentBorrowBalance) {
            return _have.sub(currentBorrowBalance);
        } else {
            return 0;
        }
    }
    
    function skim() external {
        require(msg.sender == controller, "!controller");
        (,uint currentBorrowBalance,,,,,,,,) = Aave(getAave()).getUserReserveData(want, Controller(controller).vaults(address(this)));
        uint _have = balanceOf();
        _have = _have.mul(999).div(1000); // Adjust for yVault fee
        if (_have > currentBorrowBalance) {
            uint _balance = IERC20(want).balanceOf(address(this));
            uint _amount = _have.sub(currentBorrowBalance);
            if (_balance < _amount) {
                _amount = _withdrawSome(_amount.sub(_balance));
                _amount = _amount.add(_balance);
            } 
            IERC20(want).safeTransfer(controller, _amount);
        }
    }
    
    // Controller only function for creating additional rewards from dust
    function withdraw(IERC20 _asset) external returns (uint balance) {
        require(msg.sender == controller, "!controller");
        require(address(_asset) != address(want), "!want");
        balance = _asset.balanceOf(address(this));
        _asset.safeTransfer(controller, balance);
    }
    
    // Withdraw partial funds, normally used with a vault withdrawal
    function withdraw(uint _amount) external {
        require(msg.sender == controller, "!controller");
        uint _balance = IERC20(want).balanceOf(address(this));
        if (_balance < _amount) {
            _amount = _withdrawSome(_amount.sub(_balance));
            _amount = _amount.add(_balance);
        }
        address _vault = Controller(controller).vaults(address(this));
        require(_vault != address(0), "!vault"); // additional protection so we don't burn the funds
        IERC20(want).safeTransfer(_vault, _amount);
    }
    
    // Withdraw all funds, normally used when migrating strategies
    function withdrawAll() external returns (uint balance) {
        require(msg.sender == controller, "!controller");
        _withdrawAll();
        balance = IERC20(want).balanceOf(address(this));
        address _vault = Controller(controller).vaults(address(this));
        require(_vault != address(0), "!vault"); // additional protection so we don't burn the funds
        IERC20(want).safeTransfer(_vault, balance);
    }
    
    function normalize(uint _amount) public view returns (uint) {
        return _amount.mul(10**IERC20(want).decimals()).div(10**IERC20(vault).decimals());
    }
    
    function _withdrawAll() internal {
        Vault(vault).withdraw(IERC20(vault).balanceOf(address(this)));
    }
    
    function _withdrawSome(uint256 _amount) internal returns (uint) {
        uint _redeem = IERC20(vault).balanceOf(address(this)).mul(_amount).div(balanceSavingsInToken());
        uint _before = IERC20(want).balanceOf(address(this));
        Vault(vault).withdraw(_redeem);
        uint _after = IERC20(want).balanceOf(address(this));
        return _after.sub(_before);
    }
    
    function balanceOf() public view returns (uint) {
        return IERC20(want).balanceOf(address(this))
                .add(balanceSavingsInToken());
    }
    
    function balanceSavingsInToken() public view returns (uint256) {
        return normalize(IERC20(vault).balanceOf(address(this)).mul(Vault(vault).getPricePerFullShare()).div(1e18));
    }
    
    function setGovernance(address _governance) external {
        require(msg.sender == governance, "!governance");
        governance = _governance;
    }
    
    function setController(address _controller) external {
        require(msg.sender == governance, "!governance");
        controller = _controller;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"constant":true,"inputs":[],"name":"aave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"balanceSavingsInToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"controller","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"debt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"getAave","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"payable":false,"stateMutability":"pure","type":"function"},{"constant":true,"inputs":[],"name":"governance","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"have","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"normalize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_controller","type":"address"}],"name":"setController","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"address","name":"_governance","type":"address"}],"name":"setGovernance","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"skim","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"skimmable","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"vault","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"want","outputs":[{"internalType":"address","name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"internalType":"contract IERC20","name":"_asset","type":"address"}],"name":"withdraw","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"withdrawAll","outputs":[{"internalType":"uint256","name":"balance","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"}]

608060405234801561001057600080fd5b506040516130d53803806130d58339818101604052602081101561003357600080fd5b8101908080519060200190929190505050336000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050613000806100d56000396000f3fe608060405234801561001057600080fd5b506004361061012b5760003560e01c8063722713f7116100ad578063ab033ea911610071578063ab033ea91461045b578063d0e30db01461049f578063f77c4791146104a9578063f7c1ec77146104f3578063fbfa77cf1461053d5761012b565b8063722713f714610373578063819faf7b14610391578063853828b6146103db57806392eefe9b146103f95780639d9f91551461043d5761012b565b80631dd19cb4116100f45780631dd19cb41461024f5780631f1fcd51146102595780632e1a7d4d146102a357806351cff8d9146102d15780635aa6e675146103295761012b565b8062dd6eef146101305780630dca59c114610172578063125009cc1461019057806317d7de7c146101ae578063183dcad914610231575b600080fd5b61015c6004803603602081101561014657600080fd5b8101908080359060200190929190505050610587565b6040518082815260200191505060405180910390f35b61017a6106de565b6040518082815260200191505060405180910390f35b61019861092a565b6040518082815260200191505060405180910390f35b6101b6610ac5565b6040518080602001828103825283818151815260200191508051906020019080838360005b838110156101f65780820151818401526020810190506101db565b50505050905090810190601f1680156102235780820380516001836020036101000a031916815260200191505b509250505060405180910390f35b610239610b02565b6040518082815260200191505060405180910390f35b610257610dac565b005b610261611272565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6102cf600480360360208110156102b957600080fd5b8101908080359060200190929190505050611285565b005b610313600480360360208110156102e757600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff16906020019092919050505061160e565b6040518082815260200191505060405180910390f35b610331611890565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b61037b6118b5565b6040518082815260200191505060405180910390f35b61039961199c565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6103e36119b4565b6040518082815260200191505060405180910390f35b61043b6004803603602081101561040f57600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611d09565b005b610445611e0f565b6040518082815260200191505060405180910390f35b61049d6004803603602081101561047157600080fd5b81019080803573ffffffffffffffffffffffffffffffffffffffff169060200190929190505050611e4e565b005b6104a7611f53565b005b6104b1612147565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b6104fb61216d565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b610545612209565b604051808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060405180910390f35b60006106d77337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a73ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156105e657600080fd5b505afa1580156105fa573d6000803e3d6000fd5b505050506040513d602081101561061057600080fd5b8101908080519060200190929190505050600a0a6106c96e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff1663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b15801561067c57600080fd5b505afa158015610690573d6000803e3d6000fd5b505050506040513d60208110156106a657600080fd5b8101908080519060200190929190505050600a0a8561222190919063ffffffff16565b6122a790919063ffffffff16565b9050919050565b6000806106e961216d565b73ffffffffffffffffffffffffffffffffffffffff166328dd2d016e085d4780b73119b644ae5ecd22b376600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a622ee7c306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156107b357600080fd5b505afa1580156107c7573d6000803e3d6000fd5b505050506040513d60208110156107dd57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506101406040518083038186803b15801561088257600080fd5b505afa158015610896573d6000803e3d6000fd5b505050506040513d6101408110156108ad57600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505050505050509150508091505090565b6000610ac0610abb670de0b6b3a7640000610aad7337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a73ffffffffffffffffffffffffffffffffffffffff166377c7b8fc6040518163ffffffff1660e01b815260040160206040518083038186803b15801561099857600080fd5b505afa1580156109ac573d6000803e3d6000fd5b505050506040513d60208110156109c257600080fd5b81019080805190602001909291905050507337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610a6457600080fd5b505afa158015610a78573d6000803e3d6000fd5b505050506040513d6020811015610a8e57600080fd5b810190808051906020019092919050505061222190919063ffffffff16565b6122a790919063ffffffff16565b610587565b905090565b60606040518060400160405280601181526020017f53747261746567795661756c7454555344000000000000000000000000000000815250905090565b600080610b0d61216d565b73ffffffffffffffffffffffffffffffffffffffff166328dd2d016e085d4780b73119b644ae5ecd22b376600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a622ee7c306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610bd757600080fd5b505afa158015610beb573d6000803e3d6000fd5b505050506040513d6020811015610c0157600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506101406040518083038186803b158015610ca657600080fd5b505afa158015610cba573d6000803e3d6000fd5b505050506040513d610140811015610cd157600080fd5b810190808051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919050505050505050505050509150506000610d516118b5565b9050610d7c6103e8610d6e6103e78461222190919063ffffffff16565b6122a790919063ffffffff16565b905081811115610da257610d9982826122f190919063ffffffff16565b92505050610da9565b6000925050505b90565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610e6f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21636f6e74726f6c6c657200000000000000000000000000000000000000000081525060200191505060405180910390fd5b6000610e7961216d565b73ffffffffffffffffffffffffffffffffffffffff166328dd2d016e085d4780b73119b644ae5ecd22b376600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a622ee7c306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015610f4357600080fd5b505afa158015610f57573d6000803e3d6000fd5b505050506040513d6020811015610f6d57600080fd5b81019080805190602001909291905050506040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001925050506101406040518083038186803b15801561101257600080fd5b505afa158015611026573d6000803e3d6000fd5b505050506040513d61014081101561103d57600080fd5b8101908080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190805190602001909291908051906020019092919080519060200190929190505050505050505050505091505060006110bd6118b5565b90506110e86103e86110da6103e78461222190919063ffffffff16565b6122a790919063ffffffff16565b90508181111561126e5760006e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561118057600080fd5b505afa158015611194573d6000803e3d6000fd5b505050506040513d60208110156111aa57600080fd5b8101908080519060200190929190505050905060006111d284846122f190919063ffffffff16565b90508082101561120f576111f76111f283836122f190919063ffffffff16565b61233b565b905061120c828261266990919063ffffffff16565b90505b61126b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166126f19092919063ffffffff16565b50505b5050565b6e085d4780b73119b644ae5ecd22b37681565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611348576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21636f6e74726f6c6c657200000000000000000000000000000000000000000081525060200191505060405180910390fd5b60006e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156113d657600080fd5b505afa1580156113ea573d6000803e3d6000fd5b505050506040513d602081101561140057600080fd5b810190808051906020019092919050505090508181101561144e5761143661143182846122f190919063ffffffff16565b61233b565b915061144b818361266990919063ffffffff16565b91505b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a622ee7c306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156114ef57600080fd5b505afa158015611503573d6000803e3d6000fd5b505050506040513d602081101561151957600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f217661756c74000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b61160981846e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166126f19092919063ffffffff16565b505050565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146116d3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21636f6e74726f6c6c657200000000000000000000000000000000000000000081525060200191505060405180910390fd5b6e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611784576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260058152602001807f2177616e7400000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561180157600080fd5b505afa158015611815573d6000803e3d6000fd5b505050506040513d602081101561182b57600080fd5b8101908080519060200190929190505050905061188b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16828473ffffffffffffffffffffffffffffffffffffffff166126f19092919063ffffffff16565b919050565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60006119976118c261092a565b6e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561194e57600080fd5b505afa158015611962573d6000803e3d6000fd5b505050506040513d602081101561197857600080fd5b810190808051906020019092919050505061266990919063ffffffff16565b905090565b7324a42fd28c976a61df5d00d0599c34c4f90748c881565b6000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a79576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21636f6e74726f6c6c657200000000000000000000000000000000000000000081525060200191505060405180910390fd5b611a816127c2565b6e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611b0d57600080fd5b505afa158015611b21573d6000803e3d6000fd5b505050506040513d6020811015611b3757600080fd5b810190808051906020019092919050505090506000600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663a622ee7c306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611beb57600080fd5b505afa158015611bff573d6000803e3d6000fd5b505050506040513d6020811015611c1557600080fd5b81019080805190602001909291905050509050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ccb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260068152602001807f217661756c74000000000000000000000000000000000000000000000000000081525060200191505060405180910390fd5b611d0581836e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166126f19092919063ffffffff16565b5090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611dcb576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600080611e1a6118b5565b9050611e456103e8611e376103e78461222190919063ffffffff16565b6122a790919063ffffffff16565b90508091505090565b6000809054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f10576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252600b8152602001807f21676f7665726e616e636500000000000000000000000000000000000000000081525060200191505060405180910390fd5b806000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60006e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b158015611fe157600080fd5b505afa158015611ff5573d6000803e3d6000fd5b505050506040513d602081101561200b57600080fd5b810190808051906020019092919050505090506000811115612144576120767337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a60006e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff1661290e9092919063ffffffff16565b6120c47337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a826e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff1661290e9092919063ffffffff16565b7337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a73ffffffffffffffffffffffffffffffffffffffff1663b6b55f25826040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561212b57600080fd5b505af115801561213f573d6000803e3d6000fd5b505050505b50565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60007324a42fd28c976a61df5d00d0599c34c4f90748c873ffffffffffffffffffffffffffffffffffffffff16630261bf8b6040518163ffffffff1660e01b815260040160206040518083038186803b1580156121c957600080fd5b505afa1580156121dd573d6000803e3d6000fd5b505050506040513d60208110156121f357600080fd5b8101908080519060200190929190505050905090565b7337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a81565b60008083141561223457600090506122a1565b600082840290508284828161224557fe5b041461229c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526021815260200180612f4b6021913960400191505060405180910390fd5b809150505b92915050565b60006122e983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250612b2e565b905092915050565b600061233383836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250612bf4565b905092915050565b60008061243561234961092a565b612427857337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156123de57600080fd5b505afa1580156123f2573d6000803e3d6000fd5b505050506040513d602081101561240857600080fd5b810190808051906020019092919050505061222190919063ffffffff16565b6122a790919063ffffffff16565b905060006e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b1580156124c557600080fd5b505afa1580156124d9573d6000803e3d6000fd5b505050506040513d60208110156124ef57600080fd5b810190808051906020019092919050505090507337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d836040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b15801561256957600080fd5b505af115801561257d573d6000803e3d6000fd5b5050505060006e085d4780b73119b644ae5ecd22b37673ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561260f57600080fd5b505afa158015612623573d6000803e3d6000fd5b505050506040513d602081101561263957600080fd5b8101908080519060200190929190505050905061265f82826122f190919063ffffffff16565b9350505050919050565b6000808284019050838110156126e7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601b8152602001807f536166654d6174683a206164646974696f6e206f766572666c6f77000000000081525060200191505060405180910390fd5b8091505092915050565b6127bd838473ffffffffffffffffffffffffffffffffffffffff1663a9059cbb905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612cb4565b505050565b7337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a73ffffffffffffffffffffffffffffffffffffffff16632e1a7d4d7337d19d1c4e1fa9dc47bd1ea12f742a0887eda74a73ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b8152600401808273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200191505060206040518083038186803b15801561288357600080fd5b505afa158015612897573d6000803e3d6000fd5b505050506040513d60208110156128ad57600080fd5b81019080805190602001909291905050506040518263ffffffff1660e01b815260040180828152602001915050600060405180830381600087803b1580156128f457600080fd5b505af1158015612908573d6000803e3d6000fd5b50505050565b6000811480612a08575060008373ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e30856040518363ffffffff1660e01b8152600401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020018273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019250505060206040518083038186803b1580156129cb57600080fd5b505afa1580156129df573d6000803e3d6000fd5b505050506040513d60208110156129f557600080fd5b8101908080519060200190929190505050145b612a5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401808060200182810382526036815260200180612f966036913960400191505060405180910390fd5b612b29838473ffffffffffffffffffffffffffffffffffffffff1663095ea7b3905060e01b8484604051602401808373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200182815260200192505050604051602081830303815290604052907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19166020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050612cb4565b505050565b60008083118290612bda576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612b9f578082015181840152602081019050612b84565b50505050905090810190601f168015612bcc5780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b506000838581612be657fe5b049050809150509392505050565b6000838311158290612ca1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825283818151815260200191508051906020019080838360005b83811015612c66578082015181840152602081019050612c4b565b50505050905090810190601f168015612c935780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b5060008385039050809150509392505050565b612cd38273ffffffffffffffffffffffffffffffffffffffff16612eff565b612d45576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252601f8152602001807f5361666545524332303a2063616c6c20746f206e6f6e2d636f6e74726163740081525060200191505060405180910390fd5b600060608373ffffffffffffffffffffffffffffffffffffffff16836040518082805190602001908083835b60208310612d945780518252602082019150602081019050602083039250612d71565b6001836020036101000a0380198251168184511680821785525050505050509050019150506000604051808303816000865af19150503d8060008114612df6576040519150601f19603f3d011682016040523d82523d6000602084013e612dfb565b606091505b509150915081612e73576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004018080602001828103825260208152602001807f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c656481525060200191505060405180910390fd5b600081511115612ef957808060200190516020811015612e9257600080fd5b8101908080519060200190929190505050612ef8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040180806020018281038252602a815260200180612f6c602a913960400191505060405180910390fd5b5b50505050565b60008060007fc5d2460186f7233c927e7db2dcc703c0e500b653ca82273b7bfad8045d85a47060001b9050833f91506000801b8214158015612f415750808214155b9250505091905056fe536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f775361666545524332303a204552433230206f7065726174696f6e20646964206e6f7420737563636565645361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f20746f206e6f6e2d7a65726f20616c6c6f77616e6365a265627a7a72315820c52c8d983647129354276b54f226cfe517fb1d1bcaa1fbcc2488d1933f4bb35864736f6c634300051100320000000000000000000000002be5d998c95de70d9a38b3d78e49751f10f9e88b

Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)

0000000000000000000000002be5d998c95de70d9a38b3d78e49751f10f9e88b

-----Decoded View---------------
Arg [0] : _controller (address): 0x2be5D998C95DE70D9A38b3d78e49751F10F9E88b

-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 0000000000000000000000002be5d998c95de70d9a38b3d78e49751f10f9e88b


Deployed ByteCode Sourcemap

7015:5748:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7015:5748:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11377:160;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11377:160:0;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8200:227;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12237:189;;;:::i;:::-;;;;;;;;;;;;;;;;;;;8086:102;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;8086:102:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8630:447;;;:::i;:::-;;;;;;;;;;;;;;;;;;;9089:747;;;:::i;:::-;;7153:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10301:552;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10301:552:0;;;;;;;;;;;;;;;;;:::i;:::-;;9923:296;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9923:296:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7429:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;12067:158;;;:::i;:::-;;;;;;;;;;;;;;;;;;;7338:82;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;10933:432;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12605:155;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12605:155:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;8439:179;;;:::i;:::-;;;;;;;;;;;;;;;;;;;12438:155;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12438:155:0;;;;;;;;;;;;;;;;;;;:::i;:::-;;7628:308;;;:::i;:::-;;7461:25;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7948:126;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;7242:83;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;11377:160;11431:4;11455:74;7282:42;11504:22;;;:24;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11504:24:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11504:24:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11504:24:0;;;;;;;;;;;;;;;;11500:2;:28;11455:40;7192:42;11471:21;;;:23;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11471:23:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11471:23:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11471:23:0;;;;;;;;;;;;;;;;11467:2;:27;11455:7;:11;;:40;;;;:::i;:::-;:44;;:74;;;;:::i;:::-;11448:81;;11377:160;;;:::o;8200:227::-;8239:4;8258:25;8300:9;:7;:9::i;:::-;8295:34;;;7192:42;8347:10;;;;;;;;;;;8336:29;;;8374:4;8336:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8336:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8336:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8336:44:0;;;;;;;;;;;;;;;;8295:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8295:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8295:86:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8295:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8256:125;;;;;;;;;;;8399:20;8392:27;;;8200:227;:::o;12237:189::-;12291:7;12318:100;12328:89;12412:4;12328:79;7282:42;12371:33;;;:35;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12371:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12371:35:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12371:35:0;;;;;;;;;;;;;;;;7282:42;12328:23;;;12360:4;12328:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12328:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12328:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12328:38:0;;;;;;;;;;;;;;;;:42;;:79;;;;:::i;:::-;:83;;:89;;;;:::i;:::-;12318:9;:100::i;:::-;12311:107;;12237:189;:::o;8086:102::-;8128:13;8154:26;;;;;;;;;;;;;;;;;;;8086:102;:::o;8630:447::-;8674:4;8693:25;8735:9;:7;:9::i;:::-;8730:34;;;7192:42;8782:10;;;;;;;;;;;8771:29;;;8809:4;8771:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8771:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8771:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8771:44:0;;;;;;;;;;;;;;;;8730:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8730:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8730:86:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;8730:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8691:125;;;;;;;;;;;8827:10;8840:11;:9;:11::i;:::-;8827:24;;8870;8889:4;8870:14;8880:3;8870:5;:9;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;8862:32;;8942:20;8934:5;:28;8930:140;;;8986:31;8996:20;8986:5;:9;;:31;;;;:::i;:::-;8979:38;;;;;;8930:140;9057:1;9050:8;;;;8630:447;;:::o;9089:747::-;9147:10;;;;;;;;;;;9133:24;;:10;:24;;;9125:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9186:25;9228:9;:7;:9::i;:::-;9223:34;;;7192:42;9275:10;;;;;;;;;;;9264:29;;;9302:4;9264:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9264:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9264:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9264:44:0;;;;;;;;;;;;;;;;9223:86;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9223:86:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9223:86:0;;;;;;;13:3:-1;8;5:12;2:2;;;30:1;27;20:12;2:2;9223:86:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9184:125;;;;;;;;;;;9320:10;9333:11;:9;:11::i;:::-;9320:24;;9363;9382:4;9363:14;9373:3;9363:5;:9;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;9355:32;;9435:20;9427:5;:28;9423:406;;;9472:13;7192:42;9488:22;;;9519:4;9488:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;9488:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;9488:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;9488:37:0;;;;;;;;;;;;;;;;9472:53;;9540:12;9555:31;9565:20;9555:5;:9;;:31;;;;:::i;:::-;9540:46;;9616:7;9605:8;:18;9601:155;;;9654:36;9668:21;9680:8;9668:7;:11;;:21;;;;:::i;:::-;9654:13;:36::i;:::-;9644:46;;9719:21;9731:8;9719:7;:11;;:21;;;;:::i;:::-;9709:31;;9601:155;9771:46;9797:10;;;;;;;;;;;9809:7;7192:42;9771:25;;;;:46;;;;;:::i;:::-;9423:406;;;9089:747;;:::o;7153:82::-;7192:42;7153:82;:::o;10301:552::-;10375:10;;;;;;;;;;;10361:24;;:10;:24;;;10353:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10412:13;7192:42;10428:22;;;10459:4;10428:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10428:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10428:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10428:37:0;;;;;;;;;;;;;;;;10412:53;;10491:7;10480:8;:18;10476:143;;;10525:36;10539:21;10551:8;10539:7;:11;;:21;;;;:::i;:::-;10525:13;:36::i;:::-;10515:46;;10586:21;10598:8;10586:7;:11;;:21;;;;:::i;:::-;10576:31;;10476:143;10629:14;10657:10;;;;;;;;;;;10646:29;;;10684:4;10646:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10646:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10646:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10646:44:0;;;;;;;;;;;;;;;;10629:61;;10727:1;10709:20;;:6;:20;;;;10701:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10803:42;10829:6;10837:7;7192:42;10803:25;;;;:42;;;;;:::i;:::-;10301:552;;;:::o;9923:296::-;9974:12;10021:10;;;;;;;;;;;10007:24;;:10;:24;;;9999:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7192:42;10066:32;;10074:6;10066:32;;;;10058:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;10129:6;:16;;;10154:4;10129:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;10129:31:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;10129:31:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;10129:31:0;;;;;;;;;;;;;;;;10119:41;;10171:40;10191:10;;;;;;;;;;;10203:7;10171:6;:19;;;;:40;;;;;:::i;:::-;9923:296;;;:::o;7429:25::-;;;;;;;;;;;;;:::o;12067:158::-;12109:4;12133:84;12193:23;:21;:23::i;:::-;7192:42;12133:22;;;12164:4;12133:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;12133:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;12133:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;12133:37:0;;;;;;;;;;;;;;;;:59;;:84;;;;:::i;:::-;12126:91;;12067:158;:::o;7338:82::-;7377:42;7338:82;:::o;10933:432::-;10974:12;11021:10;;;;;;;;;;;11007:24;;:10;:24;;;10999:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11058:14;:12;:14::i;:::-;7192:42;11093:22;;;11124:4;11093:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11093:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11093:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11093:37:0;;;;;;;;;;;;;;;;11083:47;;11141:14;11169:10;;;;;;;;;;;11158:29;;;11196:4;11158:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11158:44:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11158:44:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11158:44:0;;;;;;;;;;;;;;;;11141:61;;11239:1;11221:20;;:6;:20;;;;11213:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11315:42;11341:6;11349:7;7192:42;11315:25;;;;:42;;;;;:::i;:::-;10933:432;;:::o;12605:155::-;12691:10;;;;;;;;;;;12677:24;;:10;:24;;;12669:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12741:11;12728:10;;:24;;;;;;;;;;;;;;;;;;12605:155;:::o;8439:179::-;8478:4;8495:10;8508:11;:9;:11::i;:::-;8495:24;;8538;8557:4;8538:14;8548:3;8538:5;:9;;:14;;;;:::i;:::-;:18;;:24;;;;:::i;:::-;8530:32;;8605:5;8598:12;;;8439:179;:::o;12438:155::-;12524:10;;;;;;;;;;;12510:24;;:10;:24;;;12502:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12574:11;12561:10;;:24;;;;;;;;;;;;;;;;;;12438:155;:::o;7628:308::-;7667:13;7192:42;7683:22;;;7714:4;7683:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7683:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7683:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;7683:37:0;;;;;;;;;;;;;;;;7667:53;;7746:1;7735:8;:12;7731:198;;;7764:43;7282:42;7805:1;7192:42;7764:24;;;;:43;;;;;:::i;:::-;7822:50;7282:42;7863:8;7192:42;7822:24;;;;:50;;;;;:::i;:::-;7282:42;7887:20;;;7908:8;7887:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;7887:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;7887:30:0;;;;7731:198;7628:308;:::o;7461:25::-;;;;;;;;;;;;;:::o;7948:126::-;7988:7;7377:42;8015:49;;;:51;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;8015:51:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;8015:51:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;8015:51:0;;;;;;;;;;;;;;;;8008:58;;7948:126;:::o;7242:83::-;7282:42;7242:83;:::o;1417:250::-;1475:7;1504:1;1499;:6;1495:47;;;1529:1;1522:8;;;;1495:47;1554:9;1570:1;1566;:5;1554:17;;1599:1;1594;1590;:5;;;;;;:10;1582:56;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1658:1;1651:8;;;1417:250;;;;;:::o;1673:132::-;1731:7;1758:39;1762:1;1765;1758:39;;;;;;;;;;;;;;;;;:3;:39::i;:::-;1751:46;;1673:132;;;;:::o;1077:136::-;1135:7;1162:43;1166:1;1169;1162:43;;;;;;;;;;;;;;;;;:3;:43::i;:::-;1155:50;;1077:136;;;;:::o;11674:381::-;11732:4;11749:12;11764:80;11820:23;:21;:23::i;:::-;11764:51;11807:7;7282:42;11764:23;;;11796:4;11764:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11764:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11764:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11764:38:0;;;;;;;;;;;;;;;;:42;;:51;;;;:::i;:::-;:55;;:80;;;;:::i;:::-;11749:95;;11855:12;7192:42;11870:22;;;11901:4;11870:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11870:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11870:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11870:37:0;;;;;;;;;;;;;;;;11855:52;;7282:42;11918:21;;;11940:7;11918:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11918:30:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11918:30:0;;;;11959:11;7192:42;11973:22;;;12004:4;11973:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11973:37:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11973:37:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11973:37:0;;;;;;;;;;;;;;;;11959:51;;12028:19;12039:7;12028:6;:10;;:19;;;;:::i;:::-;12021:26;;;;;11674:381;;;:::o;890:181::-;948:7;968:9;984:1;980;:5;968:17;;1009:1;1004;:6;;996:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1062:1;1055:8;;;890:181;;;;:::o;3390:176::-;3473:85;3492:5;3522;:14;;;:23;;;;3547:2;3551:5;3499:58;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;3499:58:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;3499:58:0;3473:18;:85::i;:::-;3390:176;;;:::o;11549:113::-;7282:42;11593:21;;;7282:42;11615:23;;;11647:4;11615:38;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11615:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11615:38:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;11615:38:0;;;;;;;;;;;;;;;;11593:61;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;11593:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;11593:61:0;;;;11549:113::o;3786:347::-;3891:1;3882:5;:10;3881:62;;;;3941:1;3898:5;:15;;;3922:4;3929:7;3898:39;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;3898:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;3898:39:0;;;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;3898:39:0;;;;;;;;;;;;;;;;:44;3881:62;3873:152;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4036:89;4055:5;4085;:13;;;:22;;;;4109:7;4118:5;4062:62;;;;;;;;;;;;;;;;;;;;;;;;;49:4:-1;39:7;30;26:21;22:32;13:7;6:49;4062:62:0;;;;;;;38:4:-1;29:7;25:18;67:10;61:17;96:58;199:8;192:4;186;182:15;179:29;167:10;160:49;0:215;;;4062:62:0;4036:18;:89::i;:::-;3786:347;;;:::o;1811:258::-;1897:7;1996:1;1992;:5;1999:12;1984:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1984:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2023:9;2039:1;2035;:5;;;;;;2023:17;;2060:1;2053:8;;;1811:258;;;;;:::o;1219:192::-;1305:7;1338:1;1333;:6;;1341:12;1325:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23:1:-1;8:100;33:3;30:1;27:10;8:100;;;99:1;94:3;90:11;84:18;80:1;75:3;71:11;64:39;52:2;49:1;45:10;40:15;;8:100;;;12:14;1325:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1365:9;1381:1;1377;:5;1365:17;;1402:1;1395:8;;;1219:192;;;;;:::o;4139:598::-;4227:27;4235:5;4227:25;;;:27::i;:::-;4219:71;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4364:12;4378:23;4413:5;4405:19;;4425:4;4405:25;;;;;;;;;;;;;36:153:-1;66:2;61:3;58:11;36:153;;182:3;176:10;171:3;164:23;98:2;93:3;89:12;82:19;;123:2;118:3;114:12;107:19;;148:2;143:3;139:12;132:19;;36:153;;;274:1;267:3;263:2;259:12;254:3;250:22;246:30;315:4;311:9;305:3;299:10;295:26;356:4;350:3;344:10;340:21;389:7;380;377:20;372:3;365:33;3:399;;;4405:25:0;;;;;;;;;;;;;;;;;;;;;;;;14:1:-1;21;16:31;;;;75:4;69:11;64:16;;144:4;140:9;133:4;115:16;111:27;107:43;104:1;100:51;94:4;87:65;169:16;166:1;159:27;225:16;222:1;215:4;212:1;208:12;193:49;7:242;;16:31;36:4;31:9;;7:242;;4363:67:0;;;;4449:7;4441:52;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4530:1;4510:10;:17;:21;4506:224;;;4652:10;4641:30;;;;;13:2:-1;8:3;5:11;2:2;;;29:1;26;19:12;2:2;4641:30:0;;;;;;;;;;;;;;;;4633:85;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4506:224;4139:598;;;;:::o;2407:374::-;2467:4;2484:16;2511:19;2533:66;2511:88;;;;2702:7;2690:20;2678:32;;2742:3;2730:15;;:8;:15;;:42;;;;;2761:11;2749:8;:23;;2730:42;2722:51;;;;2407:374;;;:::o

Swarm Source

bzzr://c52c8d983647129354276b54f226cfe517fb1d1bcaa1fbcc2488d1933f4bb358
Block Transaction Difficulty Gas Used Reward
Block Uncle Number Difficulty Gas Used Reward
Loading
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.

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.