ETH Price: $2,039.96 (-3.68%)

Contract

0x607D2Dd18C9782dd0c387b2Fe8A69bBcfe0e3Eb3
 

Overview

ETH Balance

0 ETH

Eth Value

$0.00

Token Holdings

More Info

Private Name Tags

TokenTracker

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Withdraw97105872020-03-20 19:56:392176 days ago1584734199IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000308991.51641279
Withdraw95934112020-03-02 18:47:022194 days ago1583174822IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000611033
Deposit93992222020-02-01 22:25:172224 days ago1580595917IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000235791.5
Deposit92155022020-01-04 18:28:152252 days ago1578162495IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000235791.5
Withdraw91923722019-12-31 19:42:212256 days ago1577821341IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000203671
Deposit90503182019-12-04 16:48:482283 days ago1575478128IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.0006134.5
Withdraw89344642019-11-14 20:36:232303 days ago1573763783IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000248931.5
Deposit88537892019-11-01 16:50:442316 days ago1572627044IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000204331.5
Deposit88091412019-10-25 12:26:582324 days ago1572006418IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000136221
Deposit86572592019-10-01 15:25:012347 days ago1569943501IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000203791.5
Withdraw86136082019-09-24 19:24:532354 days ago1569353093IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.0007286732
Withdraw86136002019-09-24 19:22:522354 days ago1569352972IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.0091050746.5
Deposit86095952019-09-24 4:12:342355 days ago1569298354IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.0040759230
Deposit85737882019-09-18 13:49:102360 days ago1568814550IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.0055050840.5
Donate85737702019-09-18 13:45:382360 days ago1568814338IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.0062117145
Deposit83997592019-08-22 11:02:232388 days ago1566471743IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000203791.5
Deposit83382942019-08-12 21:58:492397 days ago1565647129IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000150861
Deposit83373642019-08-12 18:34:242397 days ago1565634864IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000203891.5
Deposit82995122019-08-06 21:33:552403 days ago1565127235IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000149451.1
Deposit82988132019-08-06 18:54:182403 days ago1565117658IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.001267887.65
Deposit82988022019-08-06 18:52:082403 days ago1565117528IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.00023559
Deposit82985992019-08-06 18:06:442403 days ago1565114804IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000226291.5
Deposit82947482019-08-06 3:45:382404 days ago1565063138IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.0015073610
Deposit82947442019-08-06 3:44:112404 days ago1565063051IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.00045223
Deposit82947222019-08-06 3:41:042404 days ago1565062864IN
0x607D2Dd1...cfe0e3Eb3
0 ETH0.000504213.345
View all transactions

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
CompoundPool

Compiler Version
v0.5.7+commit.6da8b019

Optimization Enabled:
Yes with 999 runs

Other Settings:
default evmVersion, None license
/**
 *Submitted for verification at Etherscan.io on 2019-08-04
*/

pragma solidity ^0.5.0;
pragma experimental ABIEncoderV2;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP. Does not include
 * the optional functions; to access them see `ERC20Detailed`.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

    /**
     * @dev Returns the amount of tokens owned by `account`.
     */
    function balanceOf(address account) external view returns (uint256);

    /**
     * @dev Moves `amount` tokens from the caller's account to `recipient`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transfer(address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Returns the remaining number of tokens that `spender` will be
     * allowed to spend on behalf of `owner` through `transferFrom`. This is
     * zero by default.
     *
     * This value changes when `approve` or `transferFrom` are called.
     */
    function allowance(address owner, address spender) external view returns (uint256);

    /**
     * @dev Sets `amount` as the allowance of `spender` over the caller's tokens.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * > Beware that changing an allowance with this method brings the risk
     * that someone may use both the old and the new allowance by unfortunate
     * transaction ordering. One possible solution to mitigate this race
     * condition is to first reduce the spender's allowance to 0 and set the
     * desired value afterwards:
     * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729
     *
     * Emits an `Approval` event.
     */
    function approve(address spender, uint256 amount) external returns (bool);

    /**
     * @dev Moves `amount` tokens from `sender` to `recipient` using the
     * allowance mechanism. `amount` is then deducted from the caller's
     * allowance.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a `Transfer` event.
     */
    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    /**
     * @dev Emitted when `value` tokens are moved from one account (`from`) to
     * another (`to`).
     *
     * Note that `value` may be zero.
     */
    event Transfer(address indexed from, address indexed to, uint256 value);

    /**
     * @dev Emitted when the allowance of a `spender` for an `owner` is set by
     * a call to `approve`. `value` is the new allowance.
     */
    event Approval(address indexed owner, address indexed spender, uint256 value);
}

/**
 * @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) {
        require(b <= a, "SafeMath: subtraction overflow");
        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-solidity/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) {
        // Solidity only automatically asserts when dividing by 0
        require(b > 0, "SafeMath: division by zero");
        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) {
        require(b != 0, "SafeMath: modulo by zero");
        return a % b;
    }
}


/**
 * @dev Optional functions from the ERC20 standard.
 */
contract ERC20Detailed is IERC20 {
    string private _name;
    string private _symbol;
    uint8 private _decimals;

    /**
     * @dev Sets the values for `name`, `symbol`, and `decimals`. All three of
     * these values are immutable: they can only be set once during
     * construction.
     */
    constructor (string memory name, string memory symbol, uint8 decimals) public {
        _name = name;
        _symbol = symbol;
        _decimals = decimals;
    }

    /**
     * @dev Returns the name of the token.
     */
    function name() public view returns (string memory) {
        return _name;
    }

    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view returns (string memory) {
        return _symbol;
    }

    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei.
     *
     * > Note that this information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * `IERC20.balanceOf` and `IERC20.transfer`.
     */
    function decimals() public view returns (uint8) {
        return _decimals;
    }
}

/**
 * @dev Implementation of the `IERC20` interface.
 *
 * This implementation is agnostic to the way tokens are created. This means
 * that a supply mechanism has to be added in a derived contract using `_mint`.
 * For a generic mechanism see `ERC20Mintable`.
 *
 * *For a detailed writeup see our guide [How to implement supply
 * mechanisms](https://forum.zeppelin.solutions/t/how-to-implement-erc20-supply-mechanisms/226).*
 *
 * We have followed general OpenZeppelin guidelines: functions revert instead
 * of returning `false` on failure. This behavior is nonetheless conventional
 * and does not conflict with the expectations of ERC20 applications.
 *
 * Additionally, an `Approval` event is emitted on calls to `transferFrom`.
 * This allows applications to reconstruct the allowance for all accounts just
 * by listening to said events. Other implementations of the EIP may not emit
 * these events, as it isn't required by the specification.
 *
 * Finally, the non-standard `decreaseAllowance` and `increaseAllowance`
 * functions have been added to mitigate the well-known issues around setting
 * allowances. See `IERC20.approve`.
 */
contract ERC20 is IERC20 {
    using SafeMath for uint256;

    mapping (address => uint256) private _balances;

    mapping (address => mapping (address => uint256)) private _allowances;

    uint256 private _totalSupply;

    /**
     * @dev See `IERC20.totalSupply`.
     */
    function totalSupply() public view returns (uint256) {
        return _totalSupply;
    }

    /**
     * @dev See `IERC20.balanceOf`.
     */
    function balanceOf(address account) public view returns (uint256) {
        return _balances[account];
    }

    /**
     * @dev See `IERC20.transfer`.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public returns (bool) {
        _transfer(msg.sender, recipient, amount);
        return true;
    }

    /**
     * @dev See `IERC20.allowance`.
     */
    function allowance(address owner, address spender) public view returns (uint256) {
        return _allowances[owner][spender];
    }

    /**
     * @dev See `IERC20.approve`.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 value) public returns (bool) {
        _approve(msg.sender, spender, value);
        return true;
    }

    /**
     * @dev See `IERC20.transferFrom`.
     *
     * Emits an `Approval` event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of `ERC20`;
     *
     * Requirements:
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `value`.
     * - the caller must have allowance for `sender`'s tokens of at least
     * `amount`.
     */
    function transferFrom(address sender, address recipient, uint256 amount) public returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, msg.sender, _allowances[sender][msg.sender].sub(amount));
        return true;
    }

    /**
     * @dev Atomically increases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function increaseAllowance(address spender, uint256 addedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].add(addedValue));
        return true;
    }

    /**
     * @dev Atomically decreases the allowance granted to `spender` by the caller.
     *
     * This is an alternative to `approve` that can be used as a mitigation for
     * problems described in `IERC20.approve`.
     *
     * Emits an `Approval` event indicating the updated allowance.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     * - `spender` must have allowance for the caller of at least
     * `subtractedValue`.
     */
    function decreaseAllowance(address spender, uint256 subtractedValue) public returns (bool) {
        _approve(msg.sender, spender, _allowances[msg.sender][spender].sub(subtractedValue));
        return true;
    }

    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is internal function is equivalent to `transfer`, and can be used to
     * e.g. implement automatic token fees, slashing mechanisms, etc.
     *
     * Emits a `Transfer` event.
     *
     * Requirements:
     *
     * - `sender` cannot be the zero address.
     * - `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     */
    function _transfer(address sender, address recipient, uint256 amount) internal {
        require(sender != address(0), "ERC20: transfer from the zero address");
        require(recipient != address(0), "ERC20: transfer to the zero address");

        _balances[sender] = _balances[sender].sub(amount);
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(sender, recipient, amount);
    }

    /** @dev Creates `amount` tokens and assigns them to `account`, increasing
     * the total supply.
     *
     * Emits a `Transfer` event with `from` set to the zero address.
     *
     * Requirements
     *
     * - `to` cannot be the zero address.
     */
    function _mint(address account, uint256 amount) internal {
        require(account != address(0), "ERC20: mint to the zero address");

        _totalSupply = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(address(0), account, amount);
    }

     /**
     * @dev Destoys `amount` tokens from `account`, reducing the
     * total supply.
     *
     * Emits a `Transfer` event with `to` set to the zero address.
     *
     * Requirements
     *
     * - `account` cannot be the zero address.
     * - `account` must have at least `amount` tokens.
     */
    function _burn(address account, uint256 value) internal {
        require(account != address(0), "ERC20: burn from the zero address");

        _totalSupply = _totalSupply.sub(value);
        _balances[account] = _balances[account].sub(value);
        emit Transfer(account, address(0), value);
    }

    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner`s tokens.
     *
     * This is internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an `Approval` event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(address owner, address spender, uint256 value) internal {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");

        _allowances[owner][spender] = value;
        emit Approval(owner, spender, value);
    }

    /**
     * @dev Destoys `amount` tokens from `account`.`amount` is then deducted
     * from the caller's allowance.
     *
     * See `_burn` and `_approve`.
     */
    function _burnFrom(address account, uint256 amount) internal {
        _burn(account, amount);
        _approve(account, msg.sender, _allowances[account][msg.sender].sub(amount));
    }
}

