ETH Price: $3,612.54 (+4.63%)
 

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Push Management135901202021-11-10 18:35:141150 days ago1636569314IN
0x200a4330...1052a67C6
0 ETH0.00861157180.61188258
Toggle135861582021-11-10 3:35:521150 days ago1636515352IN
0x200a4330...1052a67C6
0 ETH0.0103977110.25964694
Queue135861472021-11-10 3:34:091150 days ago1636515249IN
0x200a4330...1052a67C6
0 ETH0.00592809123.00744849
Toggle135861392021-11-10 3:32:531150 days ago1636515173IN
0x200a4330...1052a67C6
0 ETH0.01432096152.760194
Queue135861332021-11-10 3:31:271150 days ago1636515087IN
0x200a4330...1052a67C6
0 ETH0.00627702130.84501472
Toggle135861212021-11-10 3:29:171150 days ago1636514957IN
0x200a4330...1052a67C6
0 ETH0.01575775167.32236575
Queue135861112021-11-10 3:27:191150 days ago1636514839IN
0x200a4330...1052a67C6
0 ETH0.0092114190.31442962

View more zero value Internal Transactions in Advanced View mode

Advanced mode:
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
ManifestTreasury

Compiler Version
v0.7.5+commit.eb77ed08

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-11-10
*/

// SPDX-License-Identifier: AGPL-3.0-or-later
pragma solidity 0.7.5;

library SafeMath {

    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");

        return c;
    }

    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }

    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;

        return c;
    }

    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        if (a == 0) {
            return 0;
        }

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

        return c;
    }

    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }

    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        return c;
    }
}

library Address {

  function isContract(address account) internal view returns (bool) {
        // This method relies in extcodesize, which returns 0 for contracts in
        // construction, since the code is only stored at the end of the
        // constructor execution.

        uint256 size;
        // solhint-disable-next-line no-inline-assembly
        assembly { size := extcodesize(account) }
        return size > 0;
    }

    function functionCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        return _functionCallWithValue(target, data, 0, errorMessage);
    }

    function _functionCallWithValue(address target, bytes memory data, uint256 weiValue, string memory errorMessage) private returns (bytes memory) {
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: weiValue }(data);
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private pure returns(bytes memory) {
        if (success) {
            return returndata;
        } else {
            if (returndata.length > 0) {
                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }
}

interface IOwnable {
  function manager() external view returns (address);

  function renounceManagement() external;
  
  function pushManagement( address newOwner_ ) external;
  
  function pullManagement() external;
}

contract Ownable is IOwnable {

    address internal _owner;
    address internal _newOwner;

    event OwnershipPushed(address indexed previousOwner, address indexed newOwner);
    event OwnershipPulled(address indexed previousOwner, address indexed newOwner);

    constructor () {
        _owner = msg.sender;
        emit OwnershipPushed( address(0), _owner );
    }

    function manager() public view override returns (address) {
        return _owner;
    }

    modifier onlyManager() {
        require( _owner == msg.sender, "Ownable: caller is not the owner" );
        _;
    }

    function renounceManagement() public virtual override onlyManager() {
        emit OwnershipPushed( _owner, address(0) );
        _owner = address(0);
    }

    function pushManagement( address newOwner_ ) public virtual override onlyManager() {
        require( newOwner_ != address(0), "Ownable: new owner is the zero address");
        emit OwnershipPushed( _owner, newOwner_ );
        _newOwner = newOwner_;
    }
    
    function pullManagement() public virtual override {
        require( msg.sender == _newOwner, "Ownable: must be new owner to pull");
        emit OwnershipPulled( _owner, _newOwner );
        _owner = _newOwner;
    }
}

interface IERC20 {
    function decimals() external view returns (uint8);

    function balanceOf(address account) external view returns (uint256);

    function transfer(address recipient, uint256 amount) external returns (bool);

    function approve(address spender, uint256 amount) external returns (bool);

    function totalSupply() external view returns (uint256);

    function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);

    event Transfer(address indexed from, address indexed to, uint256 value);

    event Approval(address indexed owner, address indexed spender, uint256 value);
}

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

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

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

    function _callOptionalReturn(IERC20 token, bytes memory data) private {
        bytes memory returndata = address(token).functionCall(data, "SafeERC20: low-level call failed");
        if (returndata.length > 0) { // Return data is optional
            // solhint-disable-next-line max-line-length
            require(abi.decode(returndata, (bool)), "SafeERC20: ERC20 operation did not succeed");
        }
    }
}

interface IERC20Mintable {
  function mint( uint256 amount_ ) external;

  function mint( address account_, uint256 ammount_ ) external;
}

interface IMNFSTERC20 {
    function burnFrom(address account_, uint256 amount_) external;
}

interface IBondCalculator {
  function valuation( address pair_, uint amount_ ) external view returns ( uint _value );
}

