Contract 0x10C12B7322Ac2c5a26bD9929ABc6e6b7997570ba

Txn Hash Method
Block
From
To
Value [Txn Fee]
0x52ea27537617ffb76c107f3ea11c8f5a9f6798abaaf01cc8f8bf86094d1ae0f1Queue79089202021-12-07 3:12:58202 days 20 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00126352525
0x316f4f9aa59457dd9f6fd57e219e4351a9804382ebe5b136860ccb8b65c065ceManage79087662021-12-07 3:07:48202 days 20 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.0018421525
0xdbab933e92a034d936cd802017d8c8ba1deb23c40e31024dfd1f432c63379152Manage79087412021-12-07 3:07:00202 days 20 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.0022696525
0xa60b611b0da7de60c49766bc5f0a6010520cd8dd4adc5ec6917a97dcc30cd0bcToggle79086452021-12-07 3:03:47202 days 20 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00248102525
0xa106968119c757889ac9368c22a5ac200aac9b3fef77bab6ef9b1ae91491f61eQueue79086332021-12-07 3:03:23202 days 20 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00126352525
0x819d13ff2e8d96177e5d5cf86946d212bc8a40af5ab80eda2a5c30f917724676Toggle77458822021-12-03 8:57:37206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.002115825
0x980b14ea45a6d1d0cebbdc2801cb9aa0f916da1091c0f86c715e58c87fea2c22Queue77458782021-12-03 8:57:28206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00126812525
0xbf07125e292e4141d167efa2a9a3784045419c4becd4f164e172c012b68d4a5dToggle77458712021-12-03 8:57:15206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.0021189525
0xf727ee02ab5eee65e49fae17d464823cad501313f867276a2059f2d82062f552Queue77458662021-12-03 8:57:05206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00126292525
0x02a66fe0aff2db0e090759b34b82227f641468207350ddea889a1d2f0baa7b86Toggle77458602021-12-03 8:56:53206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.002105125
0xbc39a767fe5c0bf147902ec0ca9289b777025673d9b791118764bd4ca750b136Queue77458542021-12-03 8:56:41206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00125742525
0xec56fb451a963f1ea6d713175ff571acdc752d6c39f8961656b0eb50251735a0Toggle77457682021-12-03 8:53:33206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00247917525
0x56d8c4219a0ab41aa6c9635cb29a3b9a2e02da0f1b14512b2a50adc697de69faQueue77457642021-12-03 8:53:27206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00126812525
0xcbf6c9178af6c6bcaab66cda98c5a66c792b97a355a8ca3160654df1a1bef565Deposit77457362021-12-03 8:52:29206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00402547525
0x7aaaf3136418f93c8d81a13d60ad5a94a4e80b0a7f02c28ab6e94167a3de164fDeposit77457302021-12-03 8:52:17206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.0029571525
0x405171b31dfd2272534c2571e6e5b77d1f4f61bdd2cebea3c638f7cf5ad7bff7Toggle77456872021-12-03 8:50:50206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00210825
0x13c9aa8eb4b2ccb84969008d9bf1c56184232a489a5e7c56869cb12be2e9fdc4Queue77456842021-12-03 8:50:43206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00126032525
0x873fdc8f82b536b237f674fc9e3006d3a8eb441b13c0e7c714df0b999b97a3a3Toggle77456782021-12-03 8:50:33206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00248232525
0xc796fef8988aac5e438229bff319ef662ac09fac49ccfacc3d04aa04ffb9c903Queue77456742021-12-03 8:50:24206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00126292525
0x1d39b70028e1a5c3ee253457ee3b3c7cc59be35924b954eea303aee4e99aaab4Toggle77456702021-12-03 8:50:17206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00246847525
0xe11448a320153ea9eb2af2664a60f90eed01d34baed83bd47cbff54c24e8d0f8Queue77456672021-12-03 8:50:11206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  0x10c12b7322ac2c5a26bd9929abc6e6b7997570ba0 AVAX0.00125742525
0x7116567021a3fc16251bf51fc79093a87c55102f3c7e35fd0f5286389b0542800x6080604077454162021-12-03 8:41:45206 days 14 hrs ago0x8248a1d1022cffb54293681658a1542ddb7d97c6 IN  Create: OTWOTreasuryV20 AVAX0.0826635525
[ Download CSV Export 
Parent Txn Hash Block From To Value
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
OTWOTreasuryV2

Compiler Version
v0.8.4+commit.c7e474f2

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion, GNU AGPLv3 license

Contract Source Code (Solidity)

/**
 *Submitted for verification at snowtrace.io on 2021-12-03
*/

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.4;

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

// File: contracts/helpers/interfaces/IERC20Mintable.sol


pragma solidity ^0.8.4;

interface IERC20Mintable {
    function mint( uint256 amount_ ) external;

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


// File: contracts/helpers/interfaces/IOTWOERC20.sol



pragma solidity ^0.8.4;

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

// File: contracts/helpers/libraries/SafeERC20.sol




pragma solidity ^0.8.4;





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

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

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

    function safeApprove(IERC20 token, address spender, uint256 value) internal {

        require((value == 0) || (token.allowance(address(this), spender) == 0),
            "SafeERC20: approve from non-zero to non-zero allowance"
        );
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, value));
    }

    function safeIncreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).add(value);
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    function safeDecreaseAllowance(IERC20 token, address spender, uint256 value) internal {
        uint256 newAllowance = token.allowance(address(this), spender).sub(value, "SafeERC20: decreased allowance below zero");
        _callOptionalReturn(token, abi.encodeWithSelector(token.approve.selector, spender, newAllowance));
    }

    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");
        }
    }
}

// File: contracts/helpers/interfaces/IERC20.sol


pragma solidity ^0.8.4;

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

    function totalSupply() external view returns (uint256);

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

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

    function allowance(address owner, address spender) external view returns (uint256);

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

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

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

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

// File: contracts/helpers/Ownable.sol




pragma solidity ^0.8.4;

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 Manager" );
        _;
    }

    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;
    }
}
// File: contracts/helpers/libraries/Address.sol


pragma solidity ^0.8.4;

library Address {

    function isContract(address account) internal view returns (bool) {

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

    function sendValue(address payable recipient, uint256 amount) internal {
        require(address(this).balance >= amount, "Address: insufficient balance");

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

    function functionCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionCall(target, data, "Address: low-level call failed");
    }

    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 value) internal returns (bytes memory) {
        return functionCallWithValue(target, data, value, "Address: low-level call with value failed");
    }

    function functionCallWithValue(address target, bytes memory data, uint256 value, string memory errorMessage) internal returns (bytes memory) {
        require(address(this).balance >= value, "Address: insufficient balance for call");
        require(isContract(target), "Address: call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.call{ value: value }(data);
        return _verifyCallResult(success, returndata, 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 {
            // Look for revert reason and bubble it up if present
            if (returndata.length > 0) {
                // The easiest way to bubble the revert reason is using memory via assembly

                // solhint-disable-next-line no-inline-assembly
                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) {
        return functionStaticCall(target, data, "Address: low-level static call failed");
    }

    function functionStaticCall(address target, bytes memory data, string memory errorMessage) internal view returns (bytes memory) {
        require(isContract(target), "Address: static call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.staticcall(data);
        return _verifyCallResult(success, returndata, errorMessage);
    }

    function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) {
        return functionDelegateCall(target, data, "Address: low-level delegate call failed");
    }

    function functionDelegateCall(address target, bytes memory data, string memory errorMessage) internal returns (bytes memory) {
        require(isContract(target), "Address: delegate call to non-contract");

        // solhint-disable-next-line avoid-low-level-calls
        (bool success, bytes memory returndata) = target.delegatecall(data);
        return _verifyCallResult(success, returndata, 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) {

                assembly {
                    let returndata_size := mload(returndata)
                    revert(add(32, returndata), returndata_size)
                }
            } else {
                revert(errorMessage);
            }
        }
    }

    function addressToString(address _address) internal pure returns(string memory) {
        bytes32 _bytes = bytes32(uint256(uint160(address(_address))));
        bytes memory HEX = "0123456789abcdef";
        bytes memory _addr = new bytes(42);

        _addr[0] = '0';
        _addr[1] = 'x';

        for(uint256 i = 0; i < 20; i++) {
            _addr[2+i*2] = HEX[uint8(_bytes[i + 12] >> 4)];
            _addr[3+i*2] = HEX[uint8(_bytes[i + 12] & 0x0f)];
        }

        return string(_addr);

    }
}
// File: contracts/helpers/libraries/SafeMath.sol



pragma solidity ^0.8.4;

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;
    }

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

    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }

    function sqrrt(uint256 a) internal pure returns (uint c) {
        if (a > 3) {
            c = a;
            uint b = add( div( a, 2), 1 );
            while (b < c) {
                c = b;
                b = div( add( div( a, b ), b), 2 );
            }
        } else if (a != 0) {
            c = 1;
        }
    }
}
// File: contracts/regular/OTWOTreasury.sol






pragma solidity ^0.8.4;