/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be aplied to your functions to restrict their use to
 * the owner.
 */
contract Ownable {
    address private _owner;

    event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor () internal {
        _owner = msg.sender;
        emit OwnershipTransferred(address(0), _owner);
    }

    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view returns (address) {
        return _owner;
    }

    /**
     * @dev Throws if called by any account other than the owner.
     */
    modifier onlyOwner() {
        require(isOwner(), "Ownable: caller is not the owner");
        _;
    }

    /**
     * @dev Returns true if the caller is the current owner.
     */
    function isOwner() public view returns (bool) {
        return msg.sender == _owner;
    }

    /**
     * @dev Leaves the contract without owner. It will not be possible to call
     * `onlyOwner` functions anymore. Can only be called by the current owner.
     *
     * > Note: Renouncing ownership will leave the contract without an owner,
     * thereby removing any functionality that is only available to the owner.
     */
    function renounceOwnership() public onlyOwner {
        emit OwnershipTransferred(_owner, address(0));
        _owner = address(0);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public onlyOwner {
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     */
    function _transferOwnership(address newOwner) internal {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}

// Compound finance ERC20 market interface
interface ICompoundERC20 {
  function mint(uint mintAmount) external returns (uint);
  function redeemUnderlying(uint redeemAmount) external returns (uint);
  function borrow(uint borrowAmount) external returns (uint);
  function repayBorrow(uint repayAmount) external returns (uint);
  function borrowBalanceCurrent(address account) external returns (uint);
  function exchangeRateCurrent() external returns (uint);
  function transfer(address recipient, uint256 amount) external returns (bool);

  function balanceOf(address account) external view returns (uint);
  function balanceOfUnderlying(address account) external view returns (uint);
  function decimals() external view returns (uint);
  function underlying() external view returns (address);
  function exchangeRateStored() external view returns (uint);
}

// Compound finance comptroller
interface IComptroller {
  function enterMarkets(address[] calldata cTokens) external returns (uint[] memory);
}

/**
 * @title CompoundPool
 * @author Nate Welch <github.com/flyging>
 * @notice Based on Zefram Lou's implementation https://github.com/ZeframLou/pooled-cdai
 * @dev A bank that will pool compound tokens and allows the beneficiary to withdraw
 */
contract CompoundPool is ERC20, ERC20Detailed, Ownable {
    using SafeMath for uint;

    uint256 internal constant PRECISION = 10 ** 18;

    ICompoundERC20 public compoundToken;
    IERC20 public depositToken;
    address public governance;
    address public beneficiary;

    /**
     * @notice Constructor
     * @param _name name of the pool share token
     * @param _symbol symbol of the pool share token
     * @param _comptroller the Compound Comptroller contract used to enter the compoundToken's market
     * @param _compoundToken the Compound Token contract (e.g. cDAI)
     * @param _depositToken the Deposit Token contract (e.g. DAI)
     * @param _beneficiary the address that can withdraw excess deposit tokens (interest/donations)
     */
    constructor(
        string memory _name,
        string memory _symbol,
        IComptroller _comptroller,
        ICompoundERC20 _compoundToken,
        IERC20 _depositToken,
        address _beneficiary
    )
        ERC20Detailed(_name, _symbol, 18)
        public
    {
        compoundToken = _compoundToken;
        depositToken = _depositToken;
        beneficiary = _beneficiary;

        _approveDepositToken(1);

        // Enter compound token market
        address[] memory markets = new address[](1);
        markets[0] = address(compoundToken);
        uint[] memory errors = _comptroller.enterMarkets(markets);
        require(errors[0] == 0, "Failed to enter compound token market");
    }

    /**
     * @dev used to restrict access of functions to the current beneficiary
     */
    modifier onlyBeneficiary() {
        require(msg.sender == beneficiary, "CompoundPool::onlyBeneficiary: Only callable by beneficiary");
        _;
    }

    /**
     * @notice Called by the `owner` to set a new beneficiary
     * @dev This function will fail if called by a non-owner address
     * @param _newBeneficiary The address that will become the new beneficiary
     */
    function updateBeneficiary(address _newBeneficiary) public onlyOwner {
        beneficiary = _newBeneficiary;
    }

    /**
     * @notice The beneficiary calls this function to withdraw excess deposit tokens
     * @dev This function will fail if called by a non-beneficiary or if _amount is higher than the excess deposit tokens
     * @param _to The address that the deposit tokens will be sent to
     * @param _amount The amount of deposit tokens to send to the `_to` address
     */
    function withdrawInterest(address _to, uint256 _amount) public onlyBeneficiary returns (uint256) {
        require(compoundToken.redeemUnderlying(_amount) == 0, "CompoundPool::withdrawInterest: Compound redeem failed");

        //Doing this *after* `redeemUnderlying` so I don't have compoundToken do `exchangeRateCurrent` twice, it's not cheap
        require(depositTokenStoredBalance() >= totalSupply(), "CompoundPool::withdrawInterest: Not enough excess deposit token");

        depositToken.transfer(_to, _amount);
    }

    /**
     * @notice Called by someone wishing to deposit to the bank. This amount, plus previous user's balance, will always be withdrawable
     * @dev Allowance for CompoundPool to transferFrom the msg.sender's balance must be set on the deposit token
     * @param _amount The amount of deposit tokens to deposit
     */
    function deposit(uint256 _amount) public {
        require(depositToken.transferFrom(msg.sender, address(this), _amount), "CompoundPool::deposit: Transfer failed");

        _approveDepositToken(_amount);

        require(compoundToken.mint(_amount) == 0, "CompoundPool::deposit: Compound mint failed");
    
        _mint(msg.sender, _amount);
    }

    /**
     * @notice Called by someone wishing to withdraw from the bank
     * @dev This will fail if msg.sender doesn't have at least _amount pool share tokens
     * @param _amount The amount of deposit tokens to withdraw
     */
    function withdraw(uint256 _amount) public {
        _burn(msg.sender, _amount);

        require(compoundToken.redeemUnderlying(_amount) == 0, "CompoundPool::withdraw: Compound redeem failed");

        require(depositToken.transfer(msg.sender, _amount), "CompoundPool::withdraw: Transfer failed");
    }

    /**
     * @notice Called by someone wishing to donate to the bank. This amount will *not* be added to users balance, and will be usable by the beneficiary.
     * @dev Allowance for CompoundPool to transferFrom the msg.sender's balance must be set on the deposit token
     * @param _amount The amount of deposit tokens to donate
     */
    function donate(uint256 _amount) public {
        require(depositToken.transferFrom(msg.sender, address(this), _amount), "CompoundPool::donate: Transfer failed");

        _approveDepositToken(_amount);

        require(compoundToken.mint(_amount) == 0, "CompoundPool::donate: Compound mint failed");
    }

    /**
     * @notice Returns the amount of deposit tokens that are usable by the beneficiary. Basically, interestEarned+donations
     * @dev Allowance for CompoundPool to transferFrom the msg.sender's balance must be set on the deposit token
     */
    function excessDepositTokens() public returns (uint256) {
        return compoundToken.exchangeRateCurrent().mul(compoundToken.balanceOf(address(this))).div(PRECISION).sub(totalSupply());
    }

    function depositTokenStoredBalance() internal returns (uint256) {
        return compoundToken.exchangeRateStored().mul(compoundToken.balanceOf(address(this))).div(PRECISION);
    }

    function _approveDepositToken(uint256 _minimum) internal {
        if(depositToken.allowance(address(this), address(compoundToken)) < _minimum){
            depositToken.approve(address(compoundToken),uint256(0xffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff));
        }
    }
}

contract IHumanityRegistry {
    function isHuman(address who) public view returns (bool);
}

/**
 * @title UniversalBasicIncome
 * @dev Dai that can be claimed by humans on the Human Registry.
 */
contract UniversalBasicIncome {
    using SafeMath for uint;

    IHumanityRegistry public registry;
    IERC20 public dai;
    CompoundPool public bank;

    uint public constant MONTHLY_INCOME = 1e18; // 1 Dai
    uint public constant INCOME_PER_SECOND = MONTHLY_INCOME / 30 days;

    mapping (address => uint) public claimTimes;

    constructor(IHumanityRegistry _registry, IERC20 _dai, CompoundPool _bank) public {
        registry = _registry;
        dai = _dai;
        bank = _bank;
    }

    function claim() public {
        require(registry.isHuman(msg.sender), "UniversalBasicIncome::claim: You must be on the Humanity registry to claim income");

        uint income;
        uint time = block.timestamp;

        // If claiming for the first time, send 1 month of UBI
        if (claimTimes[msg.sender] == 0) {
            income = MONTHLY_INCOME;
        } else {
            income = time.sub(claimTimes[msg.sender]).mul(INCOME_PER_SECOND);
        }

        uint balance = bank.excessDepositTokens();
        // If not enough Dai reserves, send the remaining balance
        uint actualIncome = balance < income ? balance : income;

        bank.withdrawInterest(msg.sender, actualIncome);
        claimTimes[msg.sender] = time;
    }

    function claimableBalance(address human) public returns (uint256) {
        if(!registry.isHuman(human)){
            return 0;
        }
        uint income;
        uint time = block.timestamp;

        // If claiming for the first time, send 1 month of UBI
        if (claimTimes[human] == 0) {
            income = MONTHLY_INCOME;
        } else {
            income = time.sub(claimTimes[human]).mul(INCOME_PER_SECOND);
        }

        uint balance = bank.excessDepositTokens();
        // If not enough Dai reserves, use the remaining amount
        return balance < income ? balance : income;

    }

}

Contract Security Audit

Contract ABI

API
[{"constant":true,"inputs":[],"name":"name","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"value","type":"uint256"}],"name":"approve","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_newBeneficiary","type":"address"}],"name":"updateBeneficiary","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"totalSupply","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"sender","type":"address"},{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"withdraw","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"decimals","outputs":[{"name":"","type":"uint8"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"beneficiary","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[],"name":"excessDepositTokens","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"governance","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_to","type":"address"},{"name":"_amount","type":"uint256"}],"name":"withdrawInterest","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[{"name":"account","type":"address"}],"name":"balanceOf","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[],"name":"renounceOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"owner","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"isOwner","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"symbol","outputs":[{"name":"","type":"string"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[],"name":"compoundToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"spender","type":"address"},{"name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"recipient","type":"address"},{"name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"name":"","type":"bool"}],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"deposit","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":true,"inputs":[],"name":"depositToken","outputs":[{"name":"","type":"address"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":true,"inputs":[{"name":"owner","type":"address"},{"name":"spender","type":"address"}],"name":"allowance","outputs":[{"name":"","type":"uint256"}],"payable":false,"stateMutability":"view","type":"function"},{"constant":false,"inputs":[{"name":"_amount","type":"uint256"}],"name":"donate","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"constant":false,"inputs":[{"name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"payable":false,"stateMutability":"nonpayable","type":"function"},{"inputs":[{"name":"_name","type":"string"},{"name":"_symbol","type":"string"},{"name":"_comptroller","type":"address"},{"name":"_compoundToken","type":"address"},{"name":"_depositToken","type":"address"},{"name":"_beneficiary","type":"address"}],"payable":false,"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"name":"previousOwner","type":"address"},{"indexed":true,"name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"from","type":"address"},{"indexed":true,"name":"to","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"name":"owner","type":"address"},{"indexed":true,"name":"spender","type":"address"},{"indexed":false,"name":"value","type":"uint256"}],"name":"Approval","type":"event"}]

60806040523480156200001157600080fd5b5060405162002aa138038062002aa18339810180604052620000379190810190620005f9565b85856012826003908051906020019062000053929190620003d5565b50815162000069906004906020850190620003d5565b506005805460ff191660ff9290921691909117610100600160a81b03191661010033810291909117918290556040516001600160a01b0391909204169250600091507f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a3600680546001600160a01b038086166001600160a01b0319928316179092556007805485841690831617905560098054928416929091169190911790556200012060016200027a602090811b901c565b60408051600180825281830190925260609160208083019080388339505060065482519293506001600160a01b0316918391506000906200015d57fe5b6001600160a01b0392831660209182029290920101526040517fc299823800000000000000000000000000000000000000000000000000000000815260609187169063c299823890620001b59085906004016200080f565b600060405180830381600087803b158015620001d057600080fd5b505af1158015620001e5573d6000803e3d6000fd5b505050506040513d6000823e601f3d908101601f191682016040526200020f919081019062000598565b9050806000815181106200021f57fe5b60200260200101516000146200026c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002639062000822565b60405180910390fd5b505050505050505062000914565b6007546006546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815283926001600160a01b039081169263dd62ed3e92620002cc9230921690600401620007d1565b60206040518083038186803b158015620002e557600080fd5b505afa158015620002fa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003209190810190620006bc565b1015620003d2576007546006546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263095ea7b3926200037a9291169060001990600401620007f0565b602060405180830381600087803b1580156200039557600080fd5b505af1158015620003aa573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250620003d09190810190620005d8565b505b50565b828054600181600116156101000203166002900490600052602060002090601f016020900481019282601f106200041857805160ff191683800117855562000448565b8280016001018555821562000448579182015b82811115620004485782518255916020019190600101906200042b565b50620004569291506200045a565b5090565b6200047791905b8082111562000456576000815560010162000461565b90565b6000620004888251620008bd565b9392505050565b600082601f830112620004a157600080fd5b8151620004b8620004b28262000861565b6200083a565b91508181835260208401935060208101905083856020840282011115620004de57600080fd5b60005b838110156200050e5781620004f788826200058a565b8452506020928301929190910190600101620004e1565b5050505092915050565b6000620004888251620008cf565b6000620004888251620008d4565b600082601f8301126200054657600080fd5b815162000557620004b28262000882565b915080825260208301602083018583830111156200057457600080fd5b62000581838284620008e1565b50505092915050565b600062000488825162000477565b600060208284031215620005ab57600080fd5b81516001600160401b03811115620005c257600080fd5b620005d0848285016200048f565b949350505050565b600060208284031215620005eb57600080fd5b6000620005d0848462000518565b60008060008060008060c087890312156200061357600080fd5b86516001600160401b038111156200062a57600080fd5b6200063889828a0162000534565b96505060208701516001600160401b038111156200065557600080fd5b6200066389828a0162000534565b95505060406200067689828a0162000526565b94505060606200068989828a0162000526565b93505060806200069c89828a0162000526565b92505060a0620006af89828a016200047a565b9150509295509295509295565b600060208284031215620006cf57600080fd5b6000620005d084846200058a565b6000620006eb8383620006f3565b505060200190565b620006fe81620008bd565b82525050565b60006200071182620008b0565b6200071d8185620008b4565b93506200072a83620008aa565b60005b828110156200075b5762000743868351620006dd565b95506200075082620008aa565b91506001016200072d565b5093949350505050565b600062000774602583620008b4565b7f4661696c656420746f20656e74657220636f6d706f756e6420746f6b656e206d81527f61726b6574000000000000000000000000000000000000000000000000000000602082015260400192915050565b620006fe8162000477565b60408101620007e18285620006f3565b620004886020830184620006f3565b60408101620008008285620006f3565b620004886020830184620007c6565b6020808252810162000488818462000704565b60208082528101620008348162000765565b92915050565b6040518181016001600160401b03811182821017156200085957600080fd5b604052919050565b60006001600160401b038211156200087857600080fd5b5060209081020190565b60006001600160401b038211156200089957600080fd5b506020601f91909101601f19160190565b60200190565b5190565b90815260200190565b60006001600160a01b03821662000834565b151590565b60006200083482620008bd565b60005b83811015620008fe578181015183820152602001620008e4565b838111156200090e576000848401525b50505050565b61217d80620009246000396000f3fe608060405234801561001057600080fd5b50600436106101a35760003560e01c806370a08231116100ee578063a457c2d711610097578063c89039c511610071578063c89039c514610317578063dd62ed3e1461031f578063f14faf6f14610332578063f2fde38b14610345576101a3565b8063a457c2d7146102de578063a9059cbb146102f1578063b6b55f2514610304576101a3565b80638f32d59b116100c85780638f32d59b146102b957806395d89b41146102c1578063a0e976b6146102c9576101a3565b806370a0823114610296578063715018a6146102a95780638da5cb5b146102b1576101a3565b8063313ce5671161015057806339f9446e1161012a57806339f9446e146102735780635aa6e6751461027b5780635b730e6914610283576101a3565b8063313ce5671461023657806338af3eed1461024b5780633950935114610260576101a3565b806318160ddd1161018157806318160ddd146101fb57806323b872dd146102105780632e1a7d4d14610223576101a3565b806306fdde03146101a8578063095ea7b3146101c65780630aaffd2a146101e6575b600080fd5b6101b0610358565b6040516101bd9190611f48565b60405180910390f35b6101d96101d43660046116a7565b6103ee565b6040516101bd9190611f2c565b6101f96101f43660046115fa565b610405565b005b61020361046f565b6040516101bd91906120a9565b6101d961021e36600461165a565b610475565b6101f96102313660046116f5565b6104cd565b61023e610651565b6040516101bd91906120b7565b61025361065a565b6040516101bd9190611eb2565b6101d961026e3660046116a7565b610669565b6102036106a5565b61025361080c565b6102036102913660046116a7565b61081b565b6102036102a43660046115fa565b6109db565b6101f96109f6565b610253610a7a565b6101d9610a8e565b6101b0610aa4565b6102d1610b05565b6040516101bd9190611f3a565b6101d96102ec3660046116a7565b610b14565b6101d96102ff3660046116a7565b610b50565b6101f96103123660046116f5565b610b5d565b6102d1610ce9565b61020361032d366004611620565b610cf8565b6101f96103403660046116f5565b610d23565b6101f96103533660046115fa565b610ea5565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103e45780601f106103b9576101008083540402835291602001916103e4565b820191906000526020600020905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b60006103fb338484610ed5565b5060015b92915050565b61040d610a8e565b61043557604051600160e51b62461bcd02815260040161042c90612029565b60405180910390fd5b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60025490565b6000610482848484610f8f565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546104c29186916104bd908663ffffffff61109116565b610ed5565b5060015b9392505050565b6104d733826110bc565b6006546040517f852a12e30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063852a12e3906105209084906004016120a9565b602060405180830381600087803b15801561053a57600080fd5b505af115801561054e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105729190810190611713565b1561059257604051600160e51b62461bcd02815260040161042c90611f69565b6007546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a9059cbb906105dd9033908590600401611ee8565b602060405180830381600087803b1580156105f757600080fd5b505af115801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061062f91908101906116d7565b61064e57604051600160e51b62461bcd02815260040161042c90611fe9565b50565b60055460ff1690565b6009546001600160a01b031681565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103fb9185906104bd908663ffffffff61117c16565b60006108076106b261046f565b6006546040517f70a082310000000000000000000000000000000000000000000000000000000081526107fb91670de0b6b3a7640000916107ef916001600160a01b0316906370a082319061070b903090600401611eb2565b60206040518083038186803b15801561072357600080fd5b505afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061075b9190810190611713565b600660009054906101000a90046001600160a01b03166001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107ab57600080fd5b505af11580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107e39190810190611713565b9063ffffffff6111a416565b9063ffffffff6111e116565b9063ffffffff61109116565b905090565b6008546001600160a01b031681565b6009546000906001600160a01b0316331461084b57604051600160e51b62461bcd02815260040161042c90611f99565b6006546040517f852a12e30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063852a12e3906108949085906004016120a9565b602060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108e69190810190611713565b1561090657604051600160e51b62461bcd02815260040161042c90611fb9565b61090e61046f565b610916611219565b101561093757604051600160e51b62461bcd02815260040161042c90612079565b6007546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a9059cbb906109829086908690600401611f1e565b602060405180830381600087803b15801561099c57600080fd5b505af11580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109d491908101906116d7565b5092915050565b6001600160a01b031660009081526020819052604090205490565b6109fe610a8e565b610a1d57604051600160e51b62461bcd02815260040161042c90612029565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b60055461010090046001600160a01b031690565b60055461010090046001600160a01b0316331490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103e45780601f106103b9576101008083540402835291602001916103e4565b6006546001600160a01b031681565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103fb9185906104bd908663ffffffff61109116565b60006103fb338484610f8f565b6007546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd90610baa90339030908690600401611ec0565b602060405180830381600087803b158015610bc457600080fd5b505af1158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bfc91908101906116d7565b610c1b57604051600160e51b62461bcd02815260040161042c90612089565b610c2481611329565b6006546040517fa0712d680000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a0712d6890610c6d9084906004016120a9565b602060405180830381600087803b158015610c8757600080fd5b505af1158015610c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cbf9190810190611713565b15610cdf57604051600160e51b62461bcd02815260040161042c90612059565b61064e3382611476565b6007546001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6007546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd90610d7090339030908690600401611ec0565b602060405180830381600087803b158015610d8a57600080fd5b505af1158015610d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dc291908101906116d7565b610de157604051600160e51b62461bcd02815260040161042c90612009565b610dea81611329565b6006546040517fa0712d680000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a0712d6890610e339084906004016120a9565b602060405180830381600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e859190810190611713565b1561064e57604051600160e51b62461bcd02815260040161042c90611ff9565b610ead610a8e565b610ecc57604051600160e51b62461bcd02815260040161042c90612029565b61064e8161152d565b6001600160a01b038316610efe57604051600160e51b62461bcd02815260040161042c90612069565b6001600160a01b038216610f2757604051600160e51b62461bcd02815260040161042c90611f89565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f829085906120a9565b60405180910390a3505050565b6001600160a01b038316610fb857604051600160e51b62461bcd02815260040161042c90612049565b6001600160a01b038216610fe157604051600160e51b62461bcd02815260040161042c90611f59565b6001600160a01b03831660009081526020819052604090205461100a908263ffffffff61109116565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461103f908263ffffffff61117c16565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f829085906120a9565b6000828211156110b657604051600160e51b62461bcd02815260040161042c90611fc9565b50900390565b6001600160a01b0382166110e557604051600160e51b62461bcd02815260040161042c90612039565b6002546110f8908263ffffffff61109116565b6002556001600160a01b038216600090815260208190526040902054611124908263ffffffff61109116565b6001600160a01b0383166000818152602081905260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111709085906120a9565b60405180910390a35050565b6000828201838110156104c657604051600160e51b62461bcd02815260040161042c90611fa9565b6000826111b3575060006103ff565b828202828482816111c057fe5b04146104c657604051600160e51b62461bcd02815260040161042c90612019565b600080821161120557604051600160e51b62461bcd02815260040161042c90611fd9565b600082848161121057fe5b04949350505050565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009161080791670de0b6b3a7640000916107ef916001600160a01b03909116906370a0823190611277903090600401611eb2565b60206040518083038186803b15801561128f57600080fd5b505afa1580156112a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112c79190810190611713565b600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561131557600080fd5b505afa1580156107bf573d6000803e3d6000fd5b6007546006546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815283926001600160a01b039081169263dd62ed3e926113799230921690600401611f03565b60206040518083038186803b15801561139157600080fd5b505afa1580156113a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113c99190810190611713565b101561064e576007546006546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263095ea7b3926114209291169060001990600401611f1e565b602060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061147291908101906116d7565b5050565b6001600160a01b03821661149f57604051600160e51b62461bcd02815260040161042c90612099565b6002546114b2908263ffffffff61117c16565b6002556001600160a01b0382166000908152602081905260409020546114de908263ffffffff61117c16565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111709085906120a9565b6001600160a01b03811661155657604051600160e51b62461bcd02815260040161042c90611f79565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60006104c682356120d2565b60006104c682516120dd565b60006104c682356120ee565b60006104c682516120ee565b60006020828403121561160c57600080fd5b600061161884846115ca565b949350505050565b6000806040838503121561163357600080fd5b600061163f85856115ca565b9250506020611650858286016115ca565b9150509250929050565b60008060006060848603121561166f57600080fd5b600061167b86866115ca565b935050602061168c868287016115ca565b925050604061169d868287016115e2565b9150509250925092565b600080604083850312156116ba57600080fd5b60006116c685856115ca565b9250506020611650858286016115e2565b6000602082840312156116e957600080fd5b600061161884846115d6565b60006020828403121561170757600080fd5b600061161884846115e2565b60006020828403121561172557600080fd5b600061161884846115ee565b61173a816120f7565b82525050565b61173a816120d2565b61173a816120dd565b61173a816120fe565b6000611766826120c5565b61177081856120c9565b9350611780818560208601612109565b61178981612139565b9093019392505050565b60006117a06023836120c9565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281527f6573730000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006117ff602e836120c9565b7f436f6d706f756e64506f6f6c3a3a77697468647261773a20436f6d706f756e6481527f2072656465656d206661696c6564000000000000000000000000000000000000602082015260400192915050565b600061185e6026836120c9565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006118bd6022836120c9565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726581527f7373000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061191c603b836120c9565b7f436f6d706f756e64506f6f6c3a3a6f6e6c7942656e65666963696172793a204f81527f6e6c792063616c6c61626c652062792062656e65666963696172790000000000602082015260400192915050565b600061197b601b836120c9565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006119b46036836120c9565b7f436f6d706f756e64506f6f6c3a3a7769746864726177496e7465726573743a2081527f436f6d706f756e642072656465656d206661696c656400000000000000000000602082015260400192915050565b6000611a13601e836120c9565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b6000611a4c601a836120c9565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000815260200192915050565b6000611a856027836120c9565b7f436f6d706f756e64506f6f6c3a3a77697468647261773a205472616e7366657281527f206661696c656400000000000000000000000000000000000000000000000000602082015260400192915050565b6000611ae4602a836120c9565b7f436f6d706f756e64506f6f6c3a3a646f6e6174653a20436f6d706f756e64206d81527f696e74206661696c656400000000000000000000000000000000000000000000602082015260400192915050565b6000611b436025836120c9565b7f436f6d706f756e64506f6f6c3a3a646f6e6174653a205472616e73666572206681527f61696c6564000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611ba26021836120c9565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611c016020836120c9565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611c3a6021836120c9565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657381527f7300000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611c996025836120c9565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616481527f6472657373000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611cf8602b836120c9565b7f436f6d706f756e64506f6f6c3a3a6465706f7369743a20436f6d706f756e642081527f6d696e74206661696c6564000000000000000000000000000000000000000000602082015260400192915050565b6000611d576024836120c9565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646481527f7265737300000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611db6603f836120c9565b7f436f6d706f756e64506f6f6c3a3a7769746864726177496e7465726573743a2081527f4e6f7420656e6f75676820657863657373206465706f73697420746f6b656e00602082015260400192915050565b6000611e156026836120c9565b7f436f6d706f756e64506f6f6c3a3a6465706f7369743a205472616e736665722081527f6661696c65640000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611e74601f836120c9565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b61173a816120ee565b61173a816120f1565b602081016103ff8284611740565b60608101611ece8286611731565b611edb6020830185611740565b6116186040830184611ea0565b60408101611ef68285611731565b6104c66020830184611ea0565b60408101611f118285611740565b6104c66020830184611740565b60408101611ef68285611740565b602081016103ff8284611749565b602081016103ff8284611752565b602080825281016104c6818461175b565b602080825281016103ff81611793565b602080825281016103ff816117f2565b602080825281016103ff81611851565b602080825281016103ff816118b0565b602080825281016103ff8161190f565b602080825281016103ff8161196e565b602080825281016103ff816119a7565b602080825281016103ff81611a06565b602080825281016103ff81611a3f565b602080825281016103ff81611a78565b602080825281016103ff81611ad7565b602080825281016103ff81611b36565b602080825281016103ff81611b95565b602080825281016103ff81611bf4565b602080825281016103ff81611c2d565b602080825281016103ff81611c8c565b602080825281016103ff81611ceb565b602080825281016103ff81611d4a565b602080825281016103ff81611da9565b602080825281016103ff81611e08565b602080825281016103ff81611e67565b602081016103ff8284611ea0565b602081016103ff8284611ea9565b5190565b90815260200190565b60006103ff826120e2565b151590565b6001600160a01b031690565b90565b60ff1690565b60006103ff825b60006103ff826120d2565b60005b8381101561212457818101518382015260200161210c565b83811115612133576000848401525b50505050565b601f01601f19169056fea265627a7a72305820ca42dd174f093c809029b50ef07586a3247aa1fd8ce92e353df55a70ad2e62096c6578706572696d656e74616cf5003700000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a48756d616e69747920436f6d706f756e642044616920506f6f6c00000000000000000000000000000000000000000000000000000000000000000000000000044843445000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101a35760003560e01c806370a08231116100ee578063a457c2d711610097578063c89039c511610071578063c89039c514610317578063dd62ed3e1461031f578063f14faf6f14610332578063f2fde38b14610345576101a3565b8063a457c2d7146102de578063a9059cbb146102f1578063b6b55f2514610304576101a3565b80638f32d59b116100c85780638f32d59b146102b957806395d89b41146102c1578063a0e976b6146102c9576101a3565b806370a0823114610296578063715018a6146102a95780638da5cb5b146102b1576101a3565b8063313ce5671161015057806339f9446e1161012a57806339f9446e146102735780635aa6e6751461027b5780635b730e6914610283576101a3565b8063313ce5671461023657806338af3eed1461024b5780633950935114610260576101a3565b806318160ddd1161018157806318160ddd146101fb57806323b872dd146102105780632e1a7d4d14610223576101a3565b806306fdde03146101a8578063095ea7b3146101c65780630aaffd2a146101e6575b600080fd5b6101b0610358565b6040516101bd9190611f48565b60405180910390f35b6101d96101d43660046116a7565b6103ee565b6040516101bd9190611f2c565b6101f96101f43660046115fa565b610405565b005b61020361046f565b6040516101bd91906120a9565b6101d961021e36600461165a565b610475565b6101f96102313660046116f5565b6104cd565b61023e610651565b6040516101bd91906120b7565b61025361065a565b6040516101bd9190611eb2565b6101d961026e3660046116a7565b610669565b6102036106a5565b61025361080c565b6102036102913660046116a7565b61081b565b6102036102a43660046115fa565b6109db565b6101f96109f6565b610253610a7a565b6101d9610a8e565b6101b0610aa4565b6102d1610b05565b6040516101bd9190611f3a565b6101d96102ec3660046116a7565b610b14565b6101d96102ff3660046116a7565b610b50565b6101f96103123660046116f5565b610b5d565b6102d1610ce9565b61020361032d366004611620565b610cf8565b6101f96103403660046116f5565b610d23565b6101f96103533660046115fa565b610ea5565b60038054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103e45780601f106103b9576101008083540402835291602001916103e4565b820191906000526020600020905b8154815290600101906020018083116103c757829003601f168201915b5050505050905090565b60006103fb338484610ed5565b5060015b92915050565b61040d610a8e565b61043557604051600160e51b62461bcd02815260040161042c90612029565b60405180910390fd5b600980547fffffffffffffffffffffffff0000000000000000000000000000000000000000166001600160a01b0392909216919091179055565b60025490565b6000610482848484610f8f565b6001600160a01b0384166000908152600160209081526040808320338085529252909120546104c29186916104bd908663ffffffff61109116565b610ed5565b5060015b9392505050565b6104d733826110bc565b6006546040517f852a12e30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063852a12e3906105209084906004016120a9565b602060405180830381600087803b15801561053a57600080fd5b505af115801561054e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506105729190810190611713565b1561059257604051600160e51b62461bcd02815260040161042c90611f69565b6007546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a9059cbb906105dd9033908590600401611ee8565b602060405180830381600087803b1580156105f757600080fd5b505af115801561060b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061062f91908101906116d7565b61064e57604051600160e51b62461bcd02815260040161042c90611fe9565b50565b60055460ff1690565b6009546001600160a01b031681565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103fb9185906104bd908663ffffffff61117c16565b60006108076106b261046f565b6006546040517f70a082310000000000000000000000000000000000000000000000000000000081526107fb91670de0b6b3a7640000916107ef916001600160a01b0316906370a082319061070b903090600401611eb2565b60206040518083038186803b15801561072357600080fd5b505afa158015610737573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061075b9190810190611713565b600660009054906101000a90046001600160a01b03166001600160a01b031663bd6d894d6040518163ffffffff1660e01b8152600401602060405180830381600087803b1580156107ab57600080fd5b505af11580156107bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506107e39190810190611713565b9063ffffffff6111a416565b9063ffffffff6111e116565b9063ffffffff61109116565b905090565b6008546001600160a01b031681565b6009546000906001600160a01b0316331461084b57604051600160e51b62461bcd02815260040161042c90611f99565b6006546040517f852a12e30000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063852a12e3906108949085906004016120a9565b602060405180830381600087803b1580156108ae57600080fd5b505af11580156108c2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506108e69190810190611713565b1561090657604051600160e51b62461bcd02815260040161042c90611fb9565b61090e61046f565b610916611219565b101561093757604051600160e51b62461bcd02815260040161042c90612079565b6007546040517fa9059cbb0000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a9059cbb906109829086908690600401611f1e565b602060405180830381600087803b15801561099c57600080fd5b505af11580156109b0573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506109d491908101906116d7565b5092915050565b6001600160a01b031660009081526020819052604090205490565b6109fe610a8e565b610a1d57604051600160e51b62461bcd02815260040161042c90612029565b60055460405160009161010090046001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a36005805474ffffffffffffffffffffffffffffffffffffffff0019169055565b60055461010090046001600160a01b031690565b60055461010090046001600160a01b0316331490565b60048054604080516020601f60026000196101006001881615020190951694909404938401819004810282018101909252828152606093909290918301828280156103e45780601f106103b9576101008083540402835291602001916103e4565b6006546001600160a01b031681565b3360008181526001602090815260408083206001600160a01b038716845290915281205490916103fb9185906104bd908663ffffffff61109116565b60006103fb338484610f8f565b6007546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd90610baa90339030908690600401611ec0565b602060405180830381600087803b158015610bc457600080fd5b505af1158015610bd8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610bfc91908101906116d7565b610c1b57604051600160e51b62461bcd02815260040161042c90612089565b610c2481611329565b6006546040517fa0712d680000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a0712d6890610c6d9084906004016120a9565b602060405180830381600087803b158015610c8757600080fd5b505af1158015610c9b573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610cbf9190810190611713565b15610cdf57604051600160e51b62461bcd02815260040161042c90612059565b61064e3382611476565b6007546001600160a01b031681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b6007546040517f23b872dd0000000000000000000000000000000000000000000000000000000081526001600160a01b03909116906323b872dd90610d7090339030908690600401611ec0565b602060405180830381600087803b158015610d8a57600080fd5b505af1158015610d9e573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610dc291908101906116d7565b610de157604051600160e51b62461bcd02815260040161042c90612009565b610dea81611329565b6006546040517fa0712d680000000000000000000000000000000000000000000000000000000081526001600160a01b039091169063a0712d6890610e339084906004016120a9565b602060405180830381600087803b158015610e4d57600080fd5b505af1158015610e61573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250610e859190810190611713565b1561064e57604051600160e51b62461bcd02815260040161042c90611ff9565b610ead610a8e565b610ecc57604051600160e51b62461bcd02815260040161042c90612029565b61064e8161152d565b6001600160a01b038316610efe57604051600160e51b62461bcd02815260040161042c90612069565b6001600160a01b038216610f2757604051600160e51b62461bcd02815260040161042c90611f89565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590610f829085906120a9565b60405180910390a3505050565b6001600160a01b038316610fb857604051600160e51b62461bcd02815260040161042c90612049565b6001600160a01b038216610fe157604051600160e51b62461bcd02815260040161042c90611f59565b6001600160a01b03831660009081526020819052604090205461100a908263ffffffff61109116565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461103f908263ffffffff61117c16565b6001600160a01b0380841660008181526020819052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90610f829085906120a9565b6000828211156110b657604051600160e51b62461bcd02815260040161042c90611fc9565b50900390565b6001600160a01b0382166110e557604051600160e51b62461bcd02815260040161042c90612039565b6002546110f8908263ffffffff61109116565b6002556001600160a01b038216600090815260208190526040902054611124908263ffffffff61109116565b6001600160a01b0383166000818152602081905260408082209390935591517fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111709085906120a9565b60405180910390a35050565b6000828201838110156104c657604051600160e51b62461bcd02815260040161042c90611fa9565b6000826111b3575060006103ff565b828202828482816111c057fe5b04146104c657604051600160e51b62461bcd02815260040161042c90612019565b600080821161120557604051600160e51b62461bcd02815260040161042c90611fd9565b600082848161121057fe5b04949350505050565b6006546040517f70a0823100000000000000000000000000000000000000000000000000000000815260009161080791670de0b6b3a7640000916107ef916001600160a01b03909116906370a0823190611277903090600401611eb2565b60206040518083038186803b15801561128f57600080fd5b505afa1580156112a3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506112c79190810190611713565b600660009054906101000a90046001600160a01b03166001600160a01b031663182df0f56040518163ffffffff1660e01b815260040160206040518083038186803b15801561131557600080fd5b505afa1580156107bf573d6000803e3d6000fd5b6007546006546040517fdd62ed3e00000000000000000000000000000000000000000000000000000000815283926001600160a01b039081169263dd62ed3e926113799230921690600401611f03565b60206040518083038186803b15801561139157600080fd5b505afa1580156113a5573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052506113c99190810190611713565b101561064e576007546006546040517f095ea7b30000000000000000000000000000000000000000000000000000000081526001600160a01b039283169263095ea7b3926114209291169060001990600401611f1e565b602060405180830381600087803b15801561143a57600080fd5b505af115801561144e573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525061147291908101906116d7565b5050565b6001600160a01b03821661149f57604051600160e51b62461bcd02815260040161042c90612099565b6002546114b2908263ffffffff61117c16565b6002556001600160a01b0382166000908152602081905260409020546114de908263ffffffff61117c16565b6001600160a01b0383166000818152602081905260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906111709085906120a9565b6001600160a01b03811661155657604051600160e51b62461bcd02815260040161042c90611f79565b6005546040516001600160a01b0380841692610100900416907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b039092166101000274ffffffffffffffffffffffffffffffffffffffff0019909216919091179055565b60006104c682356120d2565b60006104c682516120dd565b60006104c682356120ee565b60006104c682516120ee565b60006020828403121561160c57600080fd5b600061161884846115ca565b949350505050565b6000806040838503121561163357600080fd5b600061163f85856115ca565b9250506020611650858286016115ca565b9150509250929050565b60008060006060848603121561166f57600080fd5b600061167b86866115ca565b935050602061168c868287016115ca565b925050604061169d868287016115e2565b9150509250925092565b600080604083850312156116ba57600080fd5b60006116c685856115ca565b9250506020611650858286016115e2565b6000602082840312156116e957600080fd5b600061161884846115d6565b60006020828403121561170757600080fd5b600061161884846115e2565b60006020828403121561172557600080fd5b600061161884846115ee565b61173a816120f7565b82525050565b61173a816120d2565b61173a816120dd565b61173a816120fe565b6000611766826120c5565b61177081856120c9565b9350611780818560208601612109565b61178981612139565b9093019392505050565b60006117a06023836120c9565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647281527f6573730000000000000000000000000000000000000000000000000000000000602082015260400192915050565b60006117ff602e836120c9565b7f436f6d706f756e64506f6f6c3a3a77697468647261773a20436f6d706f756e6481527f2072656465656d206661696c6564000000000000000000000000000000000000602082015260400192915050565b600061185e6026836120c9565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206181527f6464726573730000000000000000000000000000000000000000000000000000602082015260400192915050565b60006118bd6022836120c9565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726581527f7373000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b600061191c603b836120c9565b7f436f6d706f756e64506f6f6c3a3a6f6e6c7942656e65666963696172793a204f81527f6e6c792063616c6c61626c652062792062656e65666963696172790000000000602082015260400192915050565b600061197b601b836120c9565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000815260200192915050565b60006119b46036836120c9565b7f436f6d706f756e64506f6f6c3a3a7769746864726177496e7465726573743a2081527f436f6d706f756e642072656465656d206661696c656400000000000000000000602082015260400192915050565b6000611a13601e836120c9565b7f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815260200192915050565b6000611a4c601a836120c9565b7f536166654d6174683a206469766973696f6e206279207a65726f000000000000815260200192915050565b6000611a856027836120c9565b7f436f6d706f756e64506f6f6c3a3a77697468647261773a205472616e7366657281527f206661696c656400000000000000000000000000000000000000000000000000602082015260400192915050565b6000611ae4602a836120c9565b7f436f6d706f756e64506f6f6c3a3a646f6e6174653a20436f6d706f756e64206d81527f696e74206661696c656400000000000000000000000000000000000000000000602082015260400192915050565b6000611b436025836120c9565b7f436f6d706f756e64506f6f6c3a3a646f6e6174653a205472616e73666572206681527f61696c6564000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611ba26021836120c9565b7f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f81527f7700000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611c016020836120c9565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572815260200192915050565b6000611c3a6021836120c9565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657381527f7300000000000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611c996025836120c9565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616481527f6472657373000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611cf8602b836120c9565b7f436f6d706f756e64506f6f6c3a3a6465706f7369743a20436f6d706f756e642081527f6d696e74206661696c6564000000000000000000000000000000000000000000602082015260400192915050565b6000611d576024836120c9565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646481527f7265737300000000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611db6603f836120c9565b7f436f6d706f756e64506f6f6c3a3a7769746864726177496e7465726573743a2081527f4e6f7420656e6f75676820657863657373206465706f73697420746f6b656e00602082015260400192915050565b6000611e156026836120c9565b7f436f6d706f756e64506f6f6c3a3a6465706f7369743a205472616e736665722081527f6661696c65640000000000000000000000000000000000000000000000000000602082015260400192915050565b6000611e74601f836120c9565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300815260200192915050565b61173a816120ee565b61173a816120f1565b602081016103ff8284611740565b60608101611ece8286611731565b611edb6020830185611740565b6116186040830184611ea0565b60408101611ef68285611731565b6104c66020830184611ea0565b60408101611f118285611740565b6104c66020830184611740565b60408101611ef68285611740565b602081016103ff8284611749565b602081016103ff8284611752565b602080825281016104c6818461175b565b602080825281016103ff81611793565b602080825281016103ff816117f2565b602080825281016103ff81611851565b602080825281016103ff816118b0565b602080825281016103ff8161190f565b602080825281016103ff8161196e565b602080825281016103ff816119a7565b602080825281016103ff81611a06565b602080825281016103ff81611a3f565b602080825281016103ff81611a78565b602080825281016103ff81611ad7565b602080825281016103ff81611b36565b602080825281016103ff81611b95565b602080825281016103ff81611bf4565b602080825281016103ff81611c2d565b602080825281016103ff81611c8c565b602080825281016103ff81611ceb565b602080825281016103ff81611d4a565b602080825281016103ff81611da9565b602080825281016103ff81611e08565b602080825281016103ff81611e67565b602081016103ff8284611ea0565b602081016103ff8284611ea9565b5190565b90815260200190565b60006103ff826120e2565b151590565b6001600160a01b031690565b90565b60ff1690565b60006103ff825b60006103ff826120d2565b60005b8381101561212457818101518382015260200161210c565b83811115612133576000848401525b50505050565b601f01601f19169056fea265627a7a72305820ca42dd174f093c809029b50ef07586a3247aa1fd8ce92e353df55a70ad2e62096c6578706572696d656e74616cf50037

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

00000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a232603590000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001a48756d616e69747920436f6d706f756e642044616920506f6f6c00000000000000000000000000000000000000000000000000000000000000000000000000044843445000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _name (string): Humanity Compound Dai Pool
Arg [1] : _symbol (string): HCDP
Arg [2] : _comptroller (address): 0x3d9819210A31b4961b30EF54bE2aeD79B9c9Cd3B
Arg [3] : _compoundToken (address): 0xF5DCe57282A584D2746FaF1593d3121Fcac444dC
Arg [4] : _depositToken (address): 0x89d24A6b4CcB1B6fAA2625fE562bDD9a23260359
Arg [5] : _beneficiary (address): 0x0000000000000000000000000000000000000000

-----Encoded View---------------
10 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [2] : 0000000000000000000000003d9819210a31b4961b30ef54be2aed79b9c9cd3b
Arg [3] : 000000000000000000000000f5dce57282a584d2746faf1593d3121fcac444dc
Arg [4] : 00000000000000000000000089d24a6b4ccb1b6faa2625fe562bdd9a23260359
Arg [5] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [6] : 000000000000000000000000000000000000000000000000000000000000001a
Arg [7] : 48756d616e69747920436f6d706f756e642044616920506f6f6c000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000004
Arg [9] : 4843445000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

19631:5930:0:-;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;19631:5930:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7076:83;;;:::i;:::-;;;;;;;;;;;;;;;;10467:148;;;;;;;;;:::i;:::-;;;;;;;;21639:117;;;;;;;;;:::i;:::-;;9490:91;;;:::i;:::-;;;;;;;;11086:256;;;;;;;;;:::i;23623:310::-;;;;;;;;;:::i;7934:83::-;;;:::i;:::-;;;;;;;;19887:26;;;:::i;:::-;;;;;;;;11751:206;;;;;;;;;:::i;24866:195::-;;;:::i;19855:25::-;;;:::i;22143:534::-;;;;;;;;;:::i;9644:110::-;;;;;;;;;:::i;17602:140::-;;;:::i;16791:79::-;;;:::i;17157:92::-;;;:::i;7278:87::-;;;:::i;19780:35::-;;;:::i;:::-;;;;;;;;12460:216;;;;;;;;;:::i;9967:156::-;;;;;;;;;:::i;23017:358::-;;;;;;;;;:::i;19822:26::-;;;:::i;10186:134::-;;;;;;;;;:::i;24289:312::-;;;;;;;;;:::i;17897:109::-;;;;;;;;;:::i;7076:83::-;7146:5;7139:12;;;;;;;;-1:-1:-1;;7139:12:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7113:13;;7139:12;;7146:5;;7139:12;;7146:5;7139:12;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7076:83;:::o;10467:148::-;10532:4;10549:36;10558:10;10570:7;10579:5;10549:8;:36::i;:::-;-1:-1:-1;10603:4:0;10467:148;;;;;:::o;21639:117::-;17003:9;:7;:9::i;:::-;16995:54;;;;-1:-1:-1;;;;;16995:54:0;;;;;;;;;;;;;;;;;21719:11;:29;;;;-1:-1:-1;;;;;21719:29:0;;;;;;;;;;21639:117::o;9490:91::-;9561:12;;9490:91;:::o;11086:256::-;11175:4;11192:36;11202:6;11210:9;11221:6;11192:9;:36::i;:::-;-1:-1:-1;;;;;11268:19:0;;;;;;:11;:19;;;;;;;;11256:10;11268:31;;;;;;;;;11239:73;;11248:6;;11268:43;;11304:6;11268:43;:35;:43;:::i;:::-;11239:8;:73::i;:::-;-1:-1:-1;11330:4:0;11086:256;;;;;;:::o;23623:310::-;23676:26;23682:10;23694:7;23676:5;:26::i;:::-;23723:13;;:39;;;;;-1:-1:-1;;;;;23723:13:0;;;;:30;;:39;;23754:7;;23723:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23723:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23723:39: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;23723:39:0;;;;;;;;;:44;23715:103;;;;-1:-1:-1;;;;;23715:103:0;;;;;;;;;23839:12;;:42;;;;;-1:-1:-1;;;;;23839:12:0;;;;:21;;:42;;23861:10;;23873:7;;23839:42;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23839:42:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23839:42: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;23839:42:0;;;;;;;;;23831:94;;;;-1:-1:-1;;;;;23831:94:0;;;;;;;;;23623:310;:::o;7934:83::-;8000:9;;;;7934:83;:::o;19887:26::-;;;-1:-1:-1;;;;;19887:26:0;;:::o;11751:206::-;11857:10;11831:4;11878:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;11878:32:0;;;;;;;;;;11831:4;;11848:79;;11869:7;;11878:48;;11915:10;11878:48;:36;:48;:::i;24866:195::-;24913:7;24940:113;25039:13;:11;:13::i;:::-;24980;;:38;;;;;24940:94;;19763:8;;24940:79;;-1:-1:-1;;;;;24980:13:0;;:23;;:38;;25012:4;;24980:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24980:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24980: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;24980:38:0;;;;;;;;;24940:13;;;;;;;;;-1:-1:-1;;;;;24940:13:0;-1:-1:-1;;;;;24940:33:0;;:35;;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24940:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24940:35: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;24940:35:0;;;;;;;;;:39;:79;:39;:79;:::i;:::-;:83;:94;:83;:94;:::i;:::-;:98;:113;:98;:113;:::i;:::-;24933:120;;24866:195;:::o;19855:25::-;;;-1:-1:-1;;;;;19855:25:0;;:::o;22143:534::-;21305:11;;22231:7;;-1:-1:-1;;;;;21305:11:0;21291:10;:25;21283:97;;;;-1:-1:-1;;;;;21283:97:0;;;;;;;;;22259:13;;:39;;;;;-1:-1:-1;;;;;22259:13:0;;;;:30;;:39;;22290:7;;22259:39;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22259:39:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22259:39: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;22259:39:0;;;;;;;;;:44;22251:111;;;;-1:-1:-1;;;;;22251:111:0;;;;;;;;;22540:13;:11;:13::i;:::-;22509:27;:25;:27::i;:::-;:44;;22501:120;;;;-1:-1:-1;;;;;22501:120:0;;;;;;;;;22634:12;;:35;;;;;-1:-1:-1;;;;;22634:12:0;;;;:21;;:35;;22656:3;;22661:7;;22634:35;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;22634:35:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;22634:35: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;22634:35:0;;;;;;;;;;22143:534;;;;:::o;9644:110::-;-1:-1:-1;;;;;9728:18:0;9701:7;9728:18;;;;;;;;;;;;9644:110::o;17602:140::-;17003:9;:7;:9::i;:::-;16995:54;;;;-1:-1:-1;;;;;16995:54:0;;;;;;;;;17685:6;;17664:40;;17701:1;;17685:6;;;-1:-1:-1;;;;;17685:6:0;;17664:40;;17701:1;;17664:40;17715:6;:19;;-1:-1:-1;;17715:19:0;;;17602:140::o;16791:79::-;16856:6;;;;;-1:-1:-1;;;;;16856:6:0;;16791:79::o;17157:92::-;17235:6;;;;;-1:-1:-1;;;;;17235:6:0;17221:10;:20;;17157:92::o;7278:87::-;7350:7;7343:14;;;;;;;;-1:-1:-1;;7343:14:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7317:13;;7343:14;;7350:7;;7343:14;;7350:7;7343:14;;;;;;;;;;;;;;;;;;;;;;;;19780:35;;;-1:-1:-1;;;;;19780:35:0;;:::o;12460:216::-;12571:10;12545:4;12592:23;;;:11;:23;;;;;;;;-1:-1:-1;;;;;12592:32:0;;;;;;;;;;12545:4;;12562:84;;12583:7;;12592:53;;12629:15;12592:53;:36;:53;:::i;9967:156::-;10036:4;10053:40;10063:10;10075:9;10086:6;10053:9;:40::i;23017:358::-;23077:12;;:61;;;;;-1:-1:-1;;;;;23077:12:0;;;;:25;;:61;;23103:10;;23123:4;;23130:7;;23077:61;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23077:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23077:61: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;23077:61:0;;;;;;;;;23069:112;;;;-1:-1:-1;;;;;23069:112:0;;;;;;;;;23194:29;23215:7;23194:20;:29::i;:::-;23244:13;;:27;;;;;-1:-1:-1;;;;;23244:13:0;;;;:18;;:27;;23263:7;;23244:27;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;23244:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;23244:27: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;23244:27:0;;;;;;;;;:32;23236:88;;;;-1:-1:-1;;;;;23236:88:0;;;;;;;;;23341:26;23347:10;23359:7;23341:5;:26::i;19822:::-;;;-1:-1:-1;;;;;19822:26:0;;:::o;10186:134::-;-1:-1:-1;;;;;10285:18:0;;;10258:7;10285:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;10186:134::o;24289:312::-;24348:12;;:61;;;;;-1:-1:-1;;;;;24348:12:0;;;;:25;;:61;;24374:10;;24394:4;;24401:7;;24348:61;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24348:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24348:61: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;24348:61:0;;;;;;;;;24340:111;;;;-1:-1:-1;;;;;24340:111:0;;;;;;;;;24464:29;24485:7;24464:20;:29::i;:::-;24514:13;;:27;;;;;-1:-1:-1;;;;;24514:13:0;;;;:18;;:27;;24533:7;;24514:27;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;24514:27:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;24514:27: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;24514:27:0;;;;;;;;;:32;24506:87;;;;-1:-1:-1;;;;;24506:87:0;;;;;;;;17897:109;17003:9;:7;:9::i;:::-;16995:54;;;;-1:-1:-1;;;;;16995:54:0;;;;;;;;;17970:28;17989:8;17970:18;:28::i;15262:335::-;-1:-1:-1;;;;;15355:19:0;;15347:68;;;;-1:-1:-1;;;;;15347:68:0;;;;;;;;;-1:-1:-1;;;;;15434:21:0;;15426:68;;;;-1:-1:-1;;;;;15426:68:0;;;;;;;;;-1:-1:-1;;;;;15507:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:35;;;15558:31;;;;;15537:5;;15558:31;;;;;;;;;;15262:335;;;:::o;13166:429::-;-1:-1:-1;;;;;13264:20:0;;13256:70;;;;-1:-1:-1;;;;;13256:70:0;;;;;;;;;-1:-1:-1;;;;;13345:23:0;;13337:71;;;;-1:-1:-1;;;;;13337:71:0;;;;;;;;;-1:-1:-1;;;;;13441:17:0;;:9;:17;;;;;;;;;;;:29;;13463:6;13441:29;:21;:29;:::i;:::-;-1:-1:-1;;;;;13421:17:0;;;:9;:17;;;;;;;;;;;:49;;;;13504:20;;;;;;;:32;;13529:6;13504:32;:24;:32;:::i;:::-;-1:-1:-1;;;;;13481:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13552:35;;;;;;;;;;13580:6;;13552:35;;4135:184;4193:7;4226:1;4221;:6;;4213:49;;;;-1:-1:-1;;;;;4213:49:0;;;;;;;;;-1:-1:-1;4285:5:0;;;4135:184::o;14516:306::-;-1:-1:-1;;;;;14591:21:0;;14583:67;;;;-1:-1:-1;;;;;14583:67:0;;;;;;;;;14678:12;;:23;;14695:5;14678:23;:16;:23;:::i;:::-;14663:12;:38;-1:-1:-1;;;;;14733:18:0;;:9;:18;;;;;;;;;;;:29;;14756:5;14733:29;:22;:29;:::i;:::-;-1:-1:-1;;;;;14712:18:0;;:9;:18;;;;;;;;;;;:50;;;;14778:36;;;;;;14808:5;;14778:36;;;;;;;;;;14516:306;;:::o;3679:181::-;3737:7;3769:5;;;3793:6;;;;3785:46;;;;-1:-1:-1;;;;;3785:46:0;;;;;;;;4570:470;4628:7;4872:6;4868:47;;-1:-1:-1;4902:1:0;4895:8;;4868:47;4939:5;;;4943:1;4939;:5;:1;4963:5;;;;;:10;4955:56;;;;-1:-1:-1;;;;;4955:56:0;;;;;;;;5508:333;5566:7;5665:1;5661;:5;5653:44;;;;-1:-1:-1;;;;;5653:44:0;;;;;;;;;5708:9;5724:1;5720;:5;;;;;;;5508:333;-1:-1:-1;;;;5508:333:0:o;25069:183::-;25190:13;;:38;;;;;25124:7;;25151:93;;19763:8;;25151:78;;-1:-1:-1;;;;;25190:13:0;;;;:23;;:38;;25222:4;;25190:38;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25190:38:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25190: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;25190:38:0;;;;;;;;;25151:13;;;;;;;;;-1:-1:-1;;;;;25151:13:0;-1:-1:-1;;;;;25151:32:0;;:34;;;;;;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25151:34:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;25260:298:0;25331:12;;25377:13;;25331:61;;;;;25395:8;;-1:-1:-1;;;;;25331:12:0;;;;:22;;:61;;25362:4;;25377:13;;25331:61;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25331:61:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25331:61: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;25331:61:0;;;;;;;;;:72;25328:223;;;25419:12;;25448:13;;25419:120;;;;;-1:-1:-1;;;;;25419:12:0;;;;:20;;:120;;25448:13;;;-1:-1:-1;;25471:66:0;25419:120;;;;;;;;;;;;;;;;;8:9:-1;5:2;;;30:1;27;20:12;5:2;25419:120:0;;;;8:9:-1;5:2;;;45:16;42:1;39;24:38;77:16;74:1;67:27;5:2;25419:120: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;25419:120:0;;;;;;;;;;25260:298;:::o;13876:308::-;-1:-1:-1;;;;;13952:21:0;;13944:65;;;;-1:-1:-1;;;;;13944:65:0;;;;;;;;;14037:12;;:24;;14054:6;14037:24;:16;:24;:::i;:::-;14022:12;:39;-1:-1:-1;;;;;14093:18:0;;:9;:18;;;;;;;;;;;:30;;14116:6;14093:30;:22;:30;:::i;:::-;-1:-1:-1;;;;;14072:18:0;;:9;:18;;;;;;;;;;;:51;;;;14139:37;;14072:18;;:9;14139:37;;;;14169:6;;14139:37;;18112:229;-1:-1:-1;;;;;18186:22:0;;18178:73;;;;-1:-1:-1;;;;;18178:73:0;;;;;;;;;18288:6;;18267:38;;-1:-1:-1;;;;;18267:38:0;;;;18288:6;;;;;18267:38;;;;;18316:6;:17;;-1:-1:-1;;;;;18316:17:0;;;;;-1:-1:-1;;18316:17:0;;;;;;;;;18112:229::o;5:118:-1:-;;72:46;110:6;97:20;72:46;;130:116;;205:36;233:6;227:13;205:36;;253:118;;320:46;358:6;345:20;320:46;;378:122;;456:39;487:6;481:13;456:39;;507:241;;611:2;599:9;590:7;586:23;582:32;579:2;;;627:1;624;617:12;579:2;662:1;679:53;724:7;704:9;679:53;;;669:63;573:175;-1:-1;;;;573:175;755:366;;;876:2;864:9;855:7;851:23;847:32;844:2;;;892:1;889;882:12;844:2;927:1;944:53;989:7;969:9;944:53;;;934:63;;906:97;1034:2;1052:53;1097:7;1088:6;1077:9;1073:22;1052:53;;;1042:63;;1013:98;838:283;;;;;;1128:491;;;;1266:2;1254:9;1245:7;1241:23;1237:32;1234:2;;;1282:1;1279;1272:12;1234:2;1317:1;1334:53;1379:7;1359:9;1334:53;;;1324:63;;1296:97;1424:2;1442:53;1487:7;1478:6;1467:9;1463:22;1442:53;;;1432:63;;1403:98;1532:2;1550:53;1595:7;1586:6;1575:9;1571:22;1550:53;;;1540:63;;1511:98;1228:391;;;;;;1626:366;;;1747:2;1735:9;1726:7;1722:23;1718:32;1715:2;;;1763:1;1760;1753:12;1715:2;1798:1;1815:53;1860:7;1840:9;1815:53;;;1805:63;;1777:97;1905:2;1923:53;1968:7;1959:6;1948:9;1944:22;1923:53;;1999:257;;2111:2;2099:9;2090:7;2086:23;2082:32;2079:2;;;2127:1;2124;2117:12;2079:2;2162:1;2179:61;2232:7;2212:9;2179:61;;2263:241;;2367:2;2355:9;2346:7;2342:23;2338:32;2335:2;;;2383:1;2380;2373:12;2335:2;2418:1;2435:53;2480:7;2460:9;2435:53;;2511:263;;2626:2;2614:9;2605:7;2601:23;2597:32;2594:2;;;2642:1;2639;2632:12;2594:2;2677:1;2694:64;2750:7;2730:9;2694:64;;2781:142;2872:45;2911:5;2872:45;;;2867:3;2860:58;2854:69;;;2930:120;3013:31;3038:5;3013:31;;3057:111;3134:28;3156:5;3134:28;;3175:170;3280:59;3333:5;3280:59;;3511:347;;3623:39;3656:5;3623:39;;;3674:71;3738:6;3733:3;3674:71;;;3667:78;;3750:52;3795:6;3790:3;3783:4;3776:5;3772:16;3750:52;;;3823:29;3845:6;3823:29;;;3814:39;;;;3603:255;-1:-1;;;3603:255;3866:465;;4026:67;4090:2;4085:3;4026:67;;;4126:66;4106:87;;4227:66;4222:2;4213:12;;4206:88;4322:2;4313:12;;4012:319;-1:-1;;4012:319;4340:465;;4500:67;4564:2;4559:3;4500:67;;;4600:66;4580:87;;4701:66;4696:2;4687:12;;4680:88;4796:2;4787:12;;4486:319;-1:-1;;4486:319;4814:465;;4974:67;5038:2;5033:3;4974:67;;;5074:66;5054:87;;5175:66;5170:2;5161:12;;5154:88;5270:2;5261:12;;4960:319;-1:-1;;4960:319;5288:465;;5448:67;5512:2;5507:3;5448:67;;;5548:66;5528:87;;5649:66;5644:2;5635:12;;5628:88;5744:2;5735:12;;5434:319;-1:-1;;5434:319;5762:465;;5922:67;5986:2;5981:3;5922:67;;;6022:66;6002:87;;6123:66;6118:2;6109:12;;6102:88;6218:2;6209:12;;5908:319;-1:-1;;5908:319;6236:364;;6396:67;6460:2;6455:3;6396:67;;;6496:66;6476:87;;6591:2;6582:12;;6382:218;-1:-1;;6382:218;6609:465;;6769:67;6833:2;6828:3;6769:67;;;6869:66;6849:87;;6970:66;6965:2;6956:12;;6949:88;7065:2;7056:12;;6755:319;-1:-1;;6755:319;7083:364;;7243:67;7307:2;7302:3;7243:67;;;7343:66;7323:87;;7438:2;7429:12;;7229:218;-1:-1;;7229:218;7456:364;;7616:67;7680:2;7675:3;7616:67;;;7716:66;7696:87;;7811:2;7802:12;;7602:218;-1:-1;;7602:218;7829:465;;7989:67;8053:2;8048:3;7989:67;;;8089:66;8069:87;;8190:66;8185:2;8176:12;;8169:88;8285:2;8276:12;;7975:319;-1:-1;;7975:319;8303:465;;8463:67;8527:2;8522:3;8463:67;;;8563:66;8543:87;;8664:66;8659:2;8650:12;;8643:88;8759:2;8750:12;;8449:319;-1:-1;;8449:319;8777:465;;8937:67;9001:2;8996:3;8937:67;;;9037:66;9017:87;;9138:66;9133:2;9124:12;;9117:88;9233:2;9224:12;;8923:319;-1:-1;;8923:319;9251:465;;9411:67;9475:2;9470:3;9411:67;;;9511:66;9491:87;;9612:66;9607:2;9598:12;;9591:88;9707:2;9698:12;;9397:319;-1:-1;;9397:319;9725:364;;9885:67;9949:2;9944:3;9885:67;;;9985:66;9965:87;;10080:2;10071:12;;9871:218;-1:-1;;9871:218;10098:465;;10258:67;10322:2;10317:3;10258:67;;;10358:66;10338:87;;10459:66;10454:2;10445:12;;10438:88;10554:2;10545:12;;10244:319;-1:-1;;10244:319;10572:465;;10732:67;10796:2;10791:3;10732:67;;;10832:66;10812:87;;10933:66;10928:2;10919:12;;10912:88;11028:2;11019:12;;10718:319;-1:-1;;10718:319;11046:465;;11206:67;11270:2;11265:3;11206:67;;;11306:66;11286:87;;11407:66;11402:2;11393:12;;11386:88;11502:2;11493:12;;11192:319;-1:-1;;11192:319;11520:465;;11680:67;11744:2;11739:3;11680:67;;;11780:66;11760:87;;11881:66;11876:2;11867:12;;11860:88;11976:2;11967:12;;11666:319;-1:-1;;11666:319;11994:465;;12154:67;12218:2;12213:3;12154:67;;;12254:66;12234:87;;12355:66;12350:2;12341:12;;12334:88;12450:2;12441:12;;12140:319;-1:-1;;12140:319;12468:465;;12628:67;12692:2;12687:3;12628:67;;;12728:66;12708:87;;12829:66;12824:2;12815:12;;12808:88;12924:2;12915:12;;12614:319;-1:-1;;12614:319;12942:364;;13102:67;13166:2;13161:3;13102:67;;;13202:66;13182:87;;13297:2;13288:12;;13088:218;-1:-1;;13088:218;13314:120;13397:31;13422:5;13397:31;;13441:114;13520:29;13543:5;13520:29;;13562:213;13680:2;13665:18;;13694:71;13669:9;13738:6;13694:71;;13782:451;13964:2;13949:18;;13978:79;13953:9;14030:6;13978:79;;;14068:72;14136:2;14125:9;14121:18;14112:6;14068:72;;;14151;14219:2;14208:9;14204:18;14195:6;14151:72;;14240:340;14394:2;14379:18;;14408:79;14383:9;14460:6;14408:79;;;14498:72;14566:2;14555:9;14551:18;14542:6;14498:72;;14587:324;14733:2;14718:18;;14747:71;14722:9;14791:6;14747:71;;;14829:72;14897:2;14886:9;14882:18;14873:6;14829:72;;14918:324;15064:2;15049:18;;15078:71;15053:9;15122:6;15078:71;;15249:201;15361:2;15346:18;;15375:65;15350:9;15413:6;15375:65;;15457:257;15597:2;15582:18;;15611:93;15586:9;15677:6;15611:93;;15967:301;16105:2;16119:47;;;16090:18;;16180:78;16090:18;16244:6;16180:78;;16275:407;16466:2;16480:47;;;16451:18;;16541:131;16451:18;16541:131;;16689:407;16880:2;16894:47;;;16865:18;;16955:131;16865:18;16955:131;;17103:407;17294:2;17308:47;;;17279:18;;17369:131;17279:18;17369:131;;17517:407;17708:2;17722:47;;;17693:18;;17783:131;17693:18;17783:131;;17931:407;18122:2;18136:47;;;18107:18;;18197:131;18107:18;18197:131;;18345:407;18536:2;18550:47;;;18521:18;;18611:131;18521:18;18611:131;;18759:407;18950:2;18964:47;;;18935:18;;19025:131;18935:18;19025:131;;19173:407;19364:2;19378:47;;;19349:18;;19439:131;19349:18;19439:131;;19587:407;19778:2;19792:47;;;19763:18;;19853:131;19763:18;19853:131;;20001:407;20192:2;20206:47;;;20177:18;;20267:131;20177:18;20267:131;;20415:407;20606:2;20620:47;;;20591:18;;20681:131;20591:18;20681:131;;20829:407;21020:2;21034:47;;;21005:18;;21095:131;21005:18;21095:131;;21243:407;21434:2;21448:47;;;21419:18;;21509:131;21419:18;21509:131;;21657:407;21848:2;21862:47;;;21833:18;;21923:131;21833:18;21923:131;;22071:407;22262:2;22276:47;;;22247:18;;22337:131;22247:18;22337:131;;22485:407;22676:2;22690:47;;;22661:18;;22751:131;22661:18;22751:131;;22899:407;23090:2;23104:47;;;23075:18;;23165:131;23075:18;23165:131;;23313:407;23504:2;23518:47;;;23489:18;;23579:131;23489:18;23579:131;;23727:407;23918:2;23932:47;;;23903:18;;23993:131;23903:18;23993:131;;24141:407;24332:2;24346:47;;;24317:18;;24407:131;24317:18;24407:131;;24555:407;24746:2;24760:47;;;24731:18;;24821:131;24731:18;24821:131;;24969:213;25087:2;25072:18;;25101:71;25076:9;25145:6;25101:71;;25189:205;25303:2;25288:18;;25317:67;25292:9;25357:6;25317:67;;25401:92;25476:12;;25460:33;25501:163;25604:19;;;25653:4;25644:14;;25597:67;25672:105;;25741:31;25766:5;25741:31;;25784:92;25857:13;25850:21;;25833:43;25883:128;-1:-1;;;;;25952:54;;25935:76;26018:79;26087:5;26070:27;26104:88;26182:4;26171:16;;26154:38;26631:129;;26718:37;26749:5;26767:165;;26868:59;26921:5;26868:59;;27623:268;27688:1;27695:101;27709:6;27706:1;27703:13;27695:101;;;27776:11;;;27770:18;27757:11;;;27750:39;27731:2;27724:10;27695:101;;;27811:6;27808:1;27805:13;27802:2;;;27876:1;27867:6;27862:3;27858:16;27851:27;27802:2;27672:219;;;;;27899:97;27987:2;27967:14;-1:-1;;27963:28;;27947:49

Swarm Source

bzzr://ca42dd174f093c809029b50ef07586a3247aa1fd8ce92e353df55a70ad2e6209

Block Uncle Number Difficulty Gas Used Reward
View All Uncles
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]

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.