contract ManifestTreasury is Ownable {

    using SafeMath for uint;
    using SafeERC20 for IERC20;

    event Deposit( address indexed token, uint amount, uint value );
    event Withdrawal( address indexed token, uint amount, uint value );
    event CreateDebt( address indexed debtor, address indexed token, uint amount, uint value );
    event RepayDebt( address indexed debtor, address indexed token, uint amount, uint value );
    event ReservesManaged( address indexed token, uint amount );
    event ReservesUpdated( uint indexed totalReserves );
    event ReservesAudited( uint indexed totalReserves );
    event RewardsMinted( address indexed caller, address indexed recipient, uint amount );
    event ChangeQueued( MANAGING indexed managing, address queued );
    event ChangeActivated( MANAGING indexed managing, address activated, bool result );

    enum MANAGING { RESERVEDEPOSITOR, RESERVESPENDER, RESERVETOKEN, RESERVEMANAGER, LIQUIDITYDEPOSITOR, LIQUIDITYTOKEN, LIQUIDITYMANAGER, DEBTOR, REWARDMANAGER, SMNFST }

    address public immutable MNFST;
    uint public immutable blocksNeededForQueue;

    address[] public reserveTokens; // Push only, beware false-positives.
    mapping( address => bool ) public isReserveToken;
    mapping( address => uint ) public reserveTokenQueue; // Delays changes to mapping.

    address[] public reserveDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveDepositor;
    mapping( address => uint ) public reserveDepositorQueue; // Delays changes to mapping.

    address[] public reserveSpenders; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveSpender;
    mapping( address => uint ) public reserveSpenderQueue; // Delays changes to mapping.

    address[] public liquidityTokens; // Push only, beware false-positives.
    mapping( address => bool ) public isLiquidityToken;
    mapping( address => uint ) public LiquidityTokenQueue; // Delays changes to mapping.

    address[] public liquidityDepositors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityDepositor;
    mapping( address => uint ) public LiquidityDepositorQueue; // Delays changes to mapping.

    mapping( address => address ) public bondCalculator; // bond calculator for liquidity token

    address[] public reserveManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isReserveManager;
    mapping( address => uint ) public ReserveManagerQueue; // Delays changes to mapping.

    address[] public liquidityManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isLiquidityManager;
    mapping( address => uint ) public LiquidityManagerQueue; // Delays changes to mapping.

    address[] public debtors; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isDebtor;
    mapping( address => uint ) public debtorQueue; // Delays changes to mapping.
    mapping( address => uint ) public debtorBalance;

    address[] public rewardManagers; // Push only, beware false-positives. Only for viewing.
    mapping( address => bool ) public isRewardManager;
    mapping( address => uint ) public rewardManagerQueue; // Delays changes to mapping.

    address public sMNFST;
    uint public sMNFSTQueue; // Delays change to sMNFST address
    
    uint public totalReserves; // Risk-free value of all assets
    uint public totalDebt;

    constructor(
    address _MNFST,
    address _OHM,
    address _sOHM,
    uint256 _blocksNeededForQueue
    ) {
        require(_MNFST != address(0));
        MNFST = _MNFST;

        isReserveToken[_OHM] = true;
        reserveTokens.push(_OHM);

        isReserveToken[_sOHM] = true;
        reserveTokens.push(_sOHM);

        // isLiquidityToken[ _MNFSTDAI ] = true;
        // liquidityTokens.push( _MNFSTDAI );

        blocksNeededForQueue = _blocksNeededForQueue;
    }

    /**
        @notice allow approved address to deposit an asset for MNFST
        @param _amount uint
        @param _token address
        @param _profit uint
        @return send_ uint
     */
    function deposit( uint _amount, address _token, uint _profit ) external returns ( uint send_ ) {
        require( isReserveToken[ _token ] || isLiquidityToken[ _token ], "Not accepted" );
        IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );

        if ( isReserveToken[ _token ] ) {
            require( isReserveDepositor[ msg.sender ], "Not approved" );
        } else {
            require( isLiquidityDepositor[ msg.sender ], "Not approved" );
        }

        uint value = valueOf(_token, _amount);
        // mint MNFST needed and store amount of rewards for distribution
        send_ = value.sub( _profit );
        IERC20Mintable( MNFST ).mint( msg.sender, send_ );

        totalReserves = totalReserves.add( value );
        emit ReservesUpdated( totalReserves );

        emit Deposit( _token, _amount, value );
    }

    /**
        @notice allow approved address to burn MNFST for reserves
        @param _amount uint
        @param _token address
     */
    function withdraw( uint _amount, address _token ) external {
        require( isReserveToken[ _token ], "Not accepted" ); // Only reserves can be used for redemptions
        require( isReserveSpender[ msg.sender ] == true, "Not approved" );

        uint value = valueOf( _token, _amount );
        IMNFSTERC20( MNFST ).burnFrom( msg.sender, value );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).safeTransfer( msg.sender, _amount );

        emit Withdrawal( _token, _amount, value );
    }

    /**
        @notice allow approved address to borrow reserves
        @param _amount uint
        @param _token address
     */
    function incurDebt( uint _amount, address _token ) external {
        require( isDebtor[ msg.sender ], "Not approved" );
        require( isReserveToken[ _token ], "Not accepted" );

        uint value = valueOf( _token, _amount );

        uint maximumDebt = IERC20( sMNFST ).balanceOf( msg.sender ); // Can only borrow against sMNFST held
        uint availableDebt = maximumDebt.sub( debtorBalance[ msg.sender ] );
        require( value <= availableDebt, "Exceeds debt limit" );

        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].add( value );
        totalDebt = totalDebt.add( value );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).transfer( msg.sender, _amount );
        
        emit CreateDebt( msg.sender, _token, _amount, value );
    }

    /**
        @notice allow approved address to repay borrowed reserves with reserves
        @param _amount uint
        @param _token address
     */
    function repayDebtWithReserve( uint _amount, address _token ) external {
        require( isDebtor[ msg.sender ], "Not approved" );
        require( isReserveToken[ _token ], "Not accepted" );

        IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );

        uint value = valueOf( _token, _amount );
        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( value );
        totalDebt = totalDebt.sub( value );

        totalReserves = totalReserves.add( value );
        emit ReservesUpdated( totalReserves );

        emit RepayDebt( msg.sender, _token, _amount, value );
    }

    /**
        @notice allow approved address to repay borrowed reserves with MNFST
        @param _amount uint
     */
    function repayDebtWithMNFST( uint _amount ) external {
        require( isDebtor[ msg.sender ], "Not approved" );

        IMNFSTERC20( MNFST ).burnFrom( msg.sender, _amount );

        debtorBalance[ msg.sender ] = debtorBalance[ msg.sender ].sub( _amount );
        totalDebt = totalDebt.sub( _amount );

        emit RepayDebt( msg.sender, MNFST, _amount, _amount );
    }

    /**
        @notice allow approved address to withdraw assets
        @param _token address
        @param _amount uint
     */
    function manage( address _token, uint _amount ) external {
        if( isLiquidityToken[ _token ] ) {
            require( isLiquidityManager[ msg.sender ], "Not approved" );
        } else {
            require( isReserveManager[ msg.sender ], "Not approved" );
        }

        uint value = valueOf(_token, _amount);
        require( value <= excessReserves(), "Insufficient reserves" );

        totalReserves = totalReserves.sub( value );
        emit ReservesUpdated( totalReserves );

        IERC20( _token ).safeTransfer( msg.sender, _amount );

        emit ReservesManaged( _token, _amount );
    }

    /**
        @notice send epoch reward to staking contract
     */
    function mintRewards( address _recipient, uint _amount ) external {
        require( isRewardManager[ msg.sender ], "Not approved" );
        require( _amount <= excessReserves(), "Insufficient reserves" );

        IERC20Mintable( MNFST ).mint( _recipient, _amount );

        emit RewardsMinted( msg.sender, _recipient, _amount );
    } 

    /**
        @notice returns excess reserves not backing tokens
        @return uint
     */
    function excessReserves() public view returns ( uint ) {
        return totalReserves.sub( IERC20( MNFST ).totalSupply().sub( totalDebt ) );
    }

    /**
        @notice takes inventory of all tracked assets
        @notice always consolidate to recognized reserves before audit
     */
    function auditReserves() external onlyManager() {
        uint reserves;
        for( uint i = 0; i < reserveTokens.length; i++ ) {
            reserves = reserves.add ( 
                valueOf( reserveTokens[ i ], IERC20( reserveTokens[ i ] ).balanceOf( address(this) ) )
            );
        }
        for( uint i = 0; i < liquidityTokens.length; i++ ) {
            reserves = reserves.add (
                valueOf( liquidityTokens[ i ], IERC20( liquidityTokens[ i ] ).balanceOf( address(this) ) )
            );
        }
        totalReserves = reserves;
        emit ReservesUpdated( reserves );
        emit ReservesAudited( reserves );
    }

    /**
        @notice returns MNFST valuation of asset
        @param _token address
        @param _amount uint
        @return value_ uint
     */
    function valueOf( address _token, uint _amount ) public view returns ( uint value_ ) {
        if ( isReserveToken[ _token ] ) {
            // convert amount to match MNFST decimals
            // we want 1 MNFST = 0.001 reserve token
            value_ = 1000 * _amount.mul( 10 ** IERC20( MNFST ).decimals() ).div( 10 ** IERC20( _token ).decimals() );
        } else if ( isLiquidityToken[ _token ] ) {
            value_ = 1000 * IBondCalculator( bondCalculator[ _token ] ).valuation( _token, _amount );
        }
    }

    /**
        @notice queue address to change boolean in mapping
        @param _managing MANAGING
        @param _address address
        @return bool
     */
    function queue( MANAGING _managing, address _address ) external onlyManager() returns ( bool ) {
        require( _address != address(0) );
        if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
            reserveDepositorQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            reserveSpenderQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            reserveTokenQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            ReserveManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) );
        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            LiquidityDepositorQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            LiquidityTokenQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            LiquidityManagerQueue[ _address ] = block.number.add( blocksNeededForQueue.mul( 2 ) );
        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            debtorQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            rewardManagerQueue[ _address ] = block.number.add( blocksNeededForQueue );
        } else if ( _managing == MANAGING.SMNFST ) { // 9
            sMNFSTQueue = block.number.add( blocksNeededForQueue );
        } else return false;

        emit ChangeQueued( _managing, _address );
        return true;
    }

    /**
        @notice verify queue then set boolean in mapping
        @param _managing MANAGING
        @param _address address
        @param _calculator address
        @return bool
     */
    function toggle( MANAGING _managing, address _address, address _calculator ) external onlyManager() returns ( bool ) {
        require( _address != address(0) );
        bool result;
        if ( _managing == MANAGING.RESERVEDEPOSITOR ) { // 0
            if ( requirements( reserveDepositorQueue, isReserveDepositor, _address ) ) {
                reserveDepositorQueue[ _address ] = 0;
                if( !listContains( reserveDepositors, _address ) ) {
                    reserveDepositors.push( _address );
                }
            }
            result = !isReserveDepositor[ _address ];
            isReserveDepositor[ _address ] = result;
            
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            if ( requirements( reserveSpenderQueue, isReserveSpender, _address ) ) {
                reserveSpenderQueue[ _address ] = 0;
                if( !listContains( reserveSpenders, _address ) ) {
                    reserveSpenders.push( _address );
                }
            }
            result = !isReserveSpender[ _address ];
            isReserveSpender[ _address ] = result;

        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            if ( requirements( reserveTokenQueue, isReserveToken, _address ) ) {
                reserveTokenQueue[ _address ] = 0;
                if( !listContains( reserveTokens, _address ) ) {
                    reserveTokens.push( _address );
                }
            }
            result = !isReserveToken[ _address ];
            isReserveToken[ _address ] = result;

        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            if ( requirements( ReserveManagerQueue, isReserveManager, _address ) ) {
                reserveManagers.push( _address );
                ReserveManagerQueue[ _address ] = 0;
                if( !listContains( reserveManagers, _address ) ) {
                    reserveManagers.push( _address );
                }
            }
            result = !isReserveManager[ _address ];
            isReserveManager[ _address ] = result;

        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            if ( requirements( LiquidityDepositorQueue, isLiquidityDepositor, _address ) ) {
                liquidityDepositors.push( _address );
                LiquidityDepositorQueue[ _address ] = 0;
                if( !listContains( liquidityDepositors, _address ) ) {
                    liquidityDepositors.push( _address );
                }
            }
            result = !isLiquidityDepositor[ _address ];
            isLiquidityDepositor[ _address ] = result;

        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            if ( requirements( LiquidityTokenQueue, isLiquidityToken, _address ) ) {
                LiquidityTokenQueue[ _address ] = 0;
                if( !listContains( liquidityTokens, _address ) ) {
                    liquidityTokens.push( _address );
                }
            }
            result = !isLiquidityToken[ _address ];
            isLiquidityToken[ _address ] = result;
            bondCalculator[ _address ] = _calculator;

        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            if ( requirements( LiquidityManagerQueue, isLiquidityManager, _address ) ) {
                LiquidityManagerQueue[ _address ] = 0;
                if( !listContains( liquidityManagers, _address ) ) {
                    liquidityManagers.push( _address );
                }
            }
            result = !isLiquidityManager[ _address ];
            isLiquidityManager[ _address ] = result;

        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            if ( requirements( debtorQueue, isDebtor, _address ) ) {
                debtorQueue[ _address ] = 0;
                if( !listContains( debtors, _address ) ) {
                    debtors.push( _address );
                }
            }
            result = !isDebtor[ _address ];
            isDebtor[ _address ] = result;

        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            if ( requirements( rewardManagerQueue, isRewardManager, _address ) ) {
                rewardManagerQueue[ _address ] = 0;
                if( !listContains( rewardManagers, _address ) ) {
                    rewardManagers.push( _address );
                }
            }
            result = !isRewardManager[ _address ];
            isRewardManager[ _address ] = result;

        } else if ( _managing == MANAGING.SMNFST ) { // 9
            sMNFSTQueue = 0;
            sMNFST = _address;
            result = true;

        } else return false;

        emit ChangeActivated( _managing, _address, result );
        return true;
    }

    /**
        @notice checks requirements and returns altered structs
        @param queue_ mapping( address => uint )
        @param status_ mapping( address => bool )
        @param _address address
        @return bool 
     */
    function requirements( 
        mapping( address => uint ) storage queue_, 
        mapping( address => bool ) storage status_, 
        address _address 
    ) internal view returns ( bool ) {
        if ( !status_[ _address ] ) {
            require( queue_[ _address ] != 0, "Must queue" );
            require( queue_[ _address ] <= block.number, "Queue not expired" );
            return true;
        } return false;
    }

    /**
        @notice checks array to ensure against duplicate
        @param _list address[]
        @param _token address
        @return bool
     */
    function listContains( address[] storage _list, address _token ) internal view returns ( bool ) {
        for( uint i = 0; i < _list.length; i++ ) {
            if( _list[ i ] == _token ) {
                return true;
            }
        }
        return false;
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[{"internalType":"address","name":"_MNFST","type":"address"},{"internalType":"address","name":"_OHM","type":"address"},{"internalType":"address","name":"_sOHM","type":"address"},{"internalType":"uint256","name":"_blocksNeededForQueue","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ManifestTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"activated","type":"address"},{"indexed":false,"internalType":"bool","name":"result","type":"bool"}],"name":"ChangeActivated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum ManifestTreasury.MANAGING","name":"managing","type":"uint8"},{"indexed":false,"internalType":"address","name":"queued","type":"address"}],"name":"ChangeQueued","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"CreateDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPulled","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipPushed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"debtor","type":"address"},{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"RepayDebt","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesAudited","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ReservesManaged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"totalReserves","type":"uint256"}],"name":"ReservesUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"caller","type":"address"},{"indexed":true,"internalType":"address","name":"recipient","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"RewardsMinted","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Withdrawal","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityDepositorQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"LiquidityTokenQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MNFST","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"ReserveManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"auditReserves","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"blocksNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"bondCalculator","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"debtorQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"debtors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_profit","type":"uint256"}],"name":"deposit","outputs":[{"internalType":"uint256","name":"send_","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"excessReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"incurDebt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isDebtor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isLiquidityToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveDepositor","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveSpender","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isReserveToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"isRewardManager","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"liquidityTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"manage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"manager","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_recipient","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintRewards","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pullManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner_","type":"address"}],"name":"pushManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"enum ManifestTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"}],"name":"queue","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceManagement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"repayDebtWithMNFST","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"repayDebtWithReserve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveDepositorQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveDepositors","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveSpenderQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveSpenders","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"reserveTokenQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"reserveTokens","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewardManagerQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"rewardManagers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sMNFST","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sMNFSTQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum ManifestTreasury.MANAGING","name":"_managing","type":"uint8"},{"internalType":"address","name":"_address","type":"address"},{"internalType":"address","name":"_calculator","type":"address"}],"name":"toggle","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalDebt","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReserves","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_token","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"valueOf","outputs":[{"internalType":"uint256","name":"value_","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"address","name":"_token","type":"address"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]

60c060405234801561001057600080fd5b5060405162003636380380620036368339818101604052608081101561003557600080fd5b5080516020820151604080840151606090940151600080546001600160a01b031916331780825592519495939491926001600160a01b0316917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0384166100a657600080fd5b606084901b6001600160601b0319166080526001600160a01b039283166000818152600360205260408082208054600160ff1991821681179092556002805480840182557f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace90810180546001600160a01b03199081169098179055978916808652938520805490921683179091558054918201815583529094018054909216909317905560a0819052919092169161346f90620001c7903980611dd35280612008528061206452806120c0528061211e528061218352806121df528061223d528061229b52806122f75280612353525080610a355280610dd7528061121e52806117b6528061196e5280611b1c5280611c985280611d4c525061346f6000f3fe608060405234801561001057600080fd5b50600436106102f05760003560e01c80638f6a7b571161019d578063d031370b116100e9578063ee4e19a1116100a2578063fc7b9c181161007c578063fc7b9c181461091e578063fd1ec01014610926578063fddadad414610943578063fff9ee871461094b576102f0565b8063ee4e19a11461089b578063fb939588146108c1578063fbfd393b146108e7576102f0565b8063d031370b146107cf578063d07f390f146107ec578063d796ffb8146107f4578063df89b34414610820578063e83afee314610846578063ebd83cd814610875576102f0565b8063b1bd38b011610156578063bc157ac111610130578063bc157ac114610734578063bf86d2c514610766578063c24ad43e14610783578063cd85641a146107a9576102f0565b8063b1bd38b0146106e9578063b5764e471461070f578063b5b1d56014610717576102f0565b80638f6a7b571461062c5780638f840ddd14610649578063932cc8c314610651578063a1210a2d14610677578063a569e5711461069d578063ab319c9a146106c3576102f0565b806346f68ee91161025c5780636b5e40a711610215578063869871bf116101ef578063869871bf146105bb57806387d67dff146105d85780638820b7c3146105fe5780638f59c72714610606576102f0565b80636b5e40a71461055b57806370a0502a14610578578063788c6c0114610595576102f0565b806346f68ee9146104ad578063481c6a75146104d35780634e83423c146104db5780635a96ac0a1461050157806368c31dd5146105095780636a20de921461052f576102f0565b8063124154ca116102ae578063124154ca146103d057806312422d231461040a5780631af4da70146104365780631eec5a9a1461045c5780632b7ce50014610488578063437f791214610490576102f0565b8062f714ce146102f55780630619aff114610323578063089208d81461035c578063094a8651146103645780630b0eee301461039c5780630c3513a8146103c8575b600080fd5b6103216004803603604081101561030b57600080fd5b50803590602001356001600160a01b0316610971565b005b6103406004803603602081101561033957600080fd5b5035610b48565b604080516001600160a01b039092168252519081900360200190f35b610321610b72565b61038a6004803603602081101561037a57600080fd5b50356001600160a01b0316610c09565b60408051918252519081900360200190f35b610321600480360360408110156103b257600080fd5b506001600160a01b038135169060200135610c1b565b61038a610dca565b6103f6600480360360208110156103e657600080fd5b50356001600160a01b0316610e6e565b604080519115158252519081900360200190f35b6103216004803603604081101561042057600080fd5b50803590602001356001600160a01b0316610e83565b6103406004803603602081101561044c57600080fd5b50356001600160a01b0316611153565b61038a6004803603604081101561047257600080fd5b506001600160a01b03813516906020013561116e565b61032161136a565b610340600480360360208110156104a657600080fd5b503561152d565b610321600480360360208110156104c357600080fd5b50356001600160a01b031661153d565b61034061162a565b6103f6600480360360208110156104f157600080fd5b50356001600160a01b0316611639565b61032161164e565b6103f66004803603602081101561051f57600080fd5b50356001600160a01b03166116f8565b6103216004803603604081101561054557600080fd5b506001600160a01b03813516906020013561170d565b6103406004803603602081101561057157600080fd5b5035611887565b6103406004803603602081101561058e57600080fd5b5035611897565b61038a600480360360208110156105ab57600080fd5b50356001600160a01b03166118a7565b610340600480360360208110156105d157600080fd5b50356118b9565b6103f6600480360360208110156105ee57600080fd5b50356001600160a01b03166118c9565b61038a6118de565b61038a6004803603602081101561061c57600080fd5b50356001600160a01b03166118e4565b6103406004803603602081101561064257600080fd5b50356118f6565b61038a611906565b61038a6004803603602081101561066757600080fd5b50356001600160a01b031661190c565b6103f66004803603602081101561068d57600080fd5b50356001600160a01b031661191e565b6103f6600480360360208110156106b357600080fd5b50356001600160a01b0316611933565b61038a600480360360208110156106d957600080fd5b50356001600160a01b0316611948565b61038a600480360360208110156106ff57600080fd5b50356001600160a01b031661195a565b61034061196c565b6103406004803603602081101561072d57600080fd5b5035611990565b61038a6004803603606081101561074a57600080fd5b508035906001600160a01b0360208201351690604001356119a0565b6103216004803603602081101561077c57600080fd5b5035611c1e565b61038a6004803603602081101561079957600080fd5b50356001600160a01b0316611d9d565b61038a600480360360208110156107bf57600080fd5b50356001600160a01b0316611daf565b610340600480360360208110156107e557600080fd5b5035611dc1565b61038a611dd1565b6103216004803603604081101561080a57600080fd5b50803590602001356001600160a01b0316611df5565b6103f66004803603602081101561083657600080fd5b50356001600160a01b0316611f78565b6103f66004803603604081101561085c57600080fd5b50803560ff1690602001356001600160a01b0316611f8d565b6103f66004803603602081101561088b57600080fd5b50356001600160a01b03166123d8565b6103f6600480360360208110156108b157600080fd5b50356001600160a01b03166123ed565b61038a600480360360208110156108d757600080fd5b50356001600160a01b0316612402565b6103f6600480360360608110156108fd57600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612414565b61038a612cd0565b6103406004803603602081101561093c57600080fd5b5035612cd6565b610340612ce6565b61038a6004803603602081101561096157600080fd5b50356001600160a01b0316612cf5565b6001600160a01b03811660009081526003602052604090205460ff166109cd576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a25576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a31828461116e565b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b5050602154610ad09250905082612d07565b60218190556040516000805160206133f083398151915290600090a2610b006001600160a01b0383163385612d49565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b5857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610bbf576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610c94573360009081526016602052604090205460ff16610c8f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610ce7565b3360009081526013602052604090205460ff16610ce7576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610cf3838361116e565b9050610cfd610dca565b811115610d49576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d569082612d07565b60218190556040516000805160206133f083398151915290600090a2610d866001600160a01b0384163384612d49565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e69610e606022547f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2e57600080fd5b505afa158015610e42573d6000803e3d6000fd5b505050506040513d6020811015610e5857600080fd5b505190612d07565b60215490612d07565b905090565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff16610ed6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16610f32576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6000610f3e828461116e565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610f8f57600080fd5b505afa158015610fa3573d6000803e3d6000fd5b505050506040513d6020811015610fb957600080fd5b5051336000908152601b602052604081205491925090610fda908390612d07565b905080831115611026576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546110409084612da0565b336000908152601b602052604090205560225461105d9084612da0565b60225560215461106d9084612d07565b60218190556040516000805160206133f083398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b1580156110d857600080fd5b505af11580156110ec573d6000803e3d6000fd5b505050506040513d602081101561110257600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff16156112af576112a4836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156111cb57600080fd5b505afa1580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161129e916001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169163313ce56791600480820192602092909190829003018186803b15801561126557600080fd5b505afa158015611279573d6000803e3d6000fd5b505050506040513d602081101561128f57600080fd5b5051859060ff16600a0a612dfa565b90612e53565b6103e8029050611364565b6001600160a01b0383166000908152600c602052604090205460ff1615611364576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b50516103e80290505b92915050565b6000546001600160a01b031633146113b7576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b6000805b60025481101561148f5761148561147e600283815481106113d857fe5b600091825260209091200154600280546001600160a01b0390921691859081106113fe57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561144d57600080fd5b505afa158015611461573d6000803e3d6000fd5b505050506040513d602081101561147757600080fd5b505161116e565b8390612da0565b91506001016113bb565b5060005b600b548110156114e0576114d661147e600b83815481106114b057fe5b600091825260209091200154600b80546001600160a01b0390921691859081106113fe57fe5b9150600101611493565b50602181905560405181906000805160206133f083398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b5857600080fd5b6000546001600160a01b0316331461158a576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b6001600160a01b0381166115cf5760405162461bcd60e51b81526004018080602001828103825260268152602001806133676026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146116975760405162461bcd60e51b815260040180806020018281038252602281526020018061338d6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff16611760576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611768610dca565b8111156117b4576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561182b57600080fd5b505af115801561183f573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b5857600080fd5b60158181548110610b5857600080fd5b60046020526000908152604090205481565b60188181548110610b5857600080fd5b60096020526000908152604090205460ff1681565b60205481565b600d6020526000908152604090205481565b600e8181548110610b5857600080fd5b60215481565b60076020526000908152604090205481565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205481565b60146020526000908152604090205481565b7f000000000000000000000000000000000000000000000000000000000000000081565b601c8181548110610b5857600080fd5b6001600160a01b03821660009081526003602052604081205460ff16806119df57506001600160a01b0383166000908152600c602052604090205460ff165b611a1f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611a346001600160a01b038416333087612e95565b6001600160a01b03831660009081526003602052604090205460ff1615611aad573360009081526006602052604090205460ff16611aa8576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611b00565b336000908152600f602052604090205460ff16611b00576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611b0c848661116e565b9050611b188184612d07565b91507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611b9157600080fd5b505af1158015611ba5573d6000803e3d6000fd5b5050602154611bb79250905082612da0565b60218190556040516000805160206133f083398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b3360009081526019602052604090205460ff16611c71576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016916379cc679091604480830192600092919082900301818387803b158015611cdf57600080fd5b505af1158015611cf3573d6000803e3d6000fd5b5050336000908152601b6020526040902054611d129250905082612d07565b336000908152601b6020526040902055602254611d2f9082612d07565b602255604080518281526020810183905281516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b600a6020526000908152604090205481565b601a6020526000908152604090205481565b60028181548110610b5857600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b3360009081526019602052604090205460ff16611e48576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611ea4576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611eb96001600160a01b038216333085612e95565b6000611ec5828461116e565b336000908152601b6020526040902054909150611ee29082612d07565b336000908152601b6020526040902055602254611eff9082612d07565b602255602154611f0f9082612da0565b60218190556040516000805160206133f083398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b600080546001600160a01b03163314611fdb576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b6001600160a01b038216611fee57600080fd5b6000836009811115611ffc57fe5b141561204a5761202c437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b038316600090815260076020526040902055612387565b600183600981111561205857fe5b14156120a657612088437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b0383166000908152600a6020526040902055612387565b60028360098111156120b457fe5b1415612102576120e4437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b038316600090815260046020526040902055612387565b600383600981111561211057fe5b14156121695761214b6121447f00000000000000000000000000000000000000000000000000000000000000006002612dfa565b4390612da0565b6001600160a01b038316600090815260146020526040902055612387565b600483600981111561217757fe5b14156121c5576121a7437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b038316600090815260106020526040902055612387565b60058360098111156121d357fe5b141561222157612203437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b0383166000908152600d6020526040902055612387565b600683600981111561222f57fe5b1415612281576122636121447f00000000000000000000000000000000000000000000000000000000000000006002612dfa565b6001600160a01b038316600090815260176020526040902055612387565b600783600981111561228f57fe5b14156122dd576122bf437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b0383166000908152601a6020526040902055612387565b60088360098111156122eb57fe5b14156123395761231b437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b0383166000908152601e6020526040902055612387565b600983600981111561234757fe5b141561237f57612377437f0000000000000000000000000000000000000000000000000000000000000000612da0565b602055612387565b506000611364565b82600981111561239357fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601e6020526000908152604090205481565b600080546001600160a01b03163314612462576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b6001600160a01b03831661247557600080fd5b60008085600981111561248457fe5b1415612540576124976007600686612ef5565b15612510576001600160a01b0384166000908152600760205260408120556124c0600585612fdf565b61251057600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612c72565b600185600981111561254e57fe5b141561260a57612561600a600986612ef5565b156125da576001600160a01b0384166000908152600a602052604081205561258a600885612fdf565b6125da57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612c72565b600285600981111561261857fe5b14156126d45761262b6004600386612ef5565b156126a4576001600160a01b038416600090815260046020526040812055612654600285612fdf565b6126a457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612c72565b60038560098111156126e257fe5b14156127db576126f56014601386612ef5565b156127ab57601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b03871690811790915560009081526014602052604081205561275b9085612fdf565b6127ab57601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612c72565b60048560098111156127e957fe5b14156128e2576127fc6010600f86612ef5565b156128b257600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260408120556128629085612fdf565b6128b257600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612c72565b60058560098111156128f057fe5b14156129ce57612903600d600c86612ef5565b1561297c576001600160a01b0384166000908152600d602052604081205561292c600b85612fdf565b61297c57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612c72565b60068560098111156129dc57fe5b1415612a98576129ef6017601686612ef5565b15612a68576001600160a01b038416600090815260176020526040812055612a18601585612fdf565b612a6857601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612c72565b6007856009811115612aa657fe5b1415612b6257612ab9601a601986612ef5565b15612b32576001600160a01b0384166000908152601a6020526040812055612ae2601885612fdf565b612b3257601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612c72565b6008856009811115612b7057fe5b1415612c2c57612b83601e601d86612ef5565b15612bfc576001600160a01b0384166000908152601e6020526040812055612bac601c85612fdf565b612bfc57601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612c72565b6009856009811115612c3a57fe5b1415612c6857506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612c72565b6000915050612cc9565b846009811115612c7e57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b5857600080fd5b601f546001600160a01b031681565b60106020526000908152604090205481565b6000612cc983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061302f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612d9b9084906130c6565b505050565b600082820183811015612cc9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612e0957506000611364565b82820282848281612e1657fe5b0414612cc95760405162461bcd60e51b81526004018080602001828103825260218152602001806133af6021913960400191505060405180910390fd5b6000612cc983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613177565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612eef9085906130c6565b50505050565b6001600160a01b03811660009081526020839052604081205460ff16612fd5576001600160a01b038216600090815260208590526040902054612f6c576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b038216600090815260208590526040902054431015612fcd576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612cc9565b5060009392505050565b6000805b8354811015612fd557826001600160a01b031684828154811061300257fe5b6000918252602090912001546001600160a01b03161415613027576001915050611364565b600101612fe3565b600081848411156130be5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561308357818101518382015260200161306b565b50505050905090810190601f1680156130b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b606061311b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131dc9092919063ffffffff16565b805190915015612d9b5780806020019051602081101561313a57600080fd5b5051612d9b5760405162461bcd60e51b815260040180806020018281038252602a815260200180613410602a913960400191505060405180910390fd5b600081836131c65760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561308357818101518382015260200161306b565b5060008385816131d257fe5b0495945050505050565b60606131eb84846000856131f3565b949350505050565b60606131fe85613360565b61324f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061328e5780518252601f19909201916020918201910161326f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146132f0576040519150601f19603f3d011682016040523d82523d6000602084013e6132f5565b606091505b509150915081156133095791506131eb9050565b8051156133195780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561308357818101518382015260200161306b565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220df82234e5d89f27847c893ea053b40348840d71788d773777c2c3c2cd57cec2e64736f6c6343000705003300000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89900000000000000000000000004f2694c8fcee23e8fd0dfea1d4f5bb8c352111f0000000000000000000000000000000000000000000000000000000000000000

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106102f05760003560e01c80638f6a7b571161019d578063d031370b116100e9578063ee4e19a1116100a2578063fc7b9c181161007c578063fc7b9c181461091e578063fd1ec01014610926578063fddadad414610943578063fff9ee871461094b576102f0565b8063ee4e19a11461089b578063fb939588146108c1578063fbfd393b146108e7576102f0565b8063d031370b146107cf578063d07f390f146107ec578063d796ffb8146107f4578063df89b34414610820578063e83afee314610846578063ebd83cd814610875576102f0565b8063b1bd38b011610156578063bc157ac111610130578063bc157ac114610734578063bf86d2c514610766578063c24ad43e14610783578063cd85641a146107a9576102f0565b8063b1bd38b0146106e9578063b5764e471461070f578063b5b1d56014610717576102f0565b80638f6a7b571461062c5780638f840ddd14610649578063932cc8c314610651578063a1210a2d14610677578063a569e5711461069d578063ab319c9a146106c3576102f0565b806346f68ee91161025c5780636b5e40a711610215578063869871bf116101ef578063869871bf146105bb57806387d67dff146105d85780638820b7c3146105fe5780638f59c72714610606576102f0565b80636b5e40a71461055b57806370a0502a14610578578063788c6c0114610595576102f0565b806346f68ee9146104ad578063481c6a75146104d35780634e83423c146104db5780635a96ac0a1461050157806368c31dd5146105095780636a20de921461052f576102f0565b8063124154ca116102ae578063124154ca146103d057806312422d231461040a5780631af4da70146104365780631eec5a9a1461045c5780632b7ce50014610488578063437f791214610490576102f0565b8062f714ce146102f55780630619aff114610323578063089208d81461035c578063094a8651146103645780630b0eee301461039c5780630c3513a8146103c8575b600080fd5b6103216004803603604081101561030b57600080fd5b50803590602001356001600160a01b0316610971565b005b6103406004803603602081101561033957600080fd5b5035610b48565b604080516001600160a01b039092168252519081900360200190f35b610321610b72565b61038a6004803603602081101561037a57600080fd5b50356001600160a01b0316610c09565b60408051918252519081900360200190f35b610321600480360360408110156103b257600080fd5b506001600160a01b038135169060200135610c1b565b61038a610dca565b6103f6600480360360208110156103e657600080fd5b50356001600160a01b0316610e6e565b604080519115158252519081900360200190f35b6103216004803603604081101561042057600080fd5b50803590602001356001600160a01b0316610e83565b6103406004803603602081101561044c57600080fd5b50356001600160a01b0316611153565b61038a6004803603604081101561047257600080fd5b506001600160a01b03813516906020013561116e565b61032161136a565b610340600480360360208110156104a657600080fd5b503561152d565b610321600480360360208110156104c357600080fd5b50356001600160a01b031661153d565b61034061162a565b6103f6600480360360208110156104f157600080fd5b50356001600160a01b0316611639565b61032161164e565b6103f66004803603602081101561051f57600080fd5b50356001600160a01b03166116f8565b6103216004803603604081101561054557600080fd5b506001600160a01b03813516906020013561170d565b6103406004803603602081101561057157600080fd5b5035611887565b6103406004803603602081101561058e57600080fd5b5035611897565b61038a600480360360208110156105ab57600080fd5b50356001600160a01b03166118a7565b610340600480360360208110156105d157600080fd5b50356118b9565b6103f6600480360360208110156105ee57600080fd5b50356001600160a01b03166118c9565b61038a6118de565b61038a6004803603602081101561061c57600080fd5b50356001600160a01b03166118e4565b6103406004803603602081101561064257600080fd5b50356118f6565b61038a611906565b61038a6004803603602081101561066757600080fd5b50356001600160a01b031661190c565b6103f66004803603602081101561068d57600080fd5b50356001600160a01b031661191e565b6103f6600480360360208110156106b357600080fd5b50356001600160a01b0316611933565b61038a600480360360208110156106d957600080fd5b50356001600160a01b0316611948565b61038a600480360360208110156106ff57600080fd5b50356001600160a01b031661195a565b61034061196c565b6103406004803603602081101561072d57600080fd5b5035611990565b61038a6004803603606081101561074a57600080fd5b508035906001600160a01b0360208201351690604001356119a0565b6103216004803603602081101561077c57600080fd5b5035611c1e565b61038a6004803603602081101561079957600080fd5b50356001600160a01b0316611d9d565b61038a600480360360208110156107bf57600080fd5b50356001600160a01b0316611daf565b610340600480360360208110156107e557600080fd5b5035611dc1565b61038a611dd1565b6103216004803603604081101561080a57600080fd5b50803590602001356001600160a01b0316611df5565b6103f66004803603602081101561083657600080fd5b50356001600160a01b0316611f78565b6103f66004803603604081101561085c57600080fd5b50803560ff1690602001356001600160a01b0316611f8d565b6103f66004803603602081101561088b57600080fd5b50356001600160a01b03166123d8565b6103f6600480360360208110156108b157600080fd5b50356001600160a01b03166123ed565b61038a600480360360208110156108d757600080fd5b50356001600160a01b0316612402565b6103f6600480360360608110156108fd57600080fd5b5060ff813516906001600160a01b0360208201358116916040013516612414565b61038a612cd0565b6103406004803603602081101561093c57600080fd5b5035612cd6565b610340612ce6565b61038a6004803603602081101561096157600080fd5b50356001600160a01b0316612cf5565b6001600160a01b03811660009081526003602052604090205460ff166109cd576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b3360009081526009602052604090205460ff161515600114610a25576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610a31828461116e565b90507f00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac6001600160a01b03166379cc679033836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015610aaa57600080fd5b505af1158015610abe573d6000803e3d6000fd5b5050602154610ad09250905082612d07565b60218190556040516000805160206133f083398151915290600090a2610b006001600160a01b0383163385612d49565b604080518481526020810183905281516001600160a01b038516927fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb928290030190a2505050565b60128181548110610b5857600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610bbf576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b601b6020526000908152604090205481565b6001600160a01b0382166000908152600c602052604090205460ff1615610c94573360009081526016602052604090205460ff16610c8f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b610ce7565b3360009081526013602052604090205460ff16610ce7576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000610cf3838361116e565b9050610cfd610dca565b811115610d49576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b602154610d569082612d07565b60218190556040516000805160206133f083398151915290600090a2610d866001600160a01b0384163384612d49565b6040805183815290516001600160a01b038516917f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd80919081900360200190a2505050565b6000610e69610e606022547f00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac6001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610e2e57600080fd5b505afa158015610e42573d6000803e3d6000fd5b505050506040513d6020811015610e5857600080fd5b505190612d07565b60215490612d07565b905090565b60066020526000908152604090205460ff1681565b3360009081526019602052604090205460ff16610ed6576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16610f32576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b6000610f3e828461116e565b601f54604080516370a0823160e01b815233600482015290519293506000926001600160a01b03909216916370a0823191602480820192602092909190829003018186803b158015610f8f57600080fd5b505afa158015610fa3573d6000803e3d6000fd5b505050506040513d6020811015610fb957600080fd5b5051336000908152601b602052604081205491925090610fda908390612d07565b905080831115611026576040805162461bcd60e51b8152602060048201526012602482015271115e18d959591cc81919589d081b1a5b5a5d60721b604482015290519081900360640190fd5b336000908152601b60205260409020546110409084612da0565b336000908152601b602052604090205560225461105d9084612da0565b60225560215461106d9084612d07565b60218190556040516000805160206133f083398151915290600090a26040805163a9059cbb60e01b81523360048201526024810187905290516001600160a01b0386169163a9059cbb9160448083019260209291908290030181600087803b1580156110d857600080fd5b505af11580156110ec573d6000803e3d6000fd5b505050506040513d602081101561110257600080fd5b5050604080518681526020810185905281516001600160a01b0387169233927f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6929081900390910190a35050505050565b6011602052600090815260409020546001600160a01b031681565b6001600160a01b03821660009081526003602052604081205460ff16156112af576112a4836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156111cb57600080fd5b505afa1580156111df573d6000803e3d6000fd5b505050506040513d60208110156111f557600080fd5b50516040805163313ce56760e01b8152905160ff909216600a0a9161129e916001600160a01b037f00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac169163313ce56791600480820192602092909190829003018186803b15801561126557600080fd5b505afa158015611279573d6000803e3d6000fd5b505050506040513d602081101561128f57600080fd5b5051859060ff16600a0a612dfa565b90612e53565b6103e8029050611364565b6001600160a01b0383166000908152600c602052604090205460ff1615611364576001600160a01b03808416600081815260116020908152604091829020548251634249719f60e01b815260048101949094526024840187905291519190931692634249719f9260448082019391829003018186803b15801561133157600080fd5b505afa158015611345573d6000803e3d6000fd5b505050506040513d602081101561135b57600080fd5b50516103e80290505b92915050565b6000546001600160a01b031633146113b7576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b6000805b60025481101561148f5761148561147e600283815481106113d857fe5b600091825260209091200154600280546001600160a01b0390921691859081106113fe57fe5b60009182526020918290200154604080516370a0823160e01b815230600482015290516001600160a01b03909216926370a0823192602480840193829003018186803b15801561144d57600080fd5b505afa158015611461573d6000803e3d6000fd5b505050506040513d602081101561147757600080fd5b505161116e565b8390612da0565b91506001016113bb565b5060005b600b548110156114e0576114d661147e600b83815481106114b057fe5b600091825260209091200154600b80546001600160a01b0390921691859081106113fe57fe5b9150600101611493565b50602181905560405181906000805160206133f083398151915290600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b60088181548110610b5857600080fd5b6000546001600160a01b0316331461158a576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b6001600160a01b0381166115cf5760405162461bcd60e51b81526004018080602001828103825260268152602001806133676026913960400191505060405180910390fd5b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031690565b601d6020526000908152604090205460ff1681565b6001546001600160a01b031633146116975760405162461bcd60e51b815260040180806020018281038252602281526020018061338d6022913960400191505060405180910390fd5b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b60036020526000908152604090205460ff1681565b336000908152601d602052604090205460ff16611760576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611768610dca565b8111156117b4576040805162461bcd60e51b8152602060048201526015602482015274496e73756666696369656e7420726573657276657360581b604482015290519081900360640190fd5b7f00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac6001600160a01b03166340c10f1983836040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b15801561182b57600080fd5b505af115801561183f573d6000803e3d6000fd5b50506040805184815290516001600160a01b03861693503392507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9181900360200190a35050565b60058181548110610b5857600080fd5b60158181548110610b5857600080fd5b60046020526000908152604090205481565b60188181548110610b5857600080fd5b60096020526000908152604090205460ff1681565b60205481565b600d6020526000908152604090205481565b600e8181548110610b5857600080fd5b60215481565b60076020526000908152604090205481565b600f6020526000908152604090205460ff1681565b600c6020526000908152604090205460ff1681565b60176020526000908152604090205481565b60146020526000908152604090205481565b7f00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac81565b601c8181548110610b5857600080fd5b6001600160a01b03821660009081526003602052604081205460ff16806119df57506001600160a01b0383166000908152600c602052604090205460ff165b611a1f576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611a346001600160a01b038416333087612e95565b6001600160a01b03831660009081526003602052604090205460ff1615611aad573360009081526006602052604090205460ff16611aa8576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b611b00565b336000908152600f602052604090205460ff16611b00576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6000611b0c848661116e565b9050611b188184612d07565b91507f00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac6001600160a01b03166340c10f1933846040518363ffffffff1660e01b815260040180836001600160a01b0316815260200182815260200192505050600060405180830381600087803b158015611b9157600080fd5b505af1158015611ba5573d6000803e3d6000fd5b5050602154611bb79250905082612da0565b60218190556040516000805160206133f083398151915290600090a2604080518681526020810183905281516001600160a01b038716927f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15928290030190a2509392505050565b3360009081526019602052604090205460ff16611c71576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6040805163079cc67960e41b81523360048201526024810183905290516001600160a01b037f00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac16916379cc679091604480830192600092919082900301818387803b158015611cdf57600080fd5b505af1158015611cf3573d6000803e3d6000fd5b5050336000908152601b6020526040902054611d129250905082612d07565b336000908152601b6020526040902055602254611d2f9082612d07565b602255604080518281526020810183905281516001600160a01b037f00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a350565b600a6020526000908152604090205481565b601a6020526000908152604090205481565b60028181548110610b5857600080fd5b7f000000000000000000000000000000000000000000000000000000000000000081565b3360009081526019602052604090205460ff16611e48576040805162461bcd60e51b815260206004820152600c60248201526b139bdd08185c1c1c9bdd995960a21b604482015290519081900360640190fd5b6001600160a01b03811660009081526003602052604090205460ff16611ea4576040805162461bcd60e51b815260206004820152600c60248201526b139bdd081858d8d95c1d195960a21b604482015290519081900360640190fd5b611eb96001600160a01b038216333085612e95565b6000611ec5828461116e565b336000908152601b6020526040902054909150611ee29082612d07565b336000908152601b6020526040902055602254611eff9082612d07565b602255602154611f0f9082612da0565b60218190556040516000805160206133f083398151915290600090a2604080518481526020810183905281516001600160a01b0385169233927fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309929081900390910190a3505050565b60166020526000908152604090205460ff1681565b600080546001600160a01b03163314611fdb576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b6001600160a01b038216611fee57600080fd5b6000836009811115611ffc57fe5b141561204a5761202c437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b038316600090815260076020526040902055612387565b600183600981111561205857fe5b14156120a657612088437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b0383166000908152600a6020526040902055612387565b60028360098111156120b457fe5b1415612102576120e4437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b038316600090815260046020526040902055612387565b600383600981111561211057fe5b14156121695761214b6121447f00000000000000000000000000000000000000000000000000000000000000006002612dfa565b4390612da0565b6001600160a01b038316600090815260146020526040902055612387565b600483600981111561217757fe5b14156121c5576121a7437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b038316600090815260106020526040902055612387565b60058360098111156121d357fe5b141561222157612203437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b0383166000908152600d6020526040902055612387565b600683600981111561222f57fe5b1415612281576122636121447f00000000000000000000000000000000000000000000000000000000000000006002612dfa565b6001600160a01b038316600090815260176020526040902055612387565b600783600981111561228f57fe5b14156122dd576122bf437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b0383166000908152601a6020526040902055612387565b60088360098111156122eb57fe5b14156123395761231b437f0000000000000000000000000000000000000000000000000000000000000000612da0565b6001600160a01b0383166000908152601e6020526040902055612387565b600983600981111561234757fe5b141561237f57612377437f0000000000000000000000000000000000000000000000000000000000000000612da0565b602055612387565b506000611364565b82600981111561239357fe5b604080516001600160a01b038516815290517f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9181900360200190a250600192915050565b60136020526000908152604090205460ff1681565b60196020526000908152604090205460ff1681565b601e6020526000908152604090205481565b600080546001600160a01b03163314612462576040805162461bcd60e51b815260206004820181905260248201526000805160206133d0833981519152604482015290519081900360640190fd5b6001600160a01b03831661247557600080fd5b60008085600981111561248457fe5b1415612540576124976007600686612ef5565b15612510576001600160a01b0384166000908152600760205260408120556124c0600585612fdf565b61251057600580546001810182556000919091527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db00180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600660205260409020805460ff81161560ff199091168117909155612c72565b600185600981111561254e57fe5b141561260a57612561600a600986612ef5565b156125da576001600160a01b0384166000908152600a602052604081205561258a600885612fdf565b6125da57600880546001810182556000919091527ff3f7a9fe364faab93b216da50a3214154f22a0a2b415b23a84c8169e8b636ee30180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600960205260409020805460ff81161560ff199091168117909155612c72565b600285600981111561261857fe5b14156126d45761262b6004600386612ef5565b156126a4576001600160a01b038416600090815260046020526040812055612654600285612fdf565b6126a457600280546001810182556000919091527f405787fa12a823e0f2b7631cc41b3ba8828b3321ca811111fa75cd3aa3bb5ace0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600360205260409020805460ff81161560ff199091168117909155612c72565b60038560098111156126e257fe5b14156127db576126f56014601386612ef5565b156127ab57601280546001810182557fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b03871690811790915560009081526014602052604081205561275b9085612fdf565b6127ab57601280546001810182556000919091527fbb8a6a4669ba250d26cd7a459eca9d215f8307e33aebe50379bc5a3617ec34440180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601360205260409020805460ff81161560ff199091168117909155612c72565b60048560098111156127e957fe5b14156128e2576127fc6010600f86612ef5565b156128b257600e80546001810182557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0387169081179091556000908152601060205260408120556128629085612fdf565b6128b257600e80546001810182556000919091527fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600f60205260409020805460ff81161560ff199091168117909155612c72565b60058560098111156128f057fe5b14156129ce57612903600d600c86612ef5565b1561297c576001600160a01b0384166000908152600d602052604081205561292c600b85612fdf565b61297c57600b80546001810182556000919091527f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600c60209081526040808320805460ff81161560ff199091168117909155601190925290912080546001600160a01b03191692851692909217909155612c72565b60068560098111156129dc57fe5b1415612a98576129ef6017601686612ef5565b15612a68576001600160a01b038416600090815260176020526040812055612a18601585612fdf565b612a6857601580546001810182556000919091527f55f448fdea98c4d29eb340757ef0a66cd03dbb9538908a6a81d96026b71ec4750180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601660205260409020805460ff81161560ff199091168117909155612c72565b6007856009811115612aa657fe5b1415612b6257612ab9601a601986612ef5565b15612b32576001600160a01b0384166000908152601a6020526040812055612ae2601885612fdf565b612b3257601880546001810182556000919091527fb13d2d76d1f4b7be834882e410b3e3a8afaf69f83600ae24db354391d2378d2e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601960205260409020805460ff81161560ff199091168117909155612c72565b6008856009811115612b7057fe5b1415612c2c57612b83601e601d86612ef5565b15612bfc576001600160a01b0384166000908152601e6020526040812055612bac601c85612fdf565b612bfc57601c80546001810182556000919091527f0e4562a10381dec21b205ed72637e6b1b523bdd0e4d4d50af5cd23dd4500a2110180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601d60205260409020805460ff81161560ff199091168117909155612c72565b6009856009811115612c3a57fe5b1415612c6857506000602055601f80546001600160a01b0319166001600160a01b0385161790556001612c72565b6000915050612cc9565b846009811115612c7e57fe5b604080516001600160a01b0387168152831515602082015281517f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477929181900390910190a260019150505b9392505050565b60225481565b600b8181548110610b5857600080fd5b601f546001600160a01b031681565b60106020526000908152604090205481565b6000612cc983836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f77000081525061302f565b604080516001600160a01b038416602482015260448082018490528251808303909101815260649091019091526020810180516001600160e01b031663a9059cbb60e01b179052612d9b9084906130c6565b505050565b600082820183811015612cc9576040805162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015290519081900360640190fd5b600082612e0957506000611364565b82820282848281612e1657fe5b0414612cc95760405162461bcd60e51b81526004018080602001828103825260218152602001806133af6021913960400191505060405180910390fd5b6000612cc983836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613177565b604080516001600160a01b0380861660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b179052612eef9085906130c6565b50505050565b6001600160a01b03811660009081526020839052604081205460ff16612fd5576001600160a01b038216600090815260208590526040902054612f6c576040805162461bcd60e51b815260206004820152600a6024820152694d75737420717565756560b01b604482015290519081900360640190fd5b6001600160a01b038216600090815260208590526040902054431015612fcd576040805162461bcd60e51b8152602060048201526011602482015270145d595d59481b9bdd08195e1c1a5c9959607a1b604482015290519081900360640190fd5b506001612cc9565b5060009392505050565b6000805b8354811015612fd557826001600160a01b031684828154811061300257fe5b6000918252602090912001546001600160a01b03161415613027576001915050611364565b600101612fe3565b600081848411156130be5760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b8381101561308357818101518382015260200161306b565b50505050905090810190601f1680156130b05780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b606061311b826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131dc9092919063ffffffff16565b805190915015612d9b5780806020019051602081101561313a57600080fd5b5051612d9b5760405162461bcd60e51b815260040180806020018281038252602a815260200180613410602a913960400191505060405180910390fd5b600081836131c65760405162461bcd60e51b815260206004820181815283516024840152835190928392604490910191908501908083836000831561308357818101518382015260200161306b565b5060008385816131d257fe5b0495945050505050565b60606131eb84846000856131f3565b949350505050565b60606131fe85613360565b61324f576040805162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015290519081900360640190fd5b60006060866001600160a01b031685876040518082805190602001908083835b6020831061328e5780518252601f19909201916020918201910161326f565b6001836020036101000a03801982511681845116808217855250505050505090500191505060006040518083038185875af1925050503d80600081146132f0576040519150601f19603f3d011682016040523d82523d6000602084013e6132f5565b606091505b509150915081156133095791506131eb9050565b8051156133195780518082602001fd5b60405162461bcd60e51b815260206004820181815286516024840152865187939192839260440191908501908083836000831561308357818101518382015260200161306b565b3b15159056fe4f776e61626c653a206e6577206f776e657220697320746865207a65726f20616464726573734f776e61626c653a206d757374206265206e6577206f776e657220746f2070756c6c536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f774f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e657293bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d665361666545524332303a204552433230206f7065726174696f6e20646964206e6f742073756363656564a2646970667358221220df82234e5d89f27847c893ea053b40348840d71788d773777c2c3c2cd57cec2e64736f6c63430007050033

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

00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a89900000000000000000000000004f2694c8fcee23e8fd0dfea1d4f5bb8c352111f0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _MNFST (address): 0x21585BBcD5bDC3f5737620cf0Db2E51978cf60ac
Arg [1] : _OHM (address): 0x383518188C0C6d7730D91b2c03a03C837814a899
Arg [2] : _sOHM (address): 0x04F2694C8fcee23e8Fd0dfEA1d4f5Bb8c352111F
Arg [3] : _blocksNeededForQueue (uint256): 0

-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 00000000000000000000000021585bbcd5bdc3f5737620cf0db2e51978cf60ac
Arg [1] : 000000000000000000000000383518188c0c6d7730d91b2c03a03c837814a899
Arg [2] : 00000000000000000000000004f2694c8fcee23e8fd0dfea1d4f5bb8c352111f
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed Bytecode Sourcemap

6754:19409:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12136:585;;;;;;;;;;;;;;;;-1:-1:-1;12136:585:0;;;;;;-1:-1:-1;;;;;12136:585:0;;:::i;:::-;;9192:32;;;;;;;;;;;;;;;;-1:-1:-1;9192:32:0;;:::i;:::-;;;;-1:-1:-1;;;;;9192:32:0;;;;;;;;;;;;;;4143:159;;;:::i;9904:47::-;;;;;;;;;;;;;;;;-1:-1:-1;9904:47:0;-1:-1:-1;;;;;9904:47:0;;:::i;:::-;;;;;;;;;;;;;;;;15189:626;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15189:626:0;;;;;;;;:::i;16350:148::-;;;:::i;8214:52::-;;;;;;;;;;;;;;;;-1:-1:-1;8214:52:0;-1:-1:-1;;;;;8214:52:0;;:::i;:::-;;;;;;;;;;;;;;;;;;12866:863;;;;;;;;;;;;;;;;-1:-1:-1;12866:863:0;;;;;;-1:-1:-1;;;;;12866:863:0;;:::i;9093:51::-;;;;;;;;;;;;;;;;-1:-1:-1;9093:51:0;-1:-1:-1;;;;;9093:51:0;;:::i;17484:530::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;17484:530:0;;;;;;;;:::i;16651:668::-;;;:::i;8367:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8367:32:0;;:::i;4310:261::-;;;;;;;;;;;;;;;;-1:-1:-1;4310:261:0;-1:-1:-1;;;;;4310:261:0;;:::i;3916:90::-;;;:::i;10054:49::-;;;;;;;;;;;;;;;;-1:-1:-1;10054:49:0;-1:-1:-1;;;;;10054:49:0;;:::i;4583:221::-;;;:::i;7972:48::-;;;;;;;;;;;;;;;;-1:-1:-1;7972:48:0;-1:-1:-1;;;;;7972:48:0;;:::i;15896:345::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;15896:345:0;;;;;;;;:::i;8117:34::-;;;;;;;;;;;;;;;;-1:-1:-1;8117:34:0;;:::i;9436:::-;;;;;;;;;;;;;;;;-1:-1:-1;9436:34:0;;:::i;8027:51::-;;;;;;;;;;;;;;;;-1:-1:-1;8027:51:0;-1:-1:-1;;;;;8027:51:0;;:::i;9686:24::-;;;;;;;;;;;;;;;;-1:-1:-1;9686:24:0;;:::i;8462:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8462:50:0;-1:-1:-1;;;;;8462:50:0;;:::i;10229:23::-;;;:::i;8745:53::-;;;;;;;;;;;;;;;;-1:-1:-1;8745:53:0;-1:-1:-1;;;;;8745:53:0;;:::i;8837:36::-;;;;;;;;;;;;;;;;-1:-1:-1;8837:36:0;;:::i;10300:25::-;;;:::i;8273:55::-;;;;;;;;;;;;;;;;-1:-1:-1;8273:55:0;-1:-1:-1;;;;;8273:55:0;;:::i;8936:54::-;;;;;;;;;;;;;;;;-1:-1:-1;8936:54:0;-1:-1:-1;;;;;8936:54:0;;:::i;8688:50::-;;;;;;;;;;;;;;;;-1:-1:-1;8688:50:0;-1:-1:-1;;;;;8688:50:0;;:::i;9592:55::-;;;;;;;;;;;;;;;;-1:-1:-1;9592:55:0;-1:-1:-1;;;;;9592:55:0;;:::i;9344:53::-;;;;;;;;;;;;;;;;-1:-1:-1;9344:53:0;-1:-1:-1;;;;;9344:53:0;;:::i;7809:30::-;;;:::i;9960:31::-;;;;;;;;;;;;;;;;-1:-1:-1;9960:31:0;;:::i;11104:879::-;;;;;;;;;;;;;;;;-1:-1:-1;11104:879:0;;;-1:-1:-1;;;;;11104:879:0;;;;;;;;;;:::i;14660:384::-;;;;;;;;;;;;;;;;-1:-1:-1;14660:384:0;;:::i;8519:53::-;;;;;;;;;;;;;;;;-1:-1:-1;8519:53:0;-1:-1:-1;;;;;8519:53:0;;:::i;9822:45::-;;;;;;;;;;;;;;;;-1:-1:-1;9822:45:0;-1:-1:-1;;;;;9822:45:0;;:::i;7897:30::-;;;;;;;;;;;;;;;;-1:-1:-1;7897:30:0;;:::i;7846:42::-;;;:::i;13896:631::-;;;;;;;;;;;;;;;;-1:-1:-1;13896:631:0;;;;;;-1:-1:-1;;;;;13896:631:0;;:::i;9533:52::-;;;;;;;;;;;;;;;;-1:-1:-1;9533:52:0;-1:-1:-1;;;;;9533:52:0;;:::i;18190:1789::-;;;;;;;;;;;;;;;;-1:-1:-1;18190:1789:0;;;;;;;;-1:-1:-1;;;;;18190:1789:0;;:::i;9287:50::-;;;;;;;;;;;;;;;;-1:-1:-1;9287:50:0;-1:-1:-1;;;;;9287:50:0;;:::i;9773:42::-;;;;;;;;;;;;;;;;-1:-1:-1;9773:42:0;-1:-1:-1;;;;;9773:42:0;;:::i;10110:52::-;;;;;;;;;;;;;;;;-1:-1:-1;10110:52:0;-1:-1:-1;;;;;10110:52:0;;:::i;20189:4839::-;;;;;;;;;;;;;;;;-1:-1:-1;20189:4839:0;;;;;-1:-1:-1;;;;;20189:4839:0;;;;;;;;;;;;:::i;10365:21::-;;;:::i;8611:32::-;;;;;;;;;;;;;;;;-1:-1:-1;8611:32:0;;:::i;10201:21::-;;;:::i;8997:57::-;;;;;;;;;;;;;;;;-1:-1:-1;8997:57:0;-1:-1:-1;;;;;8997:57:0;;:::i;12136:585::-;-1:-1:-1;;;;;12215:24:0;;;;;;:14;:24;;;;;;;;12206:51;;;;;-1:-1:-1;;;12206:51:0;;;;;;;;;;;;-1:-1:-1;;;12206:51:0;;;;;;;;;;;;;;;12340:10;12322:30;;;;:16;:30;;;;;;;;:38;;:30;:38;12313:65;;;;;-1:-1:-1;;;12313:65:0;;;;;;;;;;;;-1:-1:-1;;;12313:65:0;;;;;;;;;;;;;;;12391:10;12404:26;12413:6;12421:7;12404;:26::i;:::-;12391:39;;12454:5;-1:-1:-1;;;;;12441:29:0;;12472:10;12484:5;12441:50;;;;;;;;;;;;;-1:-1:-1;;;;;12441:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12520:13:0;;:26;;-1:-1:-1;12520:13:0;-1:-1:-1;12539:5:0;12520:17;:26::i;:::-;12504:13;:42;;;12562:32;;-1:-1:-1;;;;;;;;;;;12562:32:0;;;;12607:52;-1:-1:-1;;;;;12607:29:0;;12638:10;12650:7;12607:29;:52::i;:::-;12677:36;;;;;;;;;;;;;;-1:-1:-1;;;;;12677:36:0;;;;;;;;;;;12136:585;;;:::o;9192:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;9192:32:0;;-1:-1:-1;9192:32:0;:::o;4143:159::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;4260:1:::1;4244:6:::0;;4227:37:::1;::::0;-1:-1:-1;;;;;4244:6:0;;::::1;::::0;4227:37:::1;::::0;4260:1;;4227:37:::1;4292:1;4275:19:::0;;-1:-1:-1;;;;;;4275:19:0::1;::::0;;4143:159::o;9904:47::-;;;;;;;;;;;;;:::o;15189:626::-;-1:-1:-1;;;;;15261:26:0;;;;;;:16;:26;;;;;;;;15257:209;;;15334:10;15314:32;;;;:18;:32;;;;;;;;15305:59;;;;;-1:-1:-1;;;15305:59:0;;;;;;;;;;;;-1:-1:-1;;;15305:59:0;;;;;;;;;;;;;;;15257:209;;;15424:10;15406:30;;;;:16;:30;;;;;;;;15397:57;;;;;-1:-1:-1;;;15397:57:0;;;;;;;;;;;;-1:-1:-1;;;15397:57:0;;;;;;;;;;;;;;;15478:10;15491:24;15499:6;15507:7;15491;:24::i;:::-;15478:37;;15544:16;:14;:16::i;:::-;15535:5;:25;;15526:61;;;;;-1:-1:-1;;;15526:61:0;;;;;;;;;;;;-1:-1:-1;;;15526:61:0;;;;;;;;;;;;;;;15616:13;;:26;;15635:5;15616:17;:26::i;:::-;15600:13;:42;;;15658:32;;-1:-1:-1;;;;;;;;;;;15658:32:0;;;;15703:52;-1:-1:-1;;;;;15703:29:0;;15734:10;15746:7;15703:29;:52::i;:::-;15773:34;;;;;;;;-1:-1:-1;;;;;15773:34:0;;;;;;;;;;;;;15189:626;;;:::o;16350:148::-;16398:4;16423:67;16442:46;16477:9;;16450:5;-1:-1:-1;;;;;16442:27:0;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;16442:29:0;;:33;:46::i;:::-;16423:13;;;:17;:67::i;:::-;16416:74;;16350:148;:::o;8214:52::-;;;;;;;;;;;;;;;:::o;12866:863::-;12956:10;12946:22;;;;:8;:22;;;;;;;;12937:49;;;;;-1:-1:-1;;;12937:49:0;;;;;;;;;;;;-1:-1:-1;;;12937:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13006:24:0;;;;;;:14;:24;;;;;;;;12997:51;;;;;-1:-1:-1;;;12997:51:0;;;;;;;;;;;;-1:-1:-1;;;12997:51:0;;;;;;;;;;;;;;;13061:10;13074:26;13083:6;13091:7;13074;:26::i;:::-;13140:6;;13132:40;;;-1:-1:-1;;;13132:40:0;;13160:10;13132:40;;;;;;13061:39;;-1:-1:-1;13113:16:0;;-1:-1:-1;;;;;13140:6:0;;;;13132:26;;:40;;;;;;;;;;;;;;;13140:6;13132:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13132:40:0;13275:10;13222:18;13260:27;;;:13;13132:40;13260:27;;;;;13132:40;;-1:-1:-1;13222:18:0;13243:46;;13132:40;;13243:15;:46::i;:::-;13222:67;;13318:13;13309:5;:22;;13300:55;;;;;-1:-1:-1;;;13300:55:0;;;;;;;;;;;;-1:-1:-1;;;13300:55:0;;;;;;;;;;;;;;;13413:10;13398:27;;;;:13;:27;;;;;;:40;;13431:5;13398:31;:40::i;:::-;13383:10;13368:27;;;;:13;:27;;;;;:70;13461:9;;:22;;13476:5;13461:13;:22::i;:::-;13449:9;:34;13512:13;;:26;;13531:5;13512:17;:26::i;:::-;13496:13;:42;;;13554:32;;-1:-1:-1;;;;;;;;;;;13554:32:0;;;;13599:48;;;-1:-1:-1;;;13599:48:0;;13626:10;13599:48;;;;;;;;;;;;-1:-1:-1;;;;;13599:25:0;;;;;:48;;;;;;;;;;;;;;-1:-1:-1;13599:25:0;:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;13673:48:0;;;;;;13599;13673;;;;;;;-1:-1:-1;;;;;13673:48:0;;;13685:10;;13673:48;;;;;;;;;;;12866:863;;;;;:::o;9093:51::-;;;;;;;;;;;;-1:-1:-1;;;;;9093:51:0;;:::o;17484:530::-;-1:-1:-1;;;;;17585:24:0;;17555:11;17585:24;;;:14;:24;;;;;;;;17580:427;;;17752:88;17819:6;-1:-1:-1;;;;;17811:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17811:27:0;17771:26;;;-1:-1:-1;;;17771:26:0;;;;17805:33;;;;:2;:33;;17752:47;;-1:-1:-1;;;;;17779:5:0;17771:24;;;;:26;;;;;17811:27;;17771:26;;;;;;;;:24;:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17771:26:0;17752:7;;17765:32;;:2;:32;17752:11;:47::i;:::-;:51;;:88::i;:::-;17745:4;:95;17736:104;;17580:427;;;-1:-1:-1;;;;;17863:26:0;;;;;;:16;:26;;;;;;;;17858:149;;;-1:-1:-1;;;;;17940:24:0;;;;;;;:14;:24;;;;;;;;;;17923:72;;-1:-1:-1;;;17923:72:0;;;;;;;;;;;;;;;;;17940:24;;;;;17923:53;;:72;;;;;;;;;;;17940:24;17923:72;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;17923:72:0;17916:4;:79;;-1:-1:-1;17858:149:0;17484:530;;;;:::o;16651:668::-;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;16710:13:::1;::::0;16734:221:::1;16755:13;:20:::0;16751:24;::::1;16734:221;;;16809:134;16842:86;16851:13;16866:1;16851:18;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;16879:13:::1;:18:::0;;-1:-1:-1;;;;;16851:18:0;;::::1;::::0;16894:1;;16879:18;::::1;;;;;;::::0;;;::::1;::::0;;;;::::1;::::0;16871:55:::1;::::0;;-1:-1:-1;;;16871:55:0;;16919:4:::1;16871:55;::::0;::::1;::::0;;;-1:-1:-1;;;;;16879:18:0;;::::1;::::0;16871:38:::1;::::0;:55;;;;;;;;;;16879:18;16871:55;::::1;;::::0;::::1;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;::::0;::::1;;-1:-1:-1::0;16871:55:0;16842:7:::1;:86::i;:::-;16809:8:::0;;:12:::1;:134::i;:::-;16798:145:::0;-1:-1:-1;16777:3:0::1;;16734:221;;;;16970:6;16965:226;16986:15;:22:::0;16982:26;::::1;16965:226;;;17042:137;17074:90;17083:15;17100:1;17083:20;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;17113:15:::1;:20:::0;;-1:-1:-1;;;;;17083:20:0;;::::1;::::0;17130:1;;17113:20;::::1;;;;17042:137;17031:148:::0;-1:-1:-1;17010:3:0::1;;16965:226;;;-1:-1:-1::0;17201:13:0::1;:24:::0;;;17241:27:::1;::::0;17217:8;;-1:-1:-1;;;;;;;;;;;17241:27:0;;;::::1;17284;::::0;17301:8;;17284:27:::1;::::0;;;::::1;4126:1;16651:668::o:0;8367:32::-;;;;;;;;;;;;4310:261;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4413:23:0;::::1;4404:75;;;;-1:-1:-1::0;;;4404:75:0::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4512:6;::::0;;4495:36:::1;::::0;-1:-1:-1;;;;;4495:36:0;;::::1;::::0;4512:6;::::1;::::0;4495:36:::1;::::0;::::1;4542:9;:21:::0;;-1:-1:-1;;;;;;4542:21:0::1;-1:-1:-1::0;;;;;4542:21:0;;;::::1;::::0;;;::::1;::::0;;4310:261::o;3916:90::-;3965:7;3992:6;-1:-1:-1;;;;;3992:6:0;3916:90;:::o;10054:49::-;;;;;;;;;;;;;;;:::o;4583:221::-;4667:9;;-1:-1:-1;;;;;4667:9:0;4653:10;:23;4644:71;;;;-1:-1:-1;;;4644:71:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4756:9;;;4748:6;;4731:36;;-1:-1:-1;;;;;4756:9:0;;;;4748:6;;;;4731:36;;;4787:9;;;4778:18;;-1:-1:-1;;;;;;4778:18:0;-1:-1:-1;;;;;4787:9:0;;;4778:18;;;;;;4583:221::o;7972:48::-;;;;;;;;;;;;;;;:::o;15896:345::-;15999:10;15982:29;;;;:15;:29;;;;;;;;15973:56;;;;;-1:-1:-1;;;15973:56:0;;;;;;;;;;;;-1:-1:-1;;;15973:56:0;;;;;;;;;;;;;;;16060:16;:14;:16::i;:::-;16049:7;:27;;16040:63;;;;;-1:-1:-1;;;16040:63:0;;;;;;;;;;;;-1:-1:-1;;;16040:63:0;;;;;;;;;;;;;;;16132:5;-1:-1:-1;;;;;16116:28:0;;16146:10;16158:7;16116:51;;;;;;;;;;;;;-1:-1:-1;;;;;16116:51:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;16185:48:0;;;;;;;;-1:-1:-1;;;;;16185:48:0;;;-1:-1:-1;16200:10:0;;-1:-1:-1;16185:48:0;;;;;;;;;15896:345;;:::o;8117:34::-;;;;;;;;;;;;9436;;;;;;;;;;;;8027:51;;;;;;;;;;;;;:::o;9686:24::-;;;;;;;;;;;;8462:50;;;;;;;;;;;;;;;:::o;10229:23::-;;;;:::o;8745:53::-;;;;;;;;;;;;;:::o;8837:36::-;;;;;;;;;;;;10300:25;;;;:::o;8273:55::-;;;;;;;;;;;;;:::o;8936:54::-;;;;;;;;;;;;;;;:::o;8688:50::-;;;;;;;;;;;;;;;:::o;9592:55::-;;;;;;;;;;;;;:::o;9344:53::-;;;;;;;;;;;;;:::o;7809:30::-;;;:::o;9960:31::-;;;;;;;;;;;;11104:879;-1:-1:-1;;;;;11219:24:0;;11186:10;11219:24;;;:14;:24;;;;;;;;;:54;;-1:-1:-1;;;;;;11247:26:0;;;;;;:16;:26;;;;;;;;11219:54;11210:81;;;;;-1:-1:-1;;;11210:81:0;;;;;;;;;;;;-1:-1:-1;;;11210:81:0;;;;;;;;;;;;;;;11302:71;-1:-1:-1;;;;;11302:33:0;;11337:10;11357:4;11364:7;11302:33;:71::i;:::-;-1:-1:-1;;;;;11391:24:0;;;;;;:14;:24;;;;;;;;11386:212;;;11462:10;11442:32;;;;:18;:32;;;;;;;;11433:59;;;;;-1:-1:-1;;;11433:59:0;;;;;;;;;;;;-1:-1:-1;;;11433:59:0;;;;;;;;;;;;;;;11386:212;;;11556:10;11534:34;;;;:20;:34;;;;;;;;11525:61;;;;;-1:-1:-1;;;11525:61:0;;;;;;;;;;;;-1:-1:-1;;;11525:61:0;;;;;;;;;;;;;;;11610:10;11623:24;11631:6;11639:7;11623;:24::i;:::-;11610:37;-1:-1:-1;11741:20:0;11610:37;11752:7;11741:9;:20::i;:::-;11733:28;;11788:5;-1:-1:-1;;;;;11772:28:0;;11802:10;11814:5;11772:49;;;;;;;;;;;;;-1:-1:-1;;;;;11772:49:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;11850:13:0;;:26;;-1:-1:-1;11850:13:0;-1:-1:-1;11869:5:0;11850:17;:26::i;:::-;11834:13;:42;;;11892:32;;-1:-1:-1;;;;;;;;;;;11892:32:0;;;;11942:33;;;;;;;;;;;;;;-1:-1:-1;;;;;11942:33:0;;;;;;;;;;;11104:879;;;;;;:::o;14660:384::-;14743:10;14733:22;;;;:8;:22;;;;;;;;14724:49;;;;;-1:-1:-1;;;14724:49:0;;;;;;;;;;;;-1:-1:-1;;;14724:49:0;;;;;;;;;;;;;;;14786:52;;;-1:-1:-1;;;14786:52:0;;14817:10;14786:52;;;;;;;;;;;;-1:-1:-1;;;;;14799:5:0;14786:29;;;;:52;;;;;-1:-1:-1;;14786:52:0;;;;;;;-1:-1:-1;14786:29:0;:52;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14896:10:0;14881:27;;;;:13;:27;;;;;;:42;;-1:-1:-1;14881:27:0;-1:-1:-1;14914:7:0;14881:31;:42::i;:::-;14866:10;14851:27;;;;:13;:27;;;;;:72;14946:9;;:24;;14961:7;14946:13;:24::i;:::-;14934:9;:36;14988:48;;;;;;;;;;;;;;-1:-1:-1;;;;;15011:5:0;14988:48;;14999:10;;14988:48;;;;;;;;;;;14660:384;:::o;8519:53::-;;;;;;;;;;;;;:::o;9822:45::-;;;;;;;;;;;;;:::o;7897:30::-;;;;;;;;;;;;7846:42;;;:::o;13896:631::-;13997:10;13987:22;;;;:8;:22;;;;;;;;13978:49;;;;;-1:-1:-1;;;13978:49:0;;;;;;;;;;;;-1:-1:-1;;;13978:49:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;14047:24:0;;;;;;:14;:24;;;;;;;;14038:51;;;;;-1:-1:-1;;;14038:51:0;;;;;;;;;;;;-1:-1:-1;;;14038:51:0;;;;;;;;;;;;;;;14102:71;-1:-1:-1;;;;;14102:33:0;;14137:10;14157:4;14164:7;14102:33;:71::i;:::-;14186:10;14199:26;14208:6;14216:7;14199;:26::i;:::-;14281:10;14266:27;;;;:13;:27;;;;;;14186:39;;-1:-1:-1;14266:40:0;;14186:39;14266:31;:40::i;:::-;14251:10;14236:27;;;;:13;:27;;;;;:70;14329:9;;:22;;14344:5;14329:13;:22::i;:::-;14317:9;:34;14380:13;;:26;;14399:5;14380:17;:26::i;:::-;14364:13;:42;;;14422:32;;-1:-1:-1;;;;;;;;;;;14422:32:0;;;;14472:47;;;;;;;;;;;;;;-1:-1:-1;;;;;14472:47:0;;;14483:10;;14472:47;;;;;;;;;;;13896:631;;;:::o;9533:52::-;;;;;;;;;;;;;;;:::o;18190:1789::-;18278:4;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;18305:22:0;::::1;18296:33;;;::::0;::::1;;18358:25;18345:9;:38;;;;;;;;;18340:1556;;;18442:40;:12;18460:20;18442:16;:40::i;:::-;-1:-1:-1::0;;;;;18406:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:76;18340:1556:::1;;;18518:23;18505:9;:36;;;;;;;;;18500:1396;;;18598:40;:12;18616:20;18598:16;:40::i;:::-;-1:-1:-1::0;;;;;18564:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:74;18500:1396:::1;;;18674:21;18661:9;:34;;;;;;;;;18656:1240;;;18750:40;:12;18768:20;18750:16;:40::i;:::-;-1:-1:-1::0;;;;;18718:29:0;::::1;;::::0;;;:17:::1;:29;::::0;;;;:72;18656:1240:::1;;;18826:23;18813:9;:36;;;;;;;;;18808:1088;;;18906:49;18924:29;:20;18950:1;18924:24;:29::i;:::-;18906:12;::::0;:16:::1;:49::i;:::-;-1:-1:-1::0;;;;;18872:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:83;18808:1088:::1;;;18991:27;18978:9;:40;;;;;;;;;18973:923;;;19079:40;:12;19097:20;19079:16;:40::i;:::-;-1:-1:-1::0;;;;;19041:35:0;::::1;;::::0;;;:23:::1;:35;::::0;;;;:78;18973:923:::1;;;19155:23;19142:9;:36;;;;;;;;;19137:759;;;19235:40;:12;19253:20;19235:16;:40::i;:::-;-1:-1:-1::0;;;;;19201:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:74;19137:759:::1;;;19311:25;19298:9;:38;;;;;;;;;19293:603;;;19395:49;19413:29;:20;19439:1;19413:24;:29::i;19395:49::-;-1:-1:-1::0;;;;;19359:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:85;19293:603:::1;;;19480:15;19467:9;:28;;;;;;;;;19462:434;;;19544:40;:12;19562:20;19544:16;:40::i;:::-;-1:-1:-1::0;;;;;19518:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;:66;19462:434:::1;;;19620:22;19607:9;:35;;;;;;;;;19602:294;;;19698:40;:12;19716:20;19698:16;:40::i;:::-;-1:-1:-1::0;;;;;19665:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;:73;19602:294:::1;;;19774:15;19761:9;:28;;;;;;;;;19756:140;;;19826:40;:12;19844:20;19826:16;:40::i;:::-;19812:11;:54:::0;19756:140:::1;;;-1:-1:-1::0;19891:5:0::1;19884:12;;19756:140;19928:9;19914:35;;;;;;;;;::::0;;-1:-1:-1;;;;;19914:35:0;::::1;::::0;;;;::::1;::::0;;;;::::1;::::0;;::::1;-1:-1:-1::0;19967:4:0::1;18190:1789:::0;;;;:::o;9287:50::-;;;;;;;;;;;;;;;:::o;9773:42::-;;;;;;;;;;;;;;;:::o;10110:52::-;;;;;;;;;;;;;:::o;20189:4839::-;20299:4;4057:6;;-1:-1:-1;;;;;4057:6:0;4067:10;4057:20;4048:67;;;;;-1:-1:-1;;;4048:67:0;;;;;;;;;;;;;-1:-1:-1;;;;;;;;;;;4048:67:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;20326:22:0;::::1;20317:33;;;::::0;::::1;;20361:11;::::0;20388:9:::1;:38;;;;;;;;;20383:4551;;;20454:67;20468:21;20491:18;20511:8;20454:12;:67::i;:::-;20449:293;;;-1:-1:-1::0;;;;;20543:33:0;::::1;20579:1;20543:33:::0;;;:21:::1;:33;::::0;;;;:37;20604:43:::1;20618:17;20566:8:::0;20604:12:::1;:43::i;:::-;20599:128;;20673:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;20673:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;20673:34:0::1;-1:-1:-1::0;;;;;20673:34:0;::::1;;::::0;;20599:128:::1;-1:-1:-1::0;;;;;;20766:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;20765:31;-1:-1:-1::0;;20811:39:0;;::::1;::::0;::::1;::::0;;;20383:4551:::1;;;20900:23;20887:9;:36;;;;;;;;;20882:4052;;;20951:63;20965:19;20986:16;21004:8;20951:12;:63::i;:::-;20946:283;;;-1:-1:-1::0;;;;;21036:31:0;::::1;21070:1;21036:31:::0;;;:19:::1;:31;::::0;;;;:35;21095:41:::1;21109:15;21057:8:::0;21095:12:::1;:41::i;:::-;21090:124;;21162:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21162:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;21162:32:0::1;-1:-1:-1::0;;;;;21162:32:0;::::1;;::::0;;21090:124:::1;-1:-1:-1::0;;;;;;21253:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;21252:29;-1:-1:-1::0;;21296:37:0;;::::1;::::0;::::1;::::0;;;20882:4052:::1;;;21371:21;21358:9;:34;;;;;;;;;21353:3581;;;21420:59;21434:17;21453:14;21469:8;21420:12;:59::i;:::-;21415:273;;;-1:-1:-1::0;;;;;21501:29:0;::::1;21533:1;21501:29:::0;;;:17:::1;:29;::::0;;;;:33;21558:39:::1;21572:13;21520:8:::0;21558:12:::1;:39::i;:::-;21553:120;;21623:13;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;21623:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;21623:30:0::1;-1:-1:-1::0;;;;;21623:30:0;::::1;;::::0;;21553:120:::1;-1:-1:-1::0;;;;;;21712:26:0;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;::::1;::::0;::::1;21711:27;-1:-1:-1::0;;21753:35:0;;::::1;::::0;::::1;::::0;;;21353:3581:::1;;;21826:23;21813:9;:36;;;;;;;;;21808:3126;;;21877:63;21891:19;21912:16;21930:8;21877:12;:63::i;:::-;21872:334;;;21962:15;:32:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;21962:32:0::1;-1:-1:-1::0;;;;;21962:32:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;22013:31:0;;;:19:::1;21962:32;22013:31:::0;;;;:35;22072:41:::1;::::0;21962:32;22072:12:::1;:41::i;:::-;22067:124;;22139:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22139:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22139:32:0::1;-1:-1:-1::0;;;;;22139:32:0;::::1;;::::0;;22067:124:::1;-1:-1:-1::0;;;;;;22230:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;22229:29;-1:-1:-1::0;;22273:37:0;;::::1;::::0;::::1;::::0;;;21808:3126:::1;;;22348:27;22335:9;:40;;;;;;;;;22330:2604;;;22403:71;22417:23;22442:20;22464:8;22403:12;:71::i;:::-;22398:358;;;22496:19;:36:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;22496:36:0::1;-1:-1:-1::0;;;;;22496:36:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;22551:35:0;;;:23:::1;22496:36;22551:35:::0;;;;:39;22614:45:::1;::::0;22496:36;22614:12:::1;:45::i;:::-;22609:132;;22685:19;:36:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;22685:36:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;22685:36:0::1;-1:-1:-1::0;;;;;22685:36:0;::::1;;::::0;;22609:132:::1;-1:-1:-1::0;;;;;;22780:32:0;::::1;;::::0;;;:20:::1;:32;::::0;;;;;;::::1;::::0;::::1;22779:33;-1:-1:-1::0;;22827:41:0;;::::1;::::0;::::1;::::0;;;22330:2604:::1;;;22906:23;22893:9;:36;;;;;;;;;22888:2046;;;22957:63;22971:19;22992:16;23010:8;22957:12;:63::i;:::-;22952:283;;;-1:-1:-1::0;;;;;23042:31:0;::::1;23076:1;23042:31:::0;;;:19:::1;:31;::::0;;;;:35;23101:41:::1;23115:15;23063:8:::0;23101:12:::1;:41::i;:::-;23096:124;;23168:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23168:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23168:32:0::1;-1:-1:-1::0;;;;;23168:32:0;::::1;;::::0;;23096:124:::1;-1:-1:-1::0;;;;;;23259:28:0;;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;;;::::1;::::0;::::1;23258:29;-1:-1:-1::0;;23302:37:0;;::::1;::::0;::::1;::::0;;;23354:14:::1;:26:::0;;;;;;:40;;-1:-1:-1;;;;;;23354:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;22888:2046:::1;;;23432:25;23419:9;:38;;;;;;;;;23414:1520;;;23485:67;23499:21;23522:18;23542:8;23485:12;:67::i;:::-;23480:293;;;-1:-1:-1::0;;;;;23574:33:0;::::1;23610:1;23574:33:::0;;;:21:::1;:33;::::0;;;;:37;23635:43:::1;23649:17;23597:8:::0;23635:12:::1;:43::i;:::-;23630:128;;23704:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;23704:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;23704:34:0::1;-1:-1:-1::0;;;;;23704:34:0;::::1;;::::0;;23630:128:::1;-1:-1:-1::0;;;;;;23797:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;23796:31;-1:-1:-1::0;;23842:39:0;;::::1;::::0;::::1;::::0;;;23414:1520:::1;;;23919:15;23906:9;:28;;;;;;;;;23901:1033;;;23962:47;23976:11;23989:8;23999;23962:12;:47::i;:::-;23957:243;;;-1:-1:-1::0;;;;;24031:23:0;::::1;24057:1;24031:23:::0;;;:11:::1;:23;::::0;;;;:27;24082:33:::1;24096:7;24044:8:::0;24082:12:::1;:33::i;:::-;24077:108;;24141:7;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24141:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24141:24:0::1;-1:-1:-1::0;;;;;24141:24:0;::::1;;::::0;;24077:108:::1;-1:-1:-1::0;;;;;;24224:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;;::::1;::::0;::::1;24223:21;-1:-1:-1::0;;24259:29:0;;::::1;::::0;::::1;::::0;;;23901:1033:::1;;;24326:22;24313:9;:35;;;;;;;;;24308:626;;;24376:61;24390:18;24410:15;24427:8;24376:12;:61::i;:::-;24371:278;;;-1:-1:-1::0;;;;;24459:30:0;::::1;24492:1;24459:30:::0;;;:18:::1;:30;::::0;;;;:34;24517:40:::1;24531:14;24479:8:::0;24517:12:::1;:40::i;:::-;24512:122;;24583:14;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;24583:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;24583:31:0::1;-1:-1:-1::0;;;;;24583:31:0;::::1;;::::0;;24512:122:::1;-1:-1:-1::0;;;;;;24673:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;::::1;::::0;::::1;24672:28;-1:-1:-1::0;;24715:36:0;;::::1;::::0;::::1;::::0;;;24308:626:::1;;;24789:15;24776:9;:28;;;;;;;;;24771:163;;;-1:-1:-1::0;24841:1:0::1;24827:11;:15:::0;24857:6:::1;:17:::0;;-1:-1:-1;;;;;;24857:17:0::1;-1:-1:-1::0;;;;;24857:17:0;::::1;;::::0;;-1:-1:-1;24771:163:0::1;;;24929:5;24922:12;;;;;24771:163;24969:9;24952:46;;;;;;;;;::::0;;-1:-1:-1;;;;;24952:46:0;::::1;::::0;;;::::1;;;::::0;::::1;::::0;;;::::1;::::0;;;;;;;;;::::1;25016:4;25009:11;;;4126:1;20189:4839:::0;;;;;:::o;10365:21::-;;;;:::o;8611:32::-;;;;;;;;;;;;10201:21;;;-1:-1:-1;;;;;10201:21:0;;:::o;8997:57::-;;;;;;;;;;;;;:::o;288:136::-;346:7;373:43;377:1;380;373:43;;;;;;;;;;;;;;;;;:3;:43::i;5561:177::-;5671:58;;;-1:-1:-1;;;;;5671:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5671:58:0;-1:-1:-1;;;5671:58:0;;;5644:86;;5664:5;;5644:19;:86::i;:::-;5561:177;;;:::o;99:181::-;157:7;189:5;;;213:6;;;;205:46;;;;;-1:-1:-1;;;205:46:0;;;;;;;;;;;;;;;;;;;;;;;;;;;632:250;690:7;714:6;710:47;;-1:-1:-1;744:1:0;737:8;;710:47;781:5;;;785:1;781;:5;:1;805:5;;;;;:10;797:56;;;;-1:-1:-1;;;797:56:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;890:132;948:7;975:39;979:1;982;975:39;;;;;;;;;;;;;;;;;:3;:39::i;5746:205::-;5874:68;;;-1:-1:-1;;;;;5874:68:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;5874:68:0;-1:-1:-1;;;5874:68:0;;;5847:96;;5867:5;;5847:19;:96::i;:::-;5746:205;;;;:::o;25276:438::-;-1:-1:-1;;;;;25489:19:0;;25465:4;25489:19;;;;;;;;;;;;;25483:210;;-1:-1:-1;;;;;25535:18:0;;;;;;;;;;;;;;25526:48;;;;;-1:-1:-1;;;25526:48:0;;;;;;;;;;;;-1:-1:-1;;;25526:48:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;25598:18:0;;;;;;;;;;;;;;25620:12;-1:-1:-1;25598:34:0;25589:66;;;;;-1:-1:-1;;;25589:66:0;;;;;;;;;;;;-1:-1:-1;;;25589:66:0;;;;;;;;;;;;;;;-1:-1:-1;25677:4:0;25670:11;;25483:210;-1:-1:-1;25701:5:0;25276:438;;;;;:::o;25883:277::-;25972:4;;25990:140;26011:12;;26007:16;;25990:140;;;26064:6;-1:-1:-1;;;;;26050:20:0;:5;26057:1;26050:10;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;26050:10:0;:20;26046:73;;;26099:4;26092:11;;;;;26046:73;26025:3;;25990:140;;432:192;518:7;554:12;546:6;;;;538:29;;;;-1:-1:-1;;;538:29:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;590:5:0;;;432:192::o;5959:418::-;6040:23;6066:69;6094:4;6066:69;;;;;;;;;;;;;;;;;6074:5;-1:-1:-1;;;;;6066:27:0;;;:69;;;;;:::i;:::-;6150:17;;6040:95;;-1:-1:-1;6150:21:0;6146:224;;6292:10;6281:30;;;;;;;;;;;;;;;-1:-1:-1;6281:30:0;6273:85;;;;-1:-1:-1;;;6273:85:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1030:189;1116:7;1151:12;1144:5;1136:28;;;;-1:-1:-1;;;1136:28:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1175:9;1191:1;1187;:5;;;;;;;1030:189;-1:-1:-1;;;;;1030:189:0:o;1679:196::-;1782:12;1814:53;1837:6;1845:4;1851:1;1854:12;1814:22;:53::i;:::-;1807:60;1679:196;-1:-1:-1;;;;1679:196:0:o;1883:817::-;2013:12;2046:18;2057:6;2046:10;:18::i;:::-;2038:60;;;;;-1:-1:-1;;;2038:60:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;2172:12;2186:23;2213:6;-1:-1:-1;;;;;2213:11:0;2233:8;2244:4;2213:36;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;2213:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2171:78;;;;2264:7;2260:433;;;2295:10;-1:-1:-1;2288:17:0;;-1:-1:-1;2288:17:0;2260:433;2342:17;;:21;2338:344;;2510:10;2504:17;2571:15;2558:10;2554:2;2550:19;2543:44;2458:148;2646:20;;-1:-1:-1;;;2646:20:0;;;;;;;;;;;;;;;;;2653:12;;2646:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1249:422;1616:20;1655:8;;;1249:422::o

Swarm Source

ipfs://df82234e5d89f27847c893ea053b40348840d71788d773777c2c3c2cd57cec2e

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ 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.