contract OTWOTreasuryV2 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, SOTWO }

    address public OTWO;
    uint public secondsNeededForQueue;

    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 sOTWO;
    uint public sOTWOQueue; // Delays change to sOTWO address

    address public GOHM;

    uint public totalReserves; // Risk-free value of all assets
    uint public totalDebt;

    constructor (
        address _OTWO,
        address _GOHM,
        address _OTWOGOHM,
        address _gOHMBondCalculator,
        uint _secondsNeededForQueue
    ) {
        require( _OTWO != address(0) );
        OTWO = _OTWO;

        GOHM = _GOHM;

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

        isLiquidityToken[ _OTWOGOHM ] = true;
        liquidityTokens.push( _OTWOGOHM );
        bondCalculator[_OTWOGOHM] = _gOHMBondCalculator;

        secondsNeededForQueue = _secondsNeededForQueue;
    }

    /**
        @notice allow approved address to deposit an asset for OTWO
        @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 as a Reserve Token" );
        IERC20( _token ).safeTransferFrom( msg.sender, address(this), _amount );

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

        uint value = valueOf( _token, _amount );

        send_ = value.sub( _profit );

        IERC20Mintable( OTWO ).mint( msg.sender, send_ );
      
        totalReserves = totalReserves.add( value );
        
        emit ReservesUpdated( totalReserves );

        emit Deposit( _token, _amount, value );
    }

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

        uint value = valueOf( _token, _amount );
        IOTWOERC20( OTWO ).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 as a Debtor" );
        require( isReserveToken[ _token ], "Not accepted as a Reserve Token" );

        uint value = valueOf( _token, _amount );

        uint maximumDebt = IERC20( sOTWO ).balanceOf( msg.sender ); 
        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 as a Debtor" );
        require( isReserveToken[ _token ], "Not accepted as a Reserve Token" );

        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 OTWO
        @param _amount uint
     */
    function repayDebtWithOTWO( uint _amount ) external {
        require( isDebtor[ msg.sender ], "Not approved as a Debtor" );

        IOTWOERC20( OTWO ).burnFrom( msg.sender, _amount );

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

        emit RepayDebt( msg.sender, OTWO, _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 as Liquidity Manager" );
        } else {
            require( isReserveManager[ msg.sender ], "Not approved as Reserve Manager" );
        }

        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 as reward manager" );
        require( _amount <= excessReserves(), "Insufficient reserves" );

        IERC20Mintable( OTWO ).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( OTWO ).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 OTWO 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 ] ) {
            value_ = _amount.mul( 10 ** IERC20( OTWO ).decimals() ).div( 10 ** IERC20( _token ).decimals() );
        } else if ( isLiquidityToken[ _token ] ) {
            value_ = 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.timestamp.add( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVESPENDER ) { // 1
            reserveSpenderQueue[ _address ] = block.timestamp.add( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVETOKEN ) { // 2
            reserveTokenQueue[ _address ] = block.timestamp.add( secondsNeededForQueue );
        } else if ( _managing == MANAGING.RESERVEMANAGER ) { // 3
            ReserveManagerQueue[ _address ] = block.timestamp.add( secondsNeededForQueue.mul( 2 ) );
        } else if ( _managing == MANAGING.LIQUIDITYDEPOSITOR ) { // 4
            LiquidityDepositorQueue[ _address ] = block.timestamp.add( secondsNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYTOKEN ) { // 5
            LiquidityTokenQueue[ _address ] = block.timestamp.add( secondsNeededForQueue );
        } else if ( _managing == MANAGING.LIQUIDITYMANAGER ) { // 6
            LiquidityManagerQueue[ _address ] = block.timestamp.add( secondsNeededForQueue.mul( 2 ) );
        } else if ( _managing == MANAGING.DEBTOR ) { // 7
            debtorQueue[ _address ] = block.timestamp.add( secondsNeededForQueue );
        } else if ( _managing == MANAGING.REWARDMANAGER ) { // 8
            rewardManagerQueue[ _address ] = block.timestamp.add( secondsNeededForQueue );
        } else if ( _managing == MANAGING.SOTWO ) { // 9
            sOTWOQueue = block.timestamp.add( secondsNeededForQueue );
        } 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.SOTWO ) { // 9
            sOTWOQueue = 0;
            sOTWO = _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.timestamp, "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 ABI

[{"inputs":[{"internalType":"address","name":"_OTWO","type":"address"},{"internalType":"address","name":"_GOHM","type":"address"},{"internalType":"address","name":"_OTWOGOHM","type":"address"},{"internalType":"address","name":"_gOHMBondCalculator","type":"address"},{"internalType":"uint256","name":"_secondsNeededForQueue","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"enum OTWOTreasuryV2.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 OTWOTreasuryV2.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":[],"name":"GOHM","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"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":"OTWO","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":[{"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 OTWOTreasuryV2.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":"repayDebtWithOTWO","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":"sOTWO","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sOTWOQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"secondsNeededForQueue","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"enum OTWOTreasuryV2.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"}]

60806040523480156200001157600080fd5b50604051620038b9380380620038b9833981016040819052620000349162000195565b600080546001600160a01b0319163390811782556040519091907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908290a36001600160a01b0385166200008757600080fd5b600280546001600160a01b039687166001600160a01b03199182161790915560238054958716958216861790556000858152600560209081526040808320805460ff199081166001908117909255600480548084019091557f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180548716909a17909955968916808452600e835281842080549099168817909855600d805497880190557fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb59096018054841688179055958152601390955292909320805491909416911617909155600355620001fb565b80516001600160a01b03811681146200019057600080fd5b919050565b600080600080600060a08688031215620001ad578081fd5b620001b88662000178565b9450620001c86020870162000178565b9350620001d86040870162000178565b9250620001e86060870162000178565b9150608086015190509295509295909350565b6136ae806200020b6000396000f3fe608060405234801561001057600080fd5b506004361061034b5760003560e01c806387d67dff116101bd578063cd85641a116100f9578063ebd83cd8116100a2578063fbfd393b1161007c578063fbfd393b146107eb578063fc7b9c18146107fe578063fd1ec01014610807578063fff9ee871461081a57600080fd5b8063ebd83cd814610786578063ee4e19a1146107a9578063fb939588146107cc57600080fd5b8063d796ffb8116100d3578063d796ffb81461073d578063df89b34414610750578063e83afee31461077357600080fd5b8063cd85641a146106f7578063d031370b14610717578063d1d5b4c81461072a57600080fd5b8063a569e57111610166578063b5b1d56011610140578063b5b1d5601461069e578063bc157ac1146106b1578063bd612a3e146106c4578063c24ad43e146106d757600080fd5b8063a569e5711461063b578063ab319c9a1461065e578063b1bd38b01461067e57600080fd5b80638f840ddd116101975780638f840ddd146105ef578063932cc8c3146105f8578063a1210a2d1461061857600080fd5b806387d67dff146105995780638f59c727146105bc5780638f6a7b57146105dc57600080fd5b806346f68ee91161028c5780636b5e40a7116102355780637373a7e61161020f5780637373a7e614610554578063788c6c011461055d5780637a8960d81461057d578063869871bf1461058657600080fd5b80636b5e40a71461051b57806370a0502a1461052e57806371afe8b01461054157600080fd5b80635a96ac0a116102665780635a96ac0a146104dd57806368c31dd5146104e55780636a20de921461050857600080fd5b806346f68ee914610496578063481c6a75146104a95780634e83423c146104ba57600080fd5b8063124154ca116102f95780631eec5a9a116102d35780631eec5a9a146104555780632aa06aa9146104685780632b7ce5001461047b578063437f79121461048357600080fd5b8063124154ca146103e657806312422d23146104195780631af4da701461042c57600080fd5b8063094a86511161032a578063094a86511461039d5780630b0eee30146103cb5780630c3513a8146103de57600080fd5b8062f714ce146103505780630619aff114610365578063089208d814610395575b600080fd5b61036361035e3660046133f9565b61083a565b005b6103786103733660046133c9565b610a20565b6040516001600160a01b0390911681526020015b60405180910390f35b610363610a4a565b6103bd6103ab3660046132f2565b601d6020526000908152604090205481565b60405190815260200161038c565b6103636103d936600461330c565b610af9565b6103bd610cd6565b6104096103f43660046132f2565b60086020526000908152604090205460ff1681565b604051901515815260200161038c565b6103636104273660046133f9565b610d7b565b61037861043a3660046132f2565b6013602052600090815260409020546001600160a01b031681565b6103bd61046336600461330c565b611083565b6103636104763660046133c9565b6112b0565b6103636113fb565b6103786104913660046133c9565b611650565b6103636104a43660046132f2565b611660565b6000546001600160a01b0316610378565b6104096104c83660046132f2565b601f6020526000908152604090205460ff1681565b61036361179c565b6104096104f33660046132f2565b60056020526000908152604090205460ff1681565b61036361051636600461330c565b61187d565b6103786105293660046133c9565b6119dd565b61037861053c3660046133c9565b6119ed565b602154610378906001600160a01b031681565b6103bd60225481565b6103bd61056b3660046132f2565b60066020526000908152604090205481565b6103bd60035481565b6103786105943660046133c9565b6119fd565b6104096105a73660046132f2565b600b6020526000908152604090205460ff1681565b6103bd6105ca3660046132f2565b600f6020526000908152604090205481565b6103786105ea3660046133c9565b611a0d565b6103bd60245481565b6103bd6106063660046132f2565b60096020526000908152604090205481565b6104096106263660046132f2565b60116020526000908152604090205460ff1681565b6104096106493660046132f2565b600e6020526000908152604090205460ff1681565b6103bd61066c3660046132f2565b60196020526000908152604090205481565b6103bd61068c3660046132f2565b60166020526000908152604090205481565b6103786106ac3660046133c9565b611a1d565b6103bd6106bf36600461341b565b611a2d565b600254610378906001600160a01b031681565b6103bd6106e53660046132f2565b600c6020526000908152604090205481565b6103bd6107053660046132f2565b601c6020526000908152604090205481565b6103786107253660046133c9565b611d02565b602354610378906001600160a01b031681565b61036361074b3660046133f9565b611d12565b61040961075e3660046132f2565b60186020526000908152604090205460ff1681565b610409610781366004613355565b611ebd565b6104096107943660046132f2565b60156020526000908152604090205460ff1681565b6104096107b73660046132f2565b601b6020526000908152604090205460ff1681565b6103bd6107da3660046132f2565b602080526000908152604090205481565b6104096107f9366004613387565b6122e3565b6103bd60255481565b6103786108153660046133c9565b612c90565b6103bd6108283660046132f2565b60126020526000908152604090205481565b6001600160a01b03811660009081526005602052604090205460ff166108a75760405162461bcd60e51b815260206004820152601f60248201527f4e6f742061636365707465642061732061205265736572766520546f6b656e0060448201526064015b60405180910390fd5b336000908152600b602052604090205460ff1615156001146109155760405162461bcd60e51b815260206004820152602160248201527f4e6f7420617070726f76656420617320612052657365727665205370656e64656044820152603960f91b606482015260840161089e565b60006109218284611083565b60025460405163079cc67960e41b8152336004820152602481018390529192506001600160a01b0316906379cc679090604401600060405180830381600087803b15801561096e57600080fd5b505af1158015610982573d6000803e3d6000fd5b50506024546109949250905082612ca0565b60248190556040517f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6690600090a26109d66001600160a01b0383163385612ce2565b60408051848152602081018390526001600160a01b038416917fdf273cb619d95419a9cd0ec88123a0538c85064229baa6363788f743fff90deb91015b60405180910390a2505050565b60148181548110610a3057600080fd5b6000918252602090912001546001600160a01b0316905081565b6000546001600160a01b03163314610aaf5760405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865204d616e616760448201526132b960f11b606482015260840161089e565b600080546040516001600160a01b03909116907fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba908390a3600080546001600160a01b0319169055565b6001600160a01b0382166000908152600e602052604090205460ff1615610b88573360009081526018602052604090205460ff16610b835760405162461bcd60e51b815260206004820152602160248201527f4e6f7420617070726f766564206173204c6971756964697479204d616e6167656044820152603960f91b606482015260840161089e565b610be7565b3360009081526015602052604090205460ff16610be75760405162461bcd60e51b815260206004820152601f60248201527f4e6f7420617070726f7665642061732052657365727665204d616e6167657200604482015260640161089e565b6000610bf38383611083565b9050610bfd610cd6565b811115610c4c5760405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e742072657365727665730000000000000000000000604482015260640161089e565b602454610c599082612ca0565b60248190556040517f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6690600090a2610c9b6001600160a01b0384163384612ce2565b826001600160a01b03167f2bb2640731848fe9820ba48dbc978c1fc9bbd5f11b948bfab05b7dee3378fd8083604051610a1391815260200190565b6000610d76610d6d602554600260009054906101000a90046001600160a01b03166001600160a01b03166318160ddd6040518163ffffffff1660e01b815260040160206040518083038186803b158015610d2f57600080fd5b505afa158015610d43573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d6791906133e1565b90612ca0565b60245490612ca0565b905090565b336000908152601b602052604090205460ff16610dda5760405162461bcd60e51b815260206004820152601860248201527f4e6f7420617070726f766564206173206120446562746f720000000000000000604482015260640161089e565b6001600160a01b03811660009081526005602052604090205460ff16610e425760405162461bcd60e51b815260206004820152601f60248201527f4e6f742061636365707465642061732061205265736572766520546f6b656e00604482015260640161089e565b6000610e4e8284611083565b6021546040516370a0823160e01b81523360048201529192506000916001600160a01b03909116906370a082319060240160206040518083038186803b158015610e9757600080fd5b505afa158015610eab573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ecf91906133e1565b336000908152601d602052604081205491925090610eee908390612ca0565b905080831115610f405760405162461bcd60e51b815260206004820152601260248201527f457863656564732064656274206c696d69740000000000000000000000000000604482015260640161089e565b336000908152601d6020526040902054610f5a9084612d77565b336000908152601d6020526040902055602554610f779084612d77565b602555602454610f879084612ca0565b60248190556040517f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6690600090a260405163a9059cbb60e01b8152336004820152602481018690526001600160a01b0385169063a9059cbb90604401602060405180830381600087803b158015610ffd57600080fd5b505af1158015611011573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110359190613335565b5060408051868152602081018590526001600160a01b0386169133917f7e1a939bed137a819b5d2979822c67f877689f7a863d5e4cb57cdca97b2977d6910160405180910390a35050505050565b6001600160a01b03821660009081526005602052604081205460ff16156111d9576111d2836001600160a01b031663313ce5676040518163ffffffff1660e01b815260040160206040518083038186803b1580156110e057600080fd5b505afa1580156110f4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611118919061344f565b61112390600a61353a565b600254604080517f313ce56700000000000000000000000000000000000000000000000000000000815290516111cc926001600160a01b03169163313ce567916004808301926020929190829003018186803b15801561118257600080fd5b505afa158015611196573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111ba919061344f565b6111c590600a61353a565b8590612dd6565b90612e71565b90506112aa565b6001600160a01b0383166000908152600e602052604090205460ff16156112aa576001600160a01b03838116600081815260136020526040908190205490517f4249719f00000000000000000000000000000000000000000000000000000000815260048101929092526024820185905290911690634249719f9060440160206040518083038186803b15801561126f57600080fd5b505afa158015611283573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112a791906133e1565b90505b92915050565b336000908152601b602052604090205460ff1661130f5760405162461bcd60e51b815260206004820152601860248201527f4e6f7420617070726f766564206173206120446562746f720000000000000000604482015260640161089e565b60025460405163079cc67960e41b8152336004820152602481018390526001600160a01b03909116906379cc679090604401600060405180830381600087803b15801561135b57600080fd5b505af115801561136f573d6000803e3d6000fd5b5050336000908152601d602052604090205461138e9250905082612ca0565b336000908152601d60205260409020556025546113ab9082612ca0565b60255560025460408051838152602081018490526001600160a01b039092169133917fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309910160405180910390a350565b6000546001600160a01b031633146114605760405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865204d616e616760448201526132b960f11b606482015260840161089e565b6000805b60045481101561156e5761155a6115536004838154811061149557634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600480546001600160a01b0390921691859081106114cf57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546040516370a0823160e01b81523060048201526001600160a01b03909116906370a082319060240160206040518083038186803b15801561151b57600080fd5b505afa15801561152f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061046391906133e1565b8390612d77565b91508061156681613647565b915050611464565b5060005b600d548110156115f1576115dd611553600d83815481106115a357634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600d80546001600160a01b0390921691859081106114cf57634e487b7160e01b600052603260045260246000fd5b9150806115e981613647565b915050611572565b50602481905560405181907f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6690600090a260405181907fec691f09f6924b27932253f85caf99bacc30360cc0e50a1cc4d2acc24601446690600090a250565b600a8181548110610a3057600080fd5b6000546001600160a01b031633146116c55760405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865204d616e616760448201526132b960f11b606482015260840161089e565b6001600160a01b0381166117415760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f6464726573730000000000000000000000000000000000000000000000000000606482015260840161089e565b600080546040516001600160a01b03808516939216917fea8258f2d9ddb679928cf34b78cf645b7feda9acc828e4dd82d014eaae270eba91a3600180546001600160a01b0319166001600160a01b0392909216919091179055565b6001546001600160a01b0316331461181c5760405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a206d757374206265206e6577206f776e657220746f20707560448201527f6c6c000000000000000000000000000000000000000000000000000000000000606482015260840161089e565b600154600080546040516001600160a01b0393841693909116917faa151555690c956fc3ea32f106bb9f119b5237a061eaa8557cff3e51e3792c8d91a3600154600080546001600160a01b0319166001600160a01b03909216919091179055565b336000908152601f602052604090205460ff166118dc5760405162461bcd60e51b815260206004820152601e60248201527f4e6f7420617070726f76656420617320726577617264206d616e616765720000604482015260640161089e565b6118e4610cd6565b8111156119335760405162461bcd60e51b815260206004820152601560248201527f496e73756666696369656e742072657365727665730000000000000000000000604482015260640161089e565b6002546040516340c10f1960e01b81526001600160a01b03848116600483015260248201849052909116906340c10f1990604401600060405180830381600087803b15801561198157600080fd5b505af1158015611995573d6000803e3d6000fd5b50506040518381526001600160a01b03851692503391507ffa8ccab40e7da8146c2304cd0950334fd30a6ba093abe86261aa13911fed849c9060200160405180910390a35050565b60078181548110610a3057600080fd5b60178181548110610a3057600080fd5b601a8181548110610a3057600080fd5b60108181548110610a3057600080fd5b601e8181548110610a3057600080fd5b6001600160a01b03821660009081526005602052604081205460ff1680611a6c57506001600160a01b0383166000908152600e602052604090205460ff165b611ab85760405162461bcd60e51b815260206004820152601f60248201527f4e6f742061636365707465642061732061205265736572766520546f6b656e00604482015260640161089e565b611acd6001600160a01b038416333087612eb3565b6001600160a01b03831660009081526005602052604090205460ff1615611b78573360009081526008602052604090205460ff16611b735760405162461bcd60e51b815260206004820152602360248201527f4e6f7420617070726f76656420617320612052657365727665204465706f736960448201527f746f720000000000000000000000000000000000000000000000000000000000606482015260840161089e565b611bfd565b3360009081526011602052604090205460ff16611bfd5760405162461bcd60e51b815260206004820152602560248201527f4e6f7420617070726f7665642061732061204c6971756964697479204465706f60448201527f7369746f72000000000000000000000000000000000000000000000000000000606482015260840161089e565b6000611c098486611083565b9050611c158184612ca0565b6002546040516340c10f1960e01b8152336004820152602481018390529193506001600160a01b0316906340c10f1990604401600060405180830381600087803b158015611c6257600080fd5b505af1158015611c76573d6000803e3d6000fd5b5050602454611c889250905082612d77565b60248190556040517f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6690600090a260408051868152602081018390526001600160a01b038616917f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15910160405180910390a2509392505050565b60048181548110610a3057600080fd5b336000908152601b602052604090205460ff16611d715760405162461bcd60e51b815260206004820152601860248201527f4e6f7420617070726f766564206173206120446562746f720000000000000000604482015260640161089e565b6001600160a01b03811660009081526005602052604090205460ff16611dd95760405162461bcd60e51b815260206004820152601f60248201527f4e6f742061636365707465642061732061205265736572766520546f6b656e00604482015260640161089e565b611dee6001600160a01b038216333085612eb3565b6000611dfa8284611083565b336000908152601d6020526040902054909150611e179082612ca0565b336000908152601d6020526040902055602554611e349082612ca0565b602555602454611e449082612d77565b60248190556040517f93bb8edd35984706eee1b92541281f7f62d33c01c5b2ec0929a113603bd21d6690600090a260408051848152602081018390526001600160a01b0384169133917fc6d98eecfc9c78ab62c89a82950079b54874749f1f6f24090f7acc758bc2f309910160405180910390a3505050565b600080546001600160a01b03163314611f235760405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865204d616e616760448201526132b960f11b606482015260840161089e565b6001600160a01b038216611f3657600080fd5b6000836009811115611f5857634e487b7160e01b600052602160045260246000fd5b1415611f8a57600354611f6c904290612d77565b6001600160a01b03831660009081526009602052604090205561227e565b6001836009811115611fac57634e487b7160e01b600052602160045260246000fd5b1415611fde57600354611fc0904290612d77565b6001600160a01b0383166000908152600c602052604090205561227e565b600283600981111561200057634e487b7160e01b600052602160045260246000fd5b141561203257600354612014904290612d77565b6001600160a01b03831660009081526006602052604090205561227e565b600383600981111561205457634e487b7160e01b600052602160045260246000fd5b1415612091576003546120739061206c906002612dd6565b4290612d77565b6001600160a01b03831660009081526016602052604090205561227e565b60048360098111156120b357634e487b7160e01b600052602160045260246000fd5b14156120e5576003546120c7904290612d77565b6001600160a01b03831660009081526012602052604090205561227e565b600583600981111561210757634e487b7160e01b600052602160045260246000fd5b14156121395760035461211b904290612d77565b6001600160a01b0383166000908152600f602052604090205561227e565b600683600981111561215b57634e487b7160e01b600052602160045260246000fd5b1415612191576003546121739061206c906002612dd6565b6001600160a01b03831660009081526019602052604090205561227e565b60078360098111156121b357634e487b7160e01b600052602160045260246000fd5b14156121e5576003546121c7904290612d77565b6001600160a01b0383166000908152601c602052604090205561227e565b600883600981111561220757634e487b7160e01b600052602160045260246000fd5b14156122385760035461221b904290612d77565b6001600160a01b038316600090815260208052604090205561227e565b600983600981111561225a57634e487b7160e01b600052602160045260246000fd5b14156122765760035461226e904290612d77565b60225561227e565b5060006112aa565b82600981111561229e57634e487b7160e01b600052602160045260246000fd5b6040516001600160a01b03841681527f0e4f2c4b5bc209d509bc3d49348c787fefadc66a79351b470599ac0f5be52eaf9060200160405180910390a250600192915050565b600080546001600160a01b031633146123495760405162461bcd60e51b815260206004820152602260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865204d616e616760448201526132b960f11b606482015260840161089e565b6001600160a01b03831661235c57600080fd5b60008085600981111561237f57634e487b7160e01b600052602160045260246000fd5b141561243b576123926009600886612f0a565b1561240b576001600160a01b0384166000908152600960205260408120556123bb600785613009565b61240b57600780546001810182556000919091527fa66cc928b5edb82af9bd49922954155ab7b0942694bea4ce44661d9a8736c6880180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600860205260409020805460ff81161560ff199091168117909155612c20565b600185600981111561245d57634e487b7160e01b600052602160045260246000fd5b141561251957612470600c600b86612f0a565b156124e9576001600160a01b0384166000908152600c6020526040812055612499600a85613009565b6124e957600a80546001810182556000919091527fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600b60205260409020805460ff81161560ff199091168117909155612c20565b600285600981111561253b57634e487b7160e01b600052602160045260246000fd5b14156125f75761254e6006600586612f0a565b156125c7576001600160a01b038416600090815260066020526040812055612577600485613009565b6125c757600480546001810182556000919091527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152600560205260409020805460ff81161560ff199091168117909155612c20565b600385600981111561261957634e487b7160e01b600052602160045260246000fd5b14156127125761262c6016601586612f0a565b156126e257601480546001810182557fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b0387169081179091556000908152601660205260408120556126929085613009565b6126e257601480546001810182556000919091527fce6d7b5282bd9a3661ae061feed1dbda4e52ab073b1f9285be6e155d9c38d4ec0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601560205260409020805460ff81161560ff199091168117909155612c20565b600485600981111561273457634e487b7160e01b600052602160045260246000fd5b141561282d576127476012601186612f0a565b156127fd57601080546001810182557f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0387169081179091556000908152601260205260408120556127ad9085613009565b6127fd57601080546001810182556000919091527f1b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae6720180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601160205260409020805460ff81161560ff199091168117909155612c20565b600585600981111561284f57634e487b7160e01b600052602160045260246000fd5b141561292d57612862600f600e86612f0a565b156128db576001600160a01b0384166000908152600f602052604081205561288b600d85613009565b6128db57600d80546001810182556000919091527fd7b6990105719101dabeb77144f2a3385c8033acd3af97e9423a695e81ad1eb50180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b038381166000908152600e60209081526040808320805460ff81161560ff199091168117909155601390925290912080546001600160a01b03191692851692909217909155612c20565b600685600981111561294f57634e487b7160e01b600052602160045260246000fd5b1415612a0b576129626019601886612f0a565b156129db576001600160a01b03841660009081526019602052604081205561298b601785613009565b6129db57601780546001810182556000919091527fc624b66cc0138b8fabc209247f72d758e1cf3343756d543badbf24212bed8c150180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601860205260409020805460ff81161560ff199091168117909155612c20565b6007856009811115612a2d57634e487b7160e01b600052602160045260246000fd5b1415612ae957612a40601c601b86612f0a565b15612ab9576001600160a01b0384166000908152601c6020526040812055612a69601a85613009565b612ab957601a80546001810182556000919091527f057c384a7d1c54f3a1b2e5e67b2617b8224fdfd1ea7234eea573a6ff665ff63e0180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601b60205260409020805460ff81161560ff199091168117909155612c20565b6008856009811115612b0b57634e487b7160e01b600052602160045260246000fd5b1415612bc657612b1e6020601f86612f0a565b15612b96576001600160a01b0384166000908152602080526040812055612b46601e85613009565b612b9657601e80546001810182556000919091527f50bb669a95c7b50b7e8a6f09454034b2b14cf2b85c730dca9a539ca82cb6e3500180546001600160a01b0319166001600160a01b0386161790555b506001600160a01b0383166000908152601f60205260409020805460ff81161560ff199091168117909155612c20565b6009856009811115612be857634e487b7160e01b600052602160045260246000fd5b1415612c1657506000602255602180546001600160a01b0319166001600160a01b0385161790556001612c20565b6000915050612c89565b846009811115612c4057634e487b7160e01b600052602160045260246000fd5b604080516001600160a01b038716815283151560208201527f0dcacb7e392f3d6a216ed2660e3dcfd40b7793d33591db2ba185a6b8e44fc477910160405180910390a260019150505b9392505050565b600d8181548110610a3057600080fd5b60006112a783836040518060400160405280601e81526020017f536166654d6174683a207375627472616374696f6e206f766572666c6f770000815250613077565b6040516001600160a01b038316602482015260448101829052612d7290849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167fffffffff00000000000000000000000000000000000000000000000000000000909316929092179091526130b1565b505050565b600080612d8483856134bf565b9050838110156112a75760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f770000000000604482015260640161089e565b600082612de5575060006112aa565b6000612df183856135e5565b905082612dfe85836134d7565b146112a75760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f60448201527f7700000000000000000000000000000000000000000000000000000000000000606482015260840161089e565b60006112a783836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f000000000000815250613196565b6040516001600160a01b0380851660248301528316604482015260648101829052612f049085907f23b872dd0000000000000000000000000000000000000000000000000000000090608401612d0e565b50505050565b6001600160a01b03811660009081526020839052604081205460ff16612fff576001600160a01b038216600090815260208590526040902054612f8f5760405162461bcd60e51b815260206004820152600a60248201527f4d75737420717565756500000000000000000000000000000000000000000000604482015260640161089e565b6001600160a01b038216600090815260208590526040902054421015612ff75760405162461bcd60e51b815260206004820152601160248201527f5175657565206e6f742065787069726564000000000000000000000000000000604482015260640161089e565b506001612c89565b5060009392505050565b6000805b8354811015612fff57826001600160a01b031684828154811061304057634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156130655760019150506112aa565b8061306f81613647565b91505061300d565b6000818484111561309b5760405162461bcd60e51b815260040161089e919061348c565b5060006130a88486613604565b95945050505050565b6000613106826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b03166131c49092919063ffffffff16565b805190915015612d7257808060200190518101906131249190613335565b612d725760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e60448201527f6f74207375636365656400000000000000000000000000000000000000000000606482015260840161089e565b600081836131b75760405162461bcd60e51b815260040161089e919061348c565b5060006130a884866134d7565b60606131d384846000856131db565b949350505050565b6060843b61322b5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e7472616374000000604482015260640161089e565b600080866001600160a01b031685876040516132479190613470565b60006040518083038185875af1925050503d8060008114613284576040519150601f19603f3d011682016040523d82523d6000602084013e613289565b606091505b5091509150811561329d5791506131d39050565b8051156132ad5780518082602001fd5b8360405162461bcd60e51b815260040161089e919061348c565b80356001600160a01b03811681146132de57600080fd5b919050565b8035600a81106132de57600080fd5b600060208284031215613303578081fd5b6112a7826132c7565b6000806040838503121561331e578081fd5b613327836132c7565b946020939093013593505050565b600060208284031215613346578081fd5b815180151581146112a7578182fd5b60008060408385031215613367578182fd5b613370836132e3565b915061337e602084016132c7565b90509250929050565b60008060006060848603121561339b578081fd5b6133a4846132e3565b92506133b2602085016132c7565b91506133c0604085016132c7565b90509250925092565b6000602082840312156133da578081fd5b5035919050565b6000602082840312156133f2578081fd5b5051919050565b6000806040838503121561340b578182fd5b8235915061337e602084016132c7565b60008060006060848603121561342f578283fd5b8335925061343f602085016132c7565b9150604084013590509250925092565b600060208284031215613460578081fd5b815160ff811681146112a7578182fd5b6000825161348281846020870161361b565b9190910192915050565b60208152600082518060208401526134ab81604085016020870161361b565b601f01601f19169190910160400192915050565b600082198211156134d2576134d2613662565b500190565b6000826134f257634e487b7160e01b81526012600452602481fd5b500490565b600181815b8085111561353257816000190482111561351857613518613662565b8085161561352557918102915b93841c93908002906134fc565b509250929050565b60006112a760ff841683600082613553575060016112aa565b81613560575060006112aa565b816001811461357657600281146135805761359c565b60019150506112aa565b60ff84111561359157613591613662565b50506001821b6112aa565b5060208310610133831016604e8410600b84101617156135bf575081810a6112aa565b6135c983836134f7565b80600019048211156135dd576135dd613662565b029392505050565b60008160001904831182151516156135ff576135ff613662565b500290565b60008282101561361657613616613662565b500390565b60005b8381101561363657818101518382015260200161361e565b83811115612f045750506000910152565b600060001982141561365b5761365b613662565b5060010190565b634e487b7160e01b600052601160045260246000fdfea264697066735822122044207bf3a3b65964f478cec3e19ee40d3045da6c14e73ede9034c1d04550cb5364736f6c63430008040033000000000000000000000000aa2439dbad718c9329a5893a51a708c015f76346000000000000000000000000321e7092a180bb43555132ec53aaa65a5bf842510000000000000000000000007bc2561d69b56fae9760df394a9fa9202c5f1f110000000000000000000000001080c8690a473e00edf300807098de92d80d849b0000000000000000000000000000000000000000000000000000000000000000

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

000000000000000000000000aa2439dbad718c9329a5893a51a708c015f76346000000000000000000000000321e7092a180bb43555132ec53aaa65a5bf842510000000000000000000000007bc2561d69b56fae9760df394a9fa9202c5f1f110000000000000000000000001080c8690a473e00edf300807098de92d80d849b0000000000000000000000000000000000000000000000000000000000000000

-----Decoded View---------------
Arg [0] : _OTWO (address): 0xaa2439dbad718c9329a5893a51a708c015f76346
Arg [1] : _GOHM (address): 0x321e7092a180bb43555132ec53aaa65a5bf84251
Arg [2] : _OTWOGOHM (address): 0x7bc2561d69b56fae9760df394a9fa9202c5f1f11
Arg [3] : _gOHMBondCalculator (address): 0x1080c8690a473e00edf300807098de92d80d849b
Arg [4] : _secondsNeededForQueue (uint256): 0

-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 000000000000000000000000aa2439dbad718c9329a5893a51a708c015f76346
Arg [1] : 000000000000000000000000321e7092a180bb43555132ec53aaa65a5bf84251
Arg [2] : 0000000000000000000000007bc2561d69b56fae9760df394a9fa9202c5f1f11
Arg [3] : 0000000000000000000000001080c8690a473e00edf300807098de92d80d849b
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000000


Deployed ByteCode Sourcemap

12309:19498:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17766:624;;;;;;:::i;:::-;;:::i;:::-;;14726:32;;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;3545:55:1;;;3527:74;;3515:2;3500:18;14726:32:0;;;;;;;;4447:159;;;:::i;15438:47::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;12523:25:1;;;12511:2;12496:18;15438:47:0;12478:76:1;20880:668:0;;;;;;:::i;:::-;;:::i;22099:147::-;;;:::i;13748:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;4794:14:1;;4787:22;4769:41;;4757:2;4742:18;13748:52:0;4724:92:1;18535:847:0;;;;;;:::i;:::-;;:::i;14627:51::-;;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;14627:51:0;;;23230:406;;;;;;:::i;:::-;;:::i;20343:392::-;;;;;;:::i;:::-;;:::i;22399:667::-;;;:::i;13901:32::-;;;;;;:::i;:::-;;:::i;4614:261::-;;;;;;:::i;:::-;;:::i;4218:90::-;4267:7;4294:6;-1:-1:-1;;;;;4294:6:0;4218:90;;15588:49;;;;;;:::i;:::-;;;;;;;;;;;;;;;;4883:221;;;:::i;13506:48::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;21629:362;;;;;;:::i;:::-;;:::i;13651:34::-;;;;;;:::i;:::-;;:::i;14970:::-;;;;;;:::i;:::-;;:::i;15735:20::-;;;;;-1:-1:-1;;;;;15735:20:0;;;15762:22;;;;;;13561:51;;;;;;:::i;:::-;;;;;;;;;;;;;;13389:33;;;;;;15220:24;;;;;;:::i;:::-;;:::i;13996:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14279:53;;;;;;:::i;:::-;;;;;;;;;;;;;;14371:36;;;;;;:::i;:::-;;:::i;15855:25::-;;;;;;13807:55;;;;;;:::i;:::-;;;;;;;;;;;;;;14470:54;;;;;;:::i;:::-;;;;;;;;;;;;;;;;14222:50;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15126:55;;;;;;:::i;:::-;;;;;;;;;;;;;;14878:53;;;;;;:::i;:::-;;;;;;;;;;;;;;15494:31;;;;;;:::i;:::-;;:::i;16722:892::-;;;;;;:::i;:::-;;:::i;13363:19::-;;;;;-1:-1:-1;;;;;13363:19:0;;;14053:53;;;;;;:::i;:::-;;;;;;;;;;;;;;15356:45;;;;;;:::i;:::-;;;;;;;;;;;;;;13431:30;;;;;;:::i;:::-;;:::i;15827:19::-;;;;;-1:-1:-1;;;;;15827:19:0;;;19549:662;;;;;;:::i;:::-;;:::i;15067:52::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;23812:1827;;;;;;:::i;:::-;;:::i;14821:50::-;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15307:42;;;;;;:::i;:::-;;;;;;;;;;;;;;;;15644:52;;;;;;:::i;:::-;;;;;;;;;;;;;;25849:4824;;;;;;:::i;:::-;;:::i;15920:21::-;;;;;;14145:32;;;;;;:::i;:::-;;:::i;14531:57::-;;;;;;:::i;:::-;;;;;;;;;;;;;;17766:624;-1:-1:-1;;;;;17845:24:0;;;;;;:14;:24;;;;;;;;17836:70;;;;-1:-1:-1;;;17836:70:0;;11461:2:1;17836:70:0;;;11443:21:1;11500:2;11480:18;;;11473:30;11539:33;11519:18;;;11512:61;11590:18;;17836:70:0;;;;;;;;;17989:10;17971:30;;;;:16;:30;;;;;;;;:38;;:30;:38;17962:86;;;;-1:-1:-1;;;17962:86:0;;9958:2:1;17962:86:0;;;9940:21:1;9997:2;9977:18;;;9970:30;10036:34;10016:18;;;10009:62;-1:-1:-1;;;10087:18:1;;;10080:31;10128:19;;17962:86:0;9930:223:1;17962:86:0;18061:10;18074:26;18083:6;18091:7;18074;:26::i;:::-;18123:4;;18111:48;;-1:-1:-1;;;18111:48:0;;18140:10;18111:48;;;4501:74:1;4591:18;;;4584:34;;;18061:39:0;;-1:-1:-1;;;;;;18123:4:0;;18111:27;;4474:18:1;;18111:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;18189:13:0;;:26;;-1:-1:-1;18189:13:0;-1:-1:-1;18208:5:0;18189:17;:26::i;:::-;18173:13;:42;;;18231:32;;;;;;;18276:52;-1:-1:-1;;;;;18276:29:0;;18307:10;18319:7;18276:29;:52::i;:::-;18346:36;;;12733:25:1;;;12789:2;12774:18;;12767:34;;;-1:-1:-1;;;;;18346:36:0;;;;;12706:18:1;18346:36:0;;;;;;;;17766:624;;;:::o;14726:32::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;14726:32:0;;-1:-1:-1;14726:32:0;:::o;4447:159::-;4359:6;;-1:-1:-1;;;;;4359:6:0;4369:10;4359:20;4350:69;;;;-1:-1:-1;;;4350:69:0;;9153:2:1;4350:69:0;;;9135:21:1;9192:2;9172:18;;;9165:30;9231:34;9211:18;;;9204:62;-1:-1:-1;;;9282:18:1;;;9275:32;9324:19;;4350:69:0;9125:224:1;4350:69:0;4564:1:::1;4548:6:::0;;4531:37:::1;::::0;-1:-1:-1;;;;;4548:6:0;;::::1;::::0;4531:37:::1;::::0;4564:1;;4531:37:::1;4596:1;4579:19:::0;;-1:-1:-1;;;;;;4579:19:0::1;::::0;;4447:159::o;20880:668::-;-1:-1:-1;;;;;20952:26:0;;;;;;:16;:26;;;;;;;;20948:249;;;21025:10;21005:32;;;;:18;:32;;;;;;;;20996:80;;;;-1:-1:-1;;;20996:80:0;;7286:2:1;20996:80:0;;;7268:21:1;7325:2;7305:18;;;7298:30;7364:34;7344:18;;;7337:62;-1:-1:-1;;;7415:18:1;;;7408:31;7456:19;;20996:80:0;7258:223:1;20996:80:0;20948:249;;;21136:10;21118:30;;;;:16;:30;;;;;;;;21109:76;;;;-1:-1:-1;;;21109:76:0;;5411:2:1;21109:76:0;;;5393:21:1;5450:2;5430:18;;;5423:30;5489:33;5469:18;;;5462:61;5540:18;;21109:76:0;5383:181:1;21109:76:0;21209:10;21222:26;21231:6;21239:7;21222;:26::i;:::-;21209:39;;21277:16;:14;:16::i;:::-;21268:5;:25;;21259:61;;;;-1:-1:-1;;;21259:61:0;;8803:2:1;21259:61:0;;;8785:21:1;8842:2;8822:18;;;8815:30;8881:23;8861:18;;;8854:51;8922:18;;21259:61:0;8775:171:1;21259:61:0;21349:13;;:26;;21368:5;21349:17;:26::i;:::-;21333:13;:42;;;21391:32;;;;;;;21436:52;-1:-1:-1;;;;;21436:29:0;;21467:10;21479:7;21436:29;:52::i;:::-;21523:6;-1:-1:-1;;;;;21506:34:0;;21531:7;21506:34;;;;12523:25:1;;12511:2;12496:18;;12478:76;22099:147:0;22147:4;22172:66;22191:45;22225:9;;22199:4;;;;;;;;;-1:-1:-1;;;;;22199:4:0;-1:-1:-1;;;;;22191:26:0;;:28;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:32;;:45::i;:::-;22172:13;;;:17;:66::i;:::-;22165:73;;22099:147;:::o;18535:847::-;18625:10;18615:22;;;;:8;:22;;;;;;;;18606:61;;;;-1:-1:-1;;;18606:61:0;;7688:2:1;18606:61:0;;;7670:21:1;7727:2;7707:18;;;7700:30;7766:26;7746:18;;;7739:54;7810:18;;18606:61:0;7660:174:1;18606:61:0;-1:-1:-1;;;;;18687:24:0;;;;;;:14;:24;;;;;;;;18678:70;;;;-1:-1:-1;;;18678:70:0;;11461:2:1;18678:70:0;;;11443:21:1;11500:2;11480:18;;;11473:30;11539:33;11519:18;;;11512:61;11590:18;;18678:70:0;11433:181:1;18678:70:0;18761:10;18774:26;18783:6;18791:7;18774;:26::i;:::-;18840:5;;18832:39;;-1:-1:-1;;;18832:39:0;;18859:10;18832:39;;;3527:74:1;18761:39:0;;-1:-1:-1;18813:16:0;;-1:-1:-1;;;;;18840:5:0;;;;18832:25;;3500:18:1;;18832:39:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;18936:10;18883:18;18921:27;;;:13;:27;;;;;;18813:58;;-1:-1:-1;18883:18:0;18904:46;;18813:58;;18904:15;:46::i;:::-;18883:67;;18979:13;18970:5;:22;;18961:55;;;;-1:-1:-1;;;18961:55:0;;12232:2:1;18961:55:0;;;12214:21:1;12271:2;12251:18;;;12244:30;12310:20;12290:18;;;12283:48;12348:18;;18961:55:0;12204:168:1;18961:55:0;19074:10;19059:27;;;;:13;:27;;;;;;:40;;19092:5;19059:31;:40::i;:::-;19044:10;19029:27;;;;:13;:27;;;;;:70;19122:9;;:22;;19137:5;19122:13;:22::i;:::-;19110:9;:34;19173:13;;:26;;19192:5;19173:17;:26::i;:::-;19157:13;:42;;;19215:32;;;;;;;19260:48;;-1:-1:-1;;;19260:48:0;;19287:10;19260:48;;;4501:74:1;4591:18;;;4584:34;;;-1:-1:-1;;;;;19260:25:0;;;;;4474:18:1;;19260:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;19326:48:0;;;12733:25:1;;;12789:2;12774:18;;12767:34;;;-1:-1:-1;;;;;19326:48:0;;;19338:10;;19326:48;;12706:18:1;19326:48:0;;;;;;;18535:847;;;;;:::o;23230:406::-;-1:-1:-1;;;;;23331:24:0;;23301:11;23331:24;;;:14;:24;;;;;;;;23326:303;;;23382:87;23448:6;-1:-1:-1;;;;;23440:25:0;;:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23434:33;;:2;:33;:::i;:::-;23409:4;;23401:25;;;;;;;;23382:46;;-1:-1:-1;;;;;23409:4:0;;23401:23;;:25;;;;;;;;;;;;;;23409:4;23401:25;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23395:31;;:2;:31;:::i;:::-;23382:7;;:11;:46::i;:::-;:50;;:87::i;:::-;23373:96;;23326:303;;;-1:-1:-1;;;;;23492:26:0;;;;;;:16;:26;;;;;;;;23487:142;;;-1:-1:-1;;;;;23562:24:0;;;;;;;:14;:24;;;;;;;;23545:72;;;;;;;;4501:74:1;;;;4591:18;;;4584:34;;;23562:24:0;;;;23545:53;;4474:18:1;;23545:72:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;23536:81;;23487:142;23230:406;;;;:::o;20343:392::-;20425:10;20415:22;;;;:8;:22;;;;;;;;20406:61;;;;-1:-1:-1;;;20406:61:0;;7688:2:1;20406:61:0;;;7670:21:1;7727:2;7707:18;;;7700:30;7766:26;7746:18;;;7739:54;7810:18;;20406:61:0;7660:174:1;20406:61:0;20492:4;;20480:50;;-1:-1:-1;;;20480:50:0;;20509:10;20480:50;;;4501:74:1;4591:18;;;4584:34;;;-1:-1:-1;;;;;20492:4:0;;;;20480:27;;4474:18:1;;20480:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;20588:10:0;20573:27;;;;:13;:27;;;;;;:42;;-1:-1:-1;20573:27:0;-1:-1:-1;20606:7:0;20573:31;:42::i;:::-;20558:10;20543:27;;;;:13;:27;;;;;:72;20638:9;;:24;;20653:7;20638:13;:24::i;:::-;20626:9;:36;20703:4;;20680:47;;;12733:25:1;;;12789:2;12774:18;;12767:34;;;-1:-1:-1;;;;;20703:4:0;;;;20691:10;;20680:47;;12706:18:1;20680:47:0;;;;;;;20343:392;:::o;22399:667::-;4359:6;;-1:-1:-1;;;;;4359:6:0;4369:10;4359:20;4350:69;;;;-1:-1:-1;;;4350:69:0;;9153:2:1;4350:69:0;;;9135:21:1;9192:2;9172:18;;;9165:30;9231:34;9211:18;;;9204:62;-1:-1:-1;;;9282:18:1;;;9275:32;9324:19;;4350:69:0;9125:224:1;4350:69:0;22458:13:::1;::::0;22482:220:::1;22503:13;:20:::0;22499:24;::::1;22482:220;;;22557:133;22589:86;22598:13;22613:1;22598:18;;;;;;-1:-1:-1::0;;;22598:18:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22626:13:::1;:18:::0;;-1:-1:-1;;;;;22598:18:0;;::::1;::::0;22641:1;;22626:18;::::1;;;-1:-1:-1::0;;;22626:18:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22618:55:::1;::::0;-1:-1:-1;;;22618:55:0;;22666:4:::1;22618:55;::::0;::::1;3527:74:1::0;-1:-1:-1;;;;;22626:18:0;;::::1;::::0;22618:38:::1;::::0;3500:18:1;;22618:55:0::1;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;22589:86::-;22557:8:::0;;:12:::1;:133::i;:::-;22546:144:::0;-1:-1:-1;22525:3:0;::::1;::::0;::::1;:::i;:::-;;;;22482:220;;;;22717:6;22712:226;22733:15;:22:::0;22729:26;::::1;22712:226;;;22789:137;22821:90;22830:15;22847:1;22830:20;;;;;;-1:-1:-1::0;;;22830:20:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;22860:15:::1;:20:::0;;-1:-1:-1;;;;;22830:20:0;;::::1;::::0;22877:1;;22860:20;::::1;;;-1:-1:-1::0;;;22860:20:0::1;;;;;;;;22789:137;22778:148:::0;-1:-1:-1;22757:3:0;::::1;::::0;::::1;:::i;:::-;;;;22712:226;;;-1:-1:-1::0;22948:13:0::1;:24:::0;;;22988:27:::1;::::0;22964:8;;22988:27:::1;::::0;;;::::1;23031;::::0;23048:8;;23031:27:::1;::::0;;;::::1;4430:1;22399:667::o:0;13901:32::-;;;;;;;;;;;;4614:261;4359:6;;-1:-1:-1;;;;;4359:6:0;4369:10;4359:20;4350:69;;;;-1:-1:-1;;;4350:69:0;;9153:2:1;4350:69:0;;;9135:21:1;9192:2;9172:18;;;9165:30;9231:34;9211:18;;;9204:62;-1:-1:-1;;;9282:18:1;;;9275:32;9324:19;;4350:69:0;9125:224:1;4350:69:0;-1:-1:-1;;;;;4717:23:0;::::1;4708:75;;;::::0;-1:-1:-1;;;4708:75:0;;6117:2:1;4708:75:0::1;::::0;::::1;6099:21:1::0;6156:2;6136:18;;;6129:30;6195:34;6175:18;;;6168:62;6266:8;6246:18;;;6239:36;6292:19;;4708:75:0::1;6089:228:1::0;4708:75:0::1;4816:6;::::0;;4799:36:::1;::::0;-1:-1:-1;;;;;4799:36:0;;::::1;::::0;4816:6;::::1;::::0;4799:36:::1;::::0;::::1;4846:9;:21:::0;;-1:-1:-1;;;;;;4846:21:0::1;-1:-1:-1::0;;;;;4846:21:0;;;::::1;::::0;;;::::1;::::0;;4614:261::o;4883:221::-;4967:9;;-1:-1:-1;;;;;4967:9:0;4953:10;:23;4944:71;;;;-1:-1:-1;;;4944:71:0;;8041:2:1;4944:71:0;;;8023:21:1;8080:2;8060:18;;;8053:30;8119:34;8099:18;;;8092:62;8190:4;8170:18;;;8163:32;8212:19;;4944:71:0;8013:224:1;4944:71:0;5056:9;;;5048:6;;5031:36;;-1:-1:-1;;;;;5056:9:0;;;;5048:6;;;;5031:36;;;5087:9;;;5078:18;;-1:-1:-1;;;;;;5078:18:0;-1:-1:-1;;;;;5087:9:0;;;5078:18;;;;;;4883:221::o;21629:362::-;21732:10;21715:29;;;;:15;:29;;;;;;;;21706:74;;;;-1:-1:-1;;;21706:74:0;;8444:2:1;21706:74:0;;;8426:21:1;8483:2;8463:18;;;8456:30;8522:32;8502:18;;;8495:60;8572:18;;21706:74:0;8416:180:1;21706:74:0;21811:16;:14;:16::i;:::-;21800:7;:27;;21791:63;;;;-1:-1:-1;;;21791:63:0;;8803:2:1;21791:63:0;;;8785:21:1;8842:2;8822:18;;;8815:30;8881:23;8861:18;;;8854:51;8922:18;;21791:63:0;8775:171:1;21791:63:0;21883:4;;21867:50;;-1:-1:-1;;;21867:50:0;;-1:-1:-1;;;;;4519:55:1;;;21867:50:0;;;4501:74:1;4591:18;;;4584:34;;;21883:4:0;;;;21867:27;;4474:18:1;;21867:50:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;21935:48:0;;12523:25:1;;;-1:-1:-1;;;;;21935:48:0;;;-1:-1:-1;21950:10:0;;-1:-1:-1;21935:48:0;;12511:2:1;12496:18;21935:48:0;;;;;;;21629:362;;:::o;13651:34::-;;;;;;;;;;;;14970;;;;;;;;;;;;15220:24;;;;;;;;;;;;14371:36;;;;;;;;;;;;15494:31;;;;;;;;;;;;16722:892;-1:-1:-1;;;;;16837:24:0;;16804:10;16837:24;;;:14;:24;;;;;;;;;:54;;-1:-1:-1;;;;;;16865:26:0;;;;;;:16;:26;;;;;;;;16837:54;16828:100;;;;-1:-1:-1;;;16828:100:0;;11461:2:1;16828:100:0;;;11443:21:1;11500:2;11480:18;;;11473:30;11539:33;11519:18;;;11512:61;11590:18;;16828:100:0;11433:181:1;16828:100:0;16939:71;-1:-1:-1;;;;;16939:33:0;;16974:10;16994:4;17001:7;16939:33;:71::i;:::-;-1:-1:-1;;;;;17028:24:0;;;;;;:14;:24;;;;;;;;17023:260;;;17099:10;17079:32;;;;:18;:32;;;;;;;;17070:82;;;;-1:-1:-1;;;17070:82:0;;10360:2:1;17070:82:0;;;10342:21:1;10399:2;10379:18;;;10372:30;10438:34;10418:18;;;10411:62;10509:5;10489:18;;;10482:33;10532:19;;17070:82:0;10332:225:1;17070:82:0;17023:260;;;17216:10;17194:34;;;;:20;:34;;;;;;;;17185:86;;;;-1:-1:-1;;;17185:86:0;;6524:2:1;17185:86:0;;;6506:21:1;6563:2;6543:18;;;6536:30;6602:34;6582:18;;;6575:62;6673:7;6653:18;;;6646:35;6698:19;;17185:86:0;6496:227:1;17185:86:0;17295:10;17308:26;17317:6;17325:7;17308;:26::i;:::-;17295:39;-1:-1:-1;17355:20:0;17295:39;17366:7;17355:9;:20::i;:::-;17404:4;;17388:48;;-1:-1:-1;;;17388:48:0;;17417:10;17388:48;;;4501:74:1;4591:18;;;4584:34;;;17347:28:0;;-1:-1:-1;;;;;;17404:4:0;;17388:27;;4474:18:1;;17388:48:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;17471:13:0;;:26;;-1:-1:-1;17471:13:0;-1:-1:-1;17490:5:0;17471:17;:26::i;:::-;17455:13;:42;;;17523:32;;;;;;;17573:33;;;12733:25:1;;;12789:2;12774:18;;12767:34;;;-1:-1:-1;;;;;17573:33:0;;;;;12706:18:1;17573:33:0;;;;;;;16722:892;;;;;;:::o;13431:30::-;;;;;;;;;;;;19549:662;19650:10;19640:22;;;;:8;:22;;;;;;;;19631:61;;;;-1:-1:-1;;;19631:61:0;;7688:2:1;19631:61:0;;;7670:21:1;7727:2;7707:18;;;7700:30;7766:26;7746:18;;;7739:54;7810:18;;19631:61:0;7660:174:1;19631:61:0;-1:-1:-1;;;;;19712:24:0;;;;;;:14;:24;;;;;;;;19703:70;;;;-1:-1:-1;;;19703:70:0;;11461:2:1;19703:70:0;;;11443:21:1;11500:2;11480:18;;;11473:30;11539:33;11519:18;;;11512:61;11590:18;;19703:70:0;11433:181:1;19703:70:0;19786:71;-1:-1:-1;;;;;19786:33:0;;19821:10;19841:4;19848:7;19786:33;:71::i;:::-;19870:10;19883:26;19892:6;19900:7;19883;:26::i;:::-;19965:10;19950:27;;;;:13;:27;;;;;;19870:39;;-1:-1:-1;19950:40:0;;19870:39;19950:31;:40::i;:::-;19935:10;19920:27;;;;:13;:27;;;;;:70;20013:9;;:22;;20028:5;20013:13;:22::i;:::-;20001:9;:34;20064:13;;:26;;20083:5;20064:17;:26::i;:::-;20048:13;:42;;;20106:32;;;;;;;20156:47;;;12733:25:1;;;12789:2;12774:18;;12767:34;;;-1:-1:-1;;;;;20156:47:0;;;20167:10;;20156:47;;12706:18:1;20156:47:0;;;;;;;19549:662;;;:::o;23812:1827::-;23900:4;4359:6;;-1:-1:-1;;;;;4359:6:0;4369:10;4359:20;4350:69;;;;-1:-1:-1;;;4350:69:0;;9153:2:1;4350:69:0;;;9135:21:1;9192:2;9172:18;;;9165:30;9231:34;9211:18;;;9204:62;-1:-1:-1;;;9282:18:1;;;9275:32;9324:19;;4350:69:0;9125:224:1;4350:69:0;-1:-1:-1;;;;;23927:22:0;::::1;23918:33;;;::::0;::::1;;23980:25;23967:9;:38;;;;;;-1:-1:-1::0;;;23967:38:0::1;;;;;;;;;;23962:1594;;;24085:21;::::0;24064:44:::1;::::0;:15:::1;::::0;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;24028:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:80;23962:1594:::1;;;24144:23;24131:9;:36;;;;;;-1:-1:-1::0;;;24131:36:0::1;;;;;;;;;;24126:1430;;;24245:21;::::0;24224:44:::1;::::0;:15:::1;::::0;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;24190:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:78;24126:1430:::1;;;24304:21;24291:9;:34;;;;;;-1:-1:-1::0;;;24291:34:0::1;;;;;;;;;;24286:1270;;;24401:21;::::0;24380:44:::1;::::0;:15:::1;::::0;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;24348:29:0;::::1;;::::0;;;:17:::1;:29;::::0;;;;:76;24286:1270:::1;;;24460:23;24447:9;:36;;;;;;-1:-1:-1::0;;;24447:36:0::1;;;;;;;;;;24442:1114;;;24561:21;::::0;24540:53:::1;::::0;24561:30:::1;::::0;24588:1:::1;24561:25;:30::i;:::-;24540:15;::::0;:19:::1;:53::i;:::-;-1:-1:-1::0;;;;;24506:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:87;24442:1114:::1;;;24629:27;24616:9;:40;;;;;;-1:-1:-1::0;;;24616:40:0::1;;;;;;;;;;24611:945;;;24738:21;::::0;24717:44:::1;::::0;:15:::1;::::0;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;24679:35:0;::::1;;::::0;;;:23:::1;:35;::::0;;;;:82;24611:945:::1;;;24797:23;24784:9;:36;;;;;;-1:-1:-1::0;;;24784:36:0::1;;;;;;;;;;24779:777;;;24898:21;::::0;24877:44:::1;::::0;:15:::1;::::0;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;24843:31:0;::::1;;::::0;;;:19:::1;:31;::::0;;;;:78;24779:777:::1;;;24957:25;24944:9;:38;;;;;;-1:-1:-1::0;;;24944:38:0::1;;;;;;;;;;24939:617;;;25062:21;::::0;25041:53:::1;::::0;25062:30:::1;::::0;25089:1:::1;25062:25;:30::i;25041:53::-;-1:-1:-1::0;;;;;25005:33:0;::::1;;::::0;;;:21:::1;:33;::::0;;;;:89;24939:617:::1;;;25130:15;25117:9;:28;;;;;;-1:-1:-1::0;;;25117:28:0::1;;;;;;;;;;25112:444;;;25215:21;::::0;25194:44:::1;::::0;:15:::1;::::0;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;25168:23:0;::::1;;::::0;;;:11:::1;:23;::::0;;;;:70;25112:444:::1;;;25274:22;25261:9;:35;;;;;;-1:-1:-1::0;;;25261:35:0::1;;;;;;;;;;25256:300;;;25373:21;::::0;25352:44:::1;::::0;:15:::1;::::0;:19:::1;:44::i;:::-;-1:-1:-1::0;;;;;25319:30:0;::::1;;::::0;;;:18:::1;:30:::0;;;;;:77;25256:300:::1;;;25432:14;25419:9;:27;;;;;;-1:-1:-1::0;;;25419:27:0::1;;;;;;;;;;25414:142;;;25503:21;::::0;25482:44:::1;::::0;:15:::1;::::0;:19:::1;:44::i;:::-;25469:10;:57:::0;25414:142:::1;;;-1:-1:-1::0;25551:5:0::1;25544:12;;25414:142;25588:9;25574:35;;;;;;-1:-1:-1::0;;;25574:35:0::1;;;;;;;;;;::::0;-1:-1:-1;;;;;3545:55:1;;3527:74;;25574:35:0::1;::::0;3515:2:1;3500:18;25574:35:0::1;;;;;;;-1:-1:-1::0;25627:4:0::1;23812:1827:::0;;;;:::o;25849:4824::-;25959:4;4359:6;;-1:-1:-1;;;;;4359:6:0;4369:10;4359:20;4350:69;;;;-1:-1:-1;;;4350:69:0;;9153:2:1;4350:69:0;;;9135:21:1;9192:2;9172:18;;;9165:30;9231:34;9211:18;;;9204:62;-1:-1:-1;;;9282:18:1;;;9275:32;9324:19;;4350:69:0;9125:224:1;4350:69:0;-1:-1:-1;;;;;25986:22:0;::::1;25977:33;;;::::0;::::1;;26021:11;::::0;26048:9:::1;:38;;;;;;-1:-1:-1::0;;;26048:38:0::1;;;;;;;;;;26043:4536;;;26114:67;26128:21;26151:18;26171:8;26114:12;:67::i;:::-;26109:293;;;-1:-1:-1::0;;;;;26203:33:0;::::1;26239:1;26203:33:::0;;;:21:::1;:33;::::0;;;;:37;26264:43:::1;26278:17;26226:8:::0;26264:12:::1;:43::i;:::-;26259:128;;26333:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;26333:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;26333:34:0::1;-1:-1:-1::0;;;;;26333:34:0;::::1;;::::0;;26259:128:::1;-1:-1:-1::0;;;;;;26426:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;26425:31;-1:-1:-1::0;;26471:39:0;;::::1;::::0;::::1;::::0;;;26043:4536:::1;;;26548:23;26535:9;:36;;;;;;-1:-1:-1::0;;;26535:36:0::1;;;;;;;;;;26530:4049;;;26599:63;26613:19;26634:16;26652:8;26599:12;:63::i;:::-;26594:283;;;-1:-1:-1::0;;;;;26684:31:0;::::1;26718:1;26684:31:::0;;;:19:::1;:31;::::0;;;;:35;26743:41:::1;26757:15;26705:8:::0;26743:12:::1;:41::i;:::-;26738:124;;26810:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;26810:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;26810:32:0::1;-1:-1:-1::0;;;;;26810:32:0;::::1;;::::0;;26738:124:::1;-1:-1:-1::0;;;;;;26901:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;26900:29;-1:-1:-1::0;;26944:37:0;;::::1;::::0;::::1;::::0;;;26530:4049:::1;;;27019:21;27006:9;:34;;;;;;-1:-1:-1::0;;;27006:34:0::1;;;;;;;;;;27001:3578;;;27068:59;27082:17;27101:14;27117:8;27068:12;:59::i;:::-;27063:273;;;-1:-1:-1::0;;;;;27149:29:0;::::1;27181:1;27149:29:::0;;;:17:::1;:29;::::0;;;;:33;27206:39:::1;27220:13;27168:8:::0;27206:12:::1;:39::i;:::-;27201:120;;27271:13;:30:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;27271:30:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;27271:30:0::1;-1:-1:-1::0;;;;;27271:30:0;::::1;;::::0;;27201:120:::1;-1:-1:-1::0;;;;;;27360:26:0;::::1;;::::0;;;:14:::1;:26;::::0;;;;;;::::1;::::0;::::1;27359:27;-1:-1:-1::0;;27401:35:0;;::::1;::::0;::::1;::::0;;;27001:3578:::1;;;27474:23;27461:9;:36;;;;;;-1:-1:-1::0;;;27461:36:0::1;;;;;;;;;;27456:3123;;;27525:63;27539:19;27560:16;27578:8;27525:12;:63::i;:::-;27520:334;;;27610:15;:32:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;27610:32:0::1;-1:-1:-1::0;;;;;27610:32:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;27661:31:0;;;:19:::1;27610:32;27661:31:::0;;;;:35;27720:41:::1;::::0;27610:32;27720:12:::1;:41::i;:::-;27715:124;;27787:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;27787:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;27787:32:0::1;-1:-1:-1::0;;;;;27787:32:0;::::1;;::::0;;27715:124:::1;-1:-1:-1::0;;;;;;27878:28:0;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;::::1;::::0;::::1;27877:29;-1:-1:-1::0;;27921:37:0;;::::1;::::0;::::1;::::0;;;27456:3123:::1;;;27996:27;27983:9;:40;;;;;;-1:-1:-1::0;;;27983:40:0::1;;;;;;;;;;27978:2601;;;28051:71;28065:23;28090:20;28112:8;28051:12;:71::i;:::-;28046:358;;;28144:19;:36:::0;;::::1;::::0;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;28144:36:0::1;-1:-1:-1::0;;;;;28144:36:0;::::1;::::0;;::::1;::::0;;;-1:-1:-1;28199:35:0;;;:23:::1;28144:36;28199:35:::0;;;;:39;28262:45:::1;::::0;28144:36;28262:12:::1;:45::i;:::-;28257:132;;28333:19;:36:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;28333:36:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;28333:36:0::1;-1:-1:-1::0;;;;;28333:36:0;::::1;;::::0;;28257:132:::1;-1:-1:-1::0;;;;;;28428:32:0;::::1;;::::0;;;:20:::1;:32;::::0;;;;;;::::1;::::0;::::1;28427:33;-1:-1:-1::0;;28475:41:0;;::::1;::::0;::::1;::::0;;;27978:2601:::1;;;28554:23;28541:9;:36;;;;;;-1:-1:-1::0;;;28541:36:0::1;;;;;;;;;;28536:2043;;;28605:63;28619:19;28640:16;28658:8;28605:12;:63::i;:::-;28600:283;;;-1:-1:-1::0;;;;;28690:31:0;::::1;28724:1;28690:31:::0;;;:19:::1;:31;::::0;;;;:35;28749:41:::1;28763:15;28711:8:::0;28749:12:::1;:41::i;:::-;28744:124;;28816:15;:32:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;28816:32:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;28816:32:0::1;-1:-1:-1::0;;;;;28816:32:0;::::1;;::::0;;28744:124:::1;-1:-1:-1::0;;;;;;28907:28:0;;::::1;;::::0;;;:16:::1;:28;::::0;;;;;;;;;::::1;::::0;::::1;28906:29;-1:-1:-1::0;;28950:37:0;;::::1;::::0;::::1;::::0;;;29002:14:::1;:26:::0;;;;;;:40;;-1:-1:-1;;;;;;29002:40:0::1;::::0;;::::1;::::0;;;::::1;::::0;;;28536:2043:::1;;;29080:25;29067:9;:38;;;;;;-1:-1:-1::0;;;29067:38:0::1;;;;;;;;;;29062:1517;;;29133:67;29147:21;29170:18;29190:8;29133:12;:67::i;:::-;29128:293;;;-1:-1:-1::0;;;;;29222:33:0;::::1;29258:1;29222:33:::0;;;:21:::1;:33;::::0;;;;:37;29283:43:::1;29297:17;29245:8:::0;29283:12:::1;:43::i;:::-;29278:128;;29352:17;:34:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;29352:34:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;29352:34:0::1;-1:-1:-1::0;;;;;29352:34:0;::::1;;::::0;;29278:128:::1;-1:-1:-1::0;;;;;;29445:30:0;::::1;;::::0;;;:18:::1;:30;::::0;;;;;;::::1;::::0;::::1;29444:31;-1:-1:-1::0;;29490:39:0;;::::1;::::0;::::1;::::0;;;29062:1517:::1;;;29567:15;29554:9;:28;;;;;;-1:-1:-1::0;;;29554:28:0::1;;;;;;;;;;29549:1030;;;29610:47;29624:11;29637:8;29647;29610:12;:47::i;:::-;29605:243;;;-1:-1:-1::0;;;;;29679:23:0;::::1;29705:1;29679:23:::0;;;:11:::1;:23;::::0;;;;:27;29730:33:::1;29744:7;29692:8:::0;29730:12:::1;:33::i;:::-;29725:108;;29789:7;:24:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;29789:24:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;29789:24:0::1;-1:-1:-1::0;;;;;29789:24:0;::::1;;::::0;;29725:108:::1;-1:-1:-1::0;;;;;;29872:20:0;::::1;;::::0;;;:8:::1;:20;::::0;;;;;;::::1;::::0;::::1;29871:21;-1:-1:-1::0;;29907:29:0;;::::1;::::0;::::1;::::0;;;29549:1030:::1;;;29974:22;29961:9;:35;;;;;;-1:-1:-1::0;;;29961:35:0::1;;;;;;;;;;29956:623;;;30024:61;30038:18;30058:15;30075:8;30024:12;:61::i;:::-;30019:278;;;-1:-1:-1::0;;;;;30107:30:0;::::1;30140:1;30107:30:::0;;;:18:::1;:30:::0;;;;;:34;30165:40:::1;30179:14;30127:8:::0;30165:12:::1;:40::i;:::-;30160:122;;30231:14;:31:::0;;::::1;::::0;::::1;::::0;;-1:-1:-1;30231:31:0;;;;;::::1;::::0;;-1:-1:-1;;;;;;30231:31:0::1;-1:-1:-1::0;;;;;30231:31:0;::::1;;::::0;;30160:122:::1;-1:-1:-1::0;;;;;;30321:27:0;::::1;;::::0;;;:15:::1;:27;::::0;;;;;;::::1;::::0;::::1;30320:28;-1:-1:-1::0;;30363:36:0;;::::1;::::0;::::1;::::0;;;29956:623:::1;;;30437:14;30424:9;:27;;;;;;-1:-1:-1::0;;;30424:27:0::1;;;;;;;;;;30419:160;;;-1:-1:-1::0;30487:1:0::1;30474:10;:14:::0;30503:5:::1;:16:::0;;-1:-1:-1;;;;;;30503:16:0::1;-1:-1:-1::0;;;;;30503:16:0;::::1;;::::0;;-1:-1:-1;30419:160:0::1;;;30574:5;30567:12;;;;;30419:160;30614:9;30597:46;;;;;;-1:-1:-1::0;;;30597:46:0::1;;;;;;;;;;::::0;;-1:-1:-1;;;;;4201:55:1;;4183:74;;4300:14;;4293:22;4288:2;4273:18;;4266:50;30597:46:0::1;::::0;4156:18:1;30597:46:0::1;;;;;;;30661:4;30654:11;;;4430:1;25849:4824:::0;;;;;:::o;14145:32::-;;;;;;;;;;;;10632:136;10690:7;10717:43;10721:1;10724;10717:43;;;;;;;;;;;;;;;;;:3;:43::i;872:177::-;982:58;;-1:-1:-1;;;;;4519:55:1;;982:58:0;;;4501:74:1;4591:18;;;4584:34;;;955:86:0;;975:5;;-1:-1:-1;;;1005:23:0;4474:18:1;;982:58:0;;;;-1:-1:-1;;982:58:0;;;;;;;;;;;;;;;;;;;;;;;;;;;955:19;:86::i;:::-;872:177;;;:::o;10443:181::-;10501:7;;10533:5;10537:1;10533;:5;:::i;:::-;10521:17;;10562:1;10557;:6;;10549:46;;;;-1:-1:-1;;;10549:46:0;;6930:2:1;10549:46:0;;;6912:21:1;6969:2;6949:18;;;6942:30;7008:29;6988:18;;;6981:57;7055:18;;10549:46:0;6902:177:1;10976:250:0;11034:7;11058:6;11054:47;;-1:-1:-1;11088:1:0;11081:8;;11054:47;11113:9;11125:5;11129:1;11125;:5;:::i;:::-;11113:17;-1:-1:-1;11158:1:0;11149:5;11153:1;11113:17;11149:5;:::i;:::-;:10;11141:56;;;;-1:-1:-1;;;11141:56:0;;9556:2:1;11141:56:0;;;9538:21:1;9595:2;9575:18;;;9568:30;9634:34;9614:18;;;9607:62;9705:3;9685:18;;;9678:31;9726:19;;11141:56:0;9528:223:1;11234:132:0;11292:7;11319:39;11323:1;11326;11319:39;;;;;;;;;;;;;;;;;:3;:39::i;1057:205::-;1185:68;;-1:-1:-1;;;;;3893:15:1;;;1185:68:0;;;3875:34:1;3945:15;;3925:18;;;3918:43;3977:18;;;3970:34;;;1158:96:0;;1178:5;;1208:27;;3787:18:1;;1185:68:0;3769:241:1;1158:96:0;1057:205;;;;:::o;30921:437::-;-1:-1:-1;;;;;31130:19:0;;31106:4;31130:19;;;;;;;;;;;;;31124:213;;-1:-1:-1;;;;;31176:18:0;;;;;;;;;;;;;;31167:48;;;;-1:-1:-1;;;31167:48:0;;10764:2:1;31167:48:0;;;10746:21:1;10803:2;10783:18;;;10776:30;10842:12;10822:18;;;10815:40;10872:18;;31167:48:0;10736:160:1;31167:48:0;-1:-1:-1;;;;;31239:18:0;;;;;;;;;;;;;;31261:15;-1:-1:-1;31239:37:0;31230:69;;;;-1:-1:-1;;;31230:69:0;;5771:2:1;31230:69:0;;;5753:21:1;5810:2;5790:18;;;5783:30;5849:19;5829:18;;;5822:47;5886:18;;31230:69:0;5743:167:1;31230:69:0;-1:-1:-1;31321:4:0;31314:11;;31124:213;-1:-1:-1;31345:5:0;30921:437;;;;;:::o;31527:277::-;31616:4;;31634:140;31655:12;;31651:16;;31634:140;;;31708:6;-1:-1:-1;;;;;31694:20:0;:5;31701:1;31694:10;;;;;;-1:-1:-1;;;31694:10:0;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;31694:10:0;:20;31690:73;;;31743:4;31736:11;;;;;31690:73;31669:3;;;;:::i;:::-;;;;31634:140;;10776:192;10862:7;10898:12;10890:6;;;;10882:29;;;;-1:-1:-1;;;10882:29:0;;;;;;;;:::i;:::-;-1:-1:-1;10922:9:0;10934:5;10938:1;10934;:5;:::i;:::-;10922:17;10776:192;-1:-1:-1;;;;;10776:192:0:o;2261:420::-;2344:23;2370:69;2398:4;2370:69;;;;;;;;;;;;;;;;;2378:5;-1:-1:-1;;;;;2370:27:0;;;:69;;;;;:::i;:::-;2454:17;;2344:95;;-1:-1:-1;2454:21:0;2450:224;;2596:10;2585:30;;;;;;;;;;;;:::i;:::-;2577:85;;;;-1:-1:-1;;;2577:85:0;;11821:2:1;2577:85:0;;;11803:21:1;11860:2;11840:18;;;11833:30;11899:34;11879:18;;;11872:62;11970:12;11950:18;;;11943:40;12000:19;;2577:85:0;11793:232:1;11374:189:0;11460:7;11495:12;11488:5;11480:28;;;;-1:-1:-1;;;11480:28:0;;;;;;;;:::i;:::-;-1:-1:-1;11519:9:0;11531:5;11535:1;11531;:5;:::i;6044:196::-;6147:12;6179:53;6202:6;6210:4;6216:1;6219:12;6179:22;:53::i;:::-;6172:60;6044:196;-1:-1:-1;;;;6044:196:0:o;7020:979::-;7150:12;5393:20;;7175:60;;;;-1:-1:-1;;;7175:60:0;;11103:2:1;7175:60:0;;;11085:21:1;11142:2;11122:18;;;11115:30;11181:31;11161:18;;;11154:59;11230:18;;7175:60:0;11075:179:1;7175:60:0;7309:12;7323:23;7350:6;-1:-1:-1;;;;;7350:11:0;7370:8;7381:4;7350:36;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7308:78;;;;7401:7;7397:595;;;7432:10;-1:-1:-1;7425:17:0;;-1:-1:-1;7425:17:0;7397:595;7546:17;;:21;7542:439;;7809:10;7803:17;7870:15;7857:10;7853:2;7849:19;7842:44;7757:148;7952:12;7945:20;;-1:-1:-1;;;7945:20:0;;;;;;;;:::i;14:196:1:-;82:20;;-1:-1:-1;;;;;131:54:1;;121:65;;111:2;;200:1;197;190:12;111:2;63:147;;;:::o;215:150::-;289:20;;338:2;328:13;;318:2;;355:1;352;345:12;370:196;429:6;482:2;470:9;461:7;457:23;453:32;450:2;;;503:6;495;488:22;450:2;531:29;550:9;531:29;:::i;571:264::-;639:6;647;700:2;688:9;679:7;675:23;671:32;668:2;;;721:6;713;706:22;668:2;749:29;768:9;749:29;:::i;:::-;739:39;825:2;810:18;;;;797:32;;-1:-1:-1;;;658:177:1:o;840:297::-;907:6;960:2;948:9;939:7;935:23;931:32;928:2;;;981:6;973;966:22;928:2;1018:9;1012:16;1071:5;1064:13;1057:21;1050:5;1047:32;1037:2;;1098:6;1090;1083:22;1142:289;1223:6;1231;1284:2;1272:9;1263:7;1259:23;1255:32;1252:2;;;1305:6;1297;1290:22;1252:2;1333:35;1358:9;1333:35;:::i;:::-;1323:45;;1387:38;1421:2;1410:9;1406:18;1387:38;:::i;:::-;1377:48;;1242:189;;;;;:::o;1436:363::-;1526:6;1534;1542;1595:2;1583:9;1574:7;1570:23;1566:32;1563:2;;;1616:6;1608;1601:22;1563:2;1644:35;1669:9;1644:35;:::i;:::-;1634:45;;1698:38;1732:2;1721:9;1717:18;1698:38;:::i;:::-;1688:48;;1755:38;1789:2;1778:9;1774:18;1755:38;:::i;:::-;1745:48;;1553:246;;;;;:::o;1804:190::-;1863:6;1916:2;1904:9;1895:7;1891:23;1887:32;1884:2;;;1937:6;1929;1922:22;1884:2;-1:-1:-1;1965:23:1;;1874:120;-1:-1:-1;1874:120:1:o;1999:194::-;2069:6;2122:2;2110:9;2101:7;2097:23;2093:32;2090:2;;;2143:6;2135;2128:22;2090:2;-1:-1:-1;2171:16:1;;2080:113;-1:-1:-1;2080:113:1:o;2198:264::-;2266:6;2274;2327:2;2315:9;2306:7;2302:23;2298:32;2295:2;;;2348:6;2340;2333:22;2295:2;2389:9;2376:23;2366:33;;2418:38;2452:2;2441:9;2437:18;2418:38;:::i;2467:332::-;2544:6;2552;2560;2613:2;2601:9;2592:7;2588:23;2584:32;2581:2;;;2634:6;2626;2619:22;2581:2;2675:9;2662:23;2652:33;;2704:38;2738:2;2727:9;2723:18;2704:38;:::i;:::-;2694:48;;2789:2;2778:9;2774:18;2761:32;2751:42;;2571:228;;;;;:::o;2804:293::-;2872:6;2925:2;2913:9;2904:7;2900:23;2896:32;2893:2;;;2946:6;2938;2931:22;2893:2;2983:9;2977:16;3033:4;3026:5;3022:16;3015:5;3012:27;3002:2;;3058:6;3050;3043:22;3102:274;3231:3;3269:6;3263:13;3285:53;3331:6;3326:3;3319:4;3311:6;3307:17;3285:53;:::i;:::-;3354:16;;;;;3239:137;-1:-1:-1;;3239:137:1:o;4821:383::-;4970:2;4959:9;4952:21;4933:4;5002:6;4996:13;5045:6;5040:2;5029:9;5025:18;5018:34;5061:66;5120:6;5115:2;5104:9;5100:18;5095:2;5087:6;5083:15;5061:66;:::i;:::-;5188:2;5167:15;-1:-1:-1;;5163:29:1;5148:45;;;;5195:2;5144:54;;4942:262;-1:-1:-1;;4942:262:1:o;12812:128::-;12852:3;12883:1;12879:6;12876:1;12873:13;12870:2;;;12889:18;;:::i;:::-;-1:-1:-1;12925:9:1;;12860:80::o;12945:274::-;12985:1;13011;13001:2;;-1:-1:-1;;;13043:1:1;13036:88;13147:4;13144:1;13137:15;13175:4;13172:1;13165:15;13001:2;-1:-1:-1;13204:9:1;;12991:228::o;13224:422::-;13313:1;13356:5;13313:1;13370:270;13391:7;13381:8;13378:21;13370:270;;;13450:4;13446:1;13442:6;13438:17;13432:4;13429:27;13426:2;;;13459:18;;:::i;:::-;13509:7;13499:8;13495:22;13492:2;;;13529:16;;;;13492:2;13608:22;;;;13568:15;;;;13370:270;;;13374:3;13288:358;;;;;:::o;13651:140::-;13709:5;13738:47;13779:4;13769:8;13765:19;13759:4;13845:5;13875:8;13865:2;;-1:-1:-1;13916:1:1;13930:5;;13865:2;13964:4;13954:2;;-1:-1:-1;14001:1:1;14015:5;;13954:2;14046:4;14064:1;14059:59;;;;14132:1;14127:130;;;;14039:218;;14059:59;14089:1;14080:10;;14103:5;;;14127:130;14164:3;14154:8;14151:17;14148:2;;;14171:18;;:::i;:::-;-1:-1:-1;;14227:1:1;14213:16;;14242:5;;14039:218;;14341:2;14331:8;14328:16;14322:3;14316:4;14313:13;14309:36;14303:2;14293:8;14290:16;14285:2;14279:4;14276:12;14272:35;14269:77;14266:2;;;-1:-1:-1;14378:19:1;;;14410:5;;14266:2;14457:34;14482:8;14476:4;14457:34;:::i;:::-;14527:6;14523:1;14519:6;14515:19;14506:7;14503:32;14500:2;;;14538:18;;:::i;:::-;14576:20;;13855:747;-1:-1:-1;;;13855:747:1:o;14607:168::-;14647:7;14713:1;14709;14705:6;14701:14;14698:1;14695:21;14690:1;14683:9;14676:17;14672:45;14669:2;;;14720:18;;:::i;:::-;-1:-1:-1;14760:9:1;;14659:116::o;14780:125::-;14820:4;14848:1;14845;14842:8;14839:2;;;14853:18;;:::i;:::-;-1:-1:-1;14890:9:1;;14829:76::o;14910:258::-;14982:1;14992:113;15006:6;15003:1;15000:13;14992:113;;;15082:11;;;15076:18;15063:11;;;15056:39;15028:2;15021:10;14992:113;;;15123:6;15120:1;15117:13;15114:2;;;-1:-1:-1;;15158:1:1;15140:16;;15133:27;14963:205::o;15173:135::-;15212:3;-1:-1:-1;;15233:17:1;;15230:2;;;15253:18;;:::i;:::-;-1:-1:-1;15300:1:1;15289:13;;15220:88::o;15313:184::-;-1:-1:-1;;;15362:1:1;15355:88;15462:4;15459:1;15452:15;15486:4;15483:1;15476:15

Swarm Source

ipfs://44207bf3a3b65964f478cec3e19ee40d3045da6c14e73ede9034c1d04550cb53
Block Transaction Gas Used Reward
Age Block Fee Address BC Fee Address Voting Power Jailed Incoming
Block Uncle Number Difficulty Gas Used Reward
Loading
Make sure to use the "Vote Down" button for any spammy posts, and the "Vote Up" for interesting conversations.