ETH Price: $3,105.58 (+0.78%)
Gas: 4 Gwei

Contract

0xCaC6f6711206215D9761F7B82936f2083964dfF5
 

Overview

ETH Balance

4.17746223844534849 ETH

Eth Value

$12,973.44 (@ $3,105.58/ETH)

Multichain Info

No addresses found
Transaction Hash
Method
Block
From
To
Value
Create Vault188832362023-12-28 9:31:59195 days ago1703755919IN
0xCaC6f671...83964dfF5
0 ETH0.0025179228.46847528
Lock Token187412562023-12-08 11:30:47214 days ago1702035047IN
0xCaC6f671...83964dfF5
0 ETH0.0032974639.92382746
Unlock Token187287752023-12-06 17:29:59216 days ago1701883799IN
0xCaC6f671...83964dfF5
1.82 ETH0.0049867958.16319825
Lock Token184124872023-10-23 10:51:35261 days ago1698058295IN
0xCaC6f671...83964dfF5
0 ETH0.000777558.63044791
Lock Token182753992023-10-04 6:34:23280 days ago1696401263IN
0xCaC6f671...83964dfF5
0 ETH0.000769426.58786905
Unlock Token176256462023-07-05 5:36:47371 days ago1688535407IN
0xCaC6f671...83964dfF5
0.01 ETH0.0024979742.06130484
Unlock Token166712502023-02-20 17:30:11505 days ago1676914211IN
0xCaC6f671...83964dfF5
0.01654872 ETH0.0025081739.28971106
Unlock Token166711952023-02-20 17:19:11505 days ago1676913551IN
0xCaC6f671...83964dfF5
0.07 ETH0.002787942.430019
Unlock Token166711722023-02-20 17:14:35505 days ago1676913275IN
0xCaC6f671...83964dfF5
2.9 ETH0.0033201850.53094642
Lock Token166214262023-02-13 17:48:35512 days ago1676310515IN
0xCaC6f671...83964dfF5
0 ETH0.003554330.43228903
Lock Token161667312022-12-12 6:06:35576 days ago1670825195IN
0xCaC6f671...83964dfF5
0 ETH0.0017538815.01383254
Lock Eth161549002022-12-10 14:27:59577 days ago1670682479IN
0xCaC6f671...83964dfF5
4 ETH0.0025730227.0881534
Create Vault161548972022-12-10 14:27:23577 days ago1670682443IN
0xCaC6f671...83964dfF5
0 ETH0.0024503127.69567256
Lock Eth161548812022-12-10 14:24:11577 days ago1670682251IN
0xCaC6f671...83964dfF5
4 ETH0.0021739422.8867744
Create Vault161548752022-12-10 14:22:59577 days ago1670682179IN
0xCaC6f671...83964dfF5
0 ETH0.0019571422.12432694
Exit Share144032892022-03-17 9:45:03846 days ago1647510303IN
0xCaC6f671...83964dfF5
0 ETH0.0011092318.98814834
Lock Token139332332022-01-03 15:20:19918 days ago1641223219IN
0xCaC6f671...83964dfF5
0 ETH0.0093317112.99926611
Lock Token137735962021-12-09 22:13:35943 days ago1639088015IN
0xCaC6f671...83964dfF5
0 ETH0.0090969291.24846944
Lock Token137645462021-12-08 11:24:32944 days ago1638962672IN
0xCaC6f671...83964dfF5
0 ETH0.0045859246
Lock Token137591002021-12-07 14:38:13945 days ago1638887893IN
0xCaC6f671...83964dfF5
0 ETH0.00756175.83295399
Lock Token137589512021-12-07 14:06:14945 days ago1638885974IN
0xCaC6f671...83964dfF5
0 ETH0.0090947177.85369652
Lock Eth137572542021-12-07 7:20:52946 days ago1638861652IN
0xCaC6f671...83964dfF5
10 ETH0.0061437464.67980367
Create Vault137571372021-12-07 6:56:14946 days ago1638860174IN
0xCaC6f671...83964dfF5
0 ETH0.0058042665.61386443
Exit Share137570862021-12-07 6:43:49946 days ago1638859429IN
0xCaC6f671...83964dfF5
0 ETH0.0046561479.70532122
Unlock Token137374442021-12-04 3:07:11949 days ago1638587231IN
0xCaC6f671...83964dfF5
4.66 ETH0.0042188364.20777865
View all transactions

Latest 25 internal transactions (View All)

Advanced mode:
Parent Transaction Hash Block From To Value
187412562023-12-08 11:30:47214 days ago1702035047
0xCaC6f671...83964dfF5
1.21068201 ETH
187412562023-12-08 11:30:47214 days ago1702035047
0xCaC6f671...83964dfF5
1.21068201 ETH
187287752023-12-06 17:29:59216 days ago1701883799
0xCaC6f671...83964dfF5
0.00289186 ETH
187287742023-12-06 17:29:47216 days ago1701883787
0xCaC6f671...83964dfF5
0.77166844 ETH
187287742023-12-06 17:29:47216 days ago1701883787
0xCaC6f671...83964dfF5
1.82 ETH
184124872023-10-23 10:51:35261 days ago1698058295
0xCaC6f671...83964dfF5
1.78468578 ETH
182754102023-10-04 6:36:35280 days ago1696401395
0xCaC6f671...83964dfF5
0.1702884 ETH
182754082023-10-04 6:36:11280 days ago1696401371
0xCaC6f671...83964dfF5
0.17028838 ETH
182754072023-10-04 6:35:59280 days ago1696401359
0xCaC6f671...83964dfF5
0.17028837 ETH
182754062023-10-04 6:35:47280 days ago1696401347
0xCaC6f671...83964dfF5
0.17028836 ETH
182754052023-10-04 6:35:35280 days ago1696401335
0xCaC6f671...83964dfF5
0.17028835 ETH
182754042023-10-04 6:35:23280 days ago1696401323
0xCaC6f671...83964dfF5
0.17028834 ETH
182754032023-10-04 6:35:11280 days ago1696401311
0xCaC6f671...83964dfF5
0.17028833 ETH
182754022023-10-04 6:34:59280 days ago1696401299
0xCaC6f671...83964dfF5
0.17028832 ETH
182754022023-10-04 6:34:59280 days ago1696401299
0xCaC6f671...83964dfF5
0.17028832 ETH
182754012023-10-04 6:34:47280 days ago1696401287
0xCaC6f671...83964dfF5
0.17028831 ETH
182754012023-10-04 6:34:47280 days ago1696401287
0xCaC6f671...83964dfF5
0.17028831 ETH
182754002023-10-04 6:34:35280 days ago1696401275
0xCaC6f671...83964dfF5
0.1702883 ETH
182753992023-10-04 6:34:23280 days ago1696401263
0xCaC6f671...83964dfF5
0.17028829 ETH
176256462023-07-05 5:36:47371 days ago1688535407
0xCaC6f671...83964dfF5
0.01 ETH
166712502023-02-20 17:30:11505 days ago1676914211
0xCaC6f671...83964dfF5
0.00001648 ETH
166214262023-02-13 17:48:35512 days ago1676310515
0xCaC6f671...83964dfF5
2.97890905 ETH
161667312022-12-12 6:06:35576 days ago1670825195
0xCaC6f671...83964dfF5
0.38169972 ETH
144032892022-03-17 9:45:03846 days ago1647510303
0xCaC6f671...83964dfF5
0.01381354 ETH
139332332022-01-03 15:20:19918 days ago1641223219
0xCaC6f671...83964dfF5
0.09713982 ETH
View All Internal Transactions
Loading...
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
KittenLending

Compiler Version
v0.6.12+commit.27d51765

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2021-03-22
*/

// SPDX-License-Identifier: UNLICENSED
//   _    _ _   _                __ _                            
//  | |  (_) | | |              / _(_)                           
//  | | ___| |_| |_ ___ _ __   | |_ _ _ __   __ _ _ __   ___ ___ 
//  | |/ / | __| __/ _ \ '_ \  |  _| | '_ \ / _` | '_ \ / __/ _ \
//  |   <| | |_| ||  __/ | | |_| | | | | | | (_| | | | | (_|  __/
//  |_|\_\_|\__|\__\___|_| |_(_)_| |_|_| |_|\__,_|_| |_|\___\___|
//
//  Kitten.Finance Lending
//
//  https://Kitten.Finance
//  https://kittenswap.org
//
pragma solidity ^0.6.12;

library SafeMath {
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require (c >= a, "!!add");
        return c;
    }
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        require (b <= a, "!!sub");
        uint256 c = a - b;
        return c;
    }
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require (b <= a, errorMessage);
        uint 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, "!!mul");
        return c;
    }
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        require (b > 0, "!!div");
        uint256 c = a / b;
        return c;
    }
}

////////////////////////////////////////////////////////////////////////////////

interface ERC20
{
    function balanceOf ( address account ) external view returns ( uint256 );
    function transfer ( address recipient, uint256 amount ) external returns ( bool );
    function transferFrom ( address sender, address recipient, uint256 amount ) external returns ( bool );
}

////////////////////////////////////////////////////////////////////////////////

contract KittenLending
{
    using SafeMath for uint;

    ////////////////////////////////////////////////////////////////////////////////
    
    address public govAddr;
    address public treasuryAddr;
    uint public treasuryAmtTotal = 0;
        
    constructor () public {
        govAddr = msg.sender;
        treasuryAddr = msg.sender;
    }
    
    modifier govOnly() {
    	require (msg.sender == govAddr, "!gov");
    	_;
    }
    
    function govTransferAddr(address newAddr) external govOnly {
    	require (newAddr != address(0), "!addr");
    	govAddr = newAddr;
    }
    
    function govSetTreasury(address newAddr) external govOnly
    {
    	require(newAddr != address(0), "!addr");
    	treasuryAddr = newAddr;
    }    
    
    uint8 public DEFAULT_devFeeBP = 0;
    
    function govSet_DEFAULT_devFeeBP(uint8 $DEFAULT_devFeeBP) external govOnly {
    	DEFAULT_devFeeBP = $DEFAULT_devFeeBP;
    }
    
    function govSet_devFeeBP(uint vaultId, uint8 $devFeeBP) external govOnly {
    	VAULT[vaultId].devFeeBP = $devFeeBP;
    }
    
    mapping (address => uint) public tokenStatus; // 0 = normal, if >= TOKEN_STATUS_BANNED then banned
    uint constant TOKEN_STATUS_BANNED = 1e60;
    uint8 constant VAULT_STATUS_BANNED = 200;
    
    function govSet_tokenStatus(address token, uint $tokenStatus) external govOnly {
    	tokenStatus[token] = $tokenStatus;
    }
    
    function govSet_vaultStatus(uint vaultId, uint8 $vaultStatus) external govOnly {
    	VAULT[vaultId].vaultStatus = $vaultStatus;
    }
    
    ////////////////////////////////////////////////////////////////////////////////

    struct VAULT_INFO 
    {
        address token;              // underlying token

        uint32 tEnd;                // timestamp
        uint128 priceEndScaled;     // scaled by PRICE_SCALE
        uint24 apyBP;               // APY%% in Basis Points
        uint8 devFeeBP;             // devFee%% in Basis Points
        
        uint8 vaultStatus;          // 0 = new, if >= VAULT_STATUS_BANNED then banned
        
        mapping (address => uint) share; // deposit ETH for vaultShare
        uint shareTotal;
        
        mapping (address => uint) tllll; // token locked
        uint tllllTotal;
        
        uint ethTotal;
    }

    uint constant PRICE_SCALE = 10 ** 18;

    VAULT_INFO[] public VAULT;
    
    event CREATE_VAULT(address indexed token, uint indexed vaultId, address indexed user, uint32 tEnd, uint128 priceEndScaled, uint24 apyBP);

    function createVault(address token, uint32 tEnd, uint128 priceEndScaled, uint24 apyBP) external 
    {
        VAULT_INFO memory m;
        require (token != address(0), "!token");
        require (tokenStatus[token] < TOKEN_STATUS_BANNED, '!tokenBanned');
        require (tEnd > block.timestamp, "!tEnd");
        require (priceEndScaled > 0, "!priceEndScaled");
        require (apyBP > 0, "!apyBP");
    
        m.token = token;
    	m.tEnd = tEnd;
    	m.priceEndScaled = priceEndScaled;
        m.apyBP = apyBP;

    	m.devFeeBP = DEFAULT_devFeeBP;
    	
    	if (msg.sender == govAddr) {
    	    m.vaultStatus = 100;
    	}
    	
    	VAULT.push(m);
    	
    	emit CREATE_VAULT(token, VAULT.length - 1, msg.sender, tEnd, priceEndScaled, apyBP);
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    
    function vaultCount() external view returns (uint)
    {
        return VAULT.length;
    }
    
    function getVaultStatForUser(uint vaultId, address user) external view returns (uint share, uint tllll)
    {
        share = VAULT[vaultId].share[user];
        tllll = VAULT[vaultId].tllll[user];
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    
    function getVaultValueInEth(uint vaultId) public view returns (uint)
    {
        VAULT_INFO memory m = VAULT[vaultId];
        
        uint priceNowScaled;
        if (block.timestamp >= m.tEnd)
            priceNowScaled = m.priceEndScaled;
        else {
            uint FACTOR = 10**18;
            priceNowScaled = uint(m.priceEndScaled) * FACTOR / (FACTOR + FACTOR * uint(m.apyBP) * (m.tEnd - block.timestamp) / (365 days) / 10000);
        }
        
        uint ethValue = m.ethTotal;
        uint tokenValue = (m.tllllTotal).mul(priceNowScaled) / (PRICE_SCALE);
        
        return ethValue.add(tokenValue);
    }
    
    function getVaultPriceScaled(uint vaultId) public view returns (uint)
    {
        VAULT_INFO memory m = VAULT[vaultId];
        
        uint priceNowScaled;
        if (block.timestamp >= m.tEnd)
            priceNowScaled = m.priceEndScaled;
        else {
            uint FACTOR = 10**18;
            priceNowScaled = uint(m.priceEndScaled) * FACTOR / (FACTOR + FACTOR * uint(m.apyBP) * (m.tEnd - block.timestamp) / (365 days) / 10000);
        }
        
        return priceNowScaled;
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    
    event LOCK_ETH(uint indexed vaultId, address indexed user, uint ethAmt, uint shareAmt);
    event UNLOCK_ETH(uint indexed vaultId, address indexed user, uint ethAmt, uint shareAmt);
    
    function _mintShare(VAULT_INFO storage m, address user, uint mintAmt) internal {
        m.share[user] = (m.share[user]).add(mintAmt);
        m.shareTotal = (m.shareTotal).add(mintAmt);        
    }
    function _burnShare(VAULT_INFO storage m, address user, uint burnAmt) internal {
        m.share[user] = (m.share[user]).sub(burnAmt, '!notEnoughShare');
        m.shareTotal = (m.shareTotal).sub(burnAmt, '!notEnoughShare');        
    }
    
    function _mintTllll(VAULT_INFO storage m, address user, uint mintAmt) internal {
        m.tllll[user] = (m.tllll[user]).add(mintAmt);
        m.tllllTotal = (m.tllllTotal).add(mintAmt);        
    }
    function _burnTllll(VAULT_INFO storage m, address user, uint burnAmt) internal {
        m.tllll[user] = (m.tllll[user]).sub(burnAmt, '!notEnoughTokenLocked');
        m.tllllTotal = (m.tllllTotal).sub(burnAmt, '!notEnoughTokenLocked');        
    }
    
    function _sendEth(VAULT_INFO storage m, address payable user, uint outAmt) internal {
        m.ethTotal = (m.ethTotal).sub(outAmt, '!notEnoughEthInVault');
        user.transfer(outAmt);
    }

    function lockEth(uint vaultId) external payable // lock ETH for lending, and mint vaultShare
    {
        VAULT_INFO storage m = VAULT[vaultId];
    	require (block.timestamp < m.tEnd, '!vaultEnded');

        //-------- receive ETH from user --------
        address user = msg.sender;
        uint ethInAmt = msg.value;
        require (ethInAmt > 0, '!ethInAmt');
        
        //-------- compute vaultShare mint amt --------
        uint shareMintAmt = 0;
        if (m.shareTotal == 0) { 
            shareMintAmt = ethInAmt; // initial price: 1 share = 1 ETH
        }
        else {                
            shareMintAmt = ethInAmt.mul(m.shareTotal).div(getVaultValueInEth(vaultId));
        }

        m.ethTotal = (m.ethTotal).add(ethInAmt); // add ETH after computing shareMintAmt
        
        //-------- mint vaultShare to user --------
        _mintShare(m, user, shareMintAmt);
        
        emit LOCK_ETH(vaultId, user, ethInAmt, shareMintAmt);
    }
    
    function unlockEth(uint vaultId, uint shareBurnAmt) external // unlock ETH, and burn vaultShare
    {
        VAULT_INFO storage m = VAULT[vaultId];
    	require (block.timestamp < m.tEnd, '!vaultEnded');        

        require (shareBurnAmt > 0, '!shareBurnAmt');
        address payable user = msg.sender;
        
        //-------- compute ETH out amt --------
        uint ethOutAmt = shareBurnAmt.mul(getVaultValueInEth(vaultId)).div(m.shareTotal);

        //-------- burn vaultShare from user --------
        _burnShare(m, user, shareBurnAmt);

        //-------- send ETH to user --------
        _sendEth(m, user, ethOutAmt);
        emit UNLOCK_ETH(vaultId, user, ethOutAmt, shareBurnAmt);
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    
    event LOCK_TOKEN(uint indexed vaultId, address indexed user, uint tokenAmt, uint ethAmt);
    event UNLOCK_TOKEN(uint indexed vaultId, address indexed user, uint tokenAmt, uint ethAmt); 
    
    function lockToken(uint vaultId, uint tokenInAmt) external // lock TOKEN to borrow ETH
    {
        VAULT_INFO storage m = VAULT[vaultId];
    	require (block.timestamp < m.tEnd, '!vaultEnded');        

    	require (m.vaultStatus < VAULT_STATUS_BANNED, '!vaultBanned');
    	require (tokenStatus[m.token] < TOKEN_STATUS_BANNED, '!tokenBanned');

        require (tokenInAmt > 0, '!tokenInAmt');
        address payable user = msg.sender;
        
        //-------- compute ETH out amt --------
        uint ethOutAmt = tokenInAmt.mul(getVaultPriceScaled(vaultId)) / (PRICE_SCALE);
        
        if (m.devFeeBP > 0) 
        {
            uint treasuryAmt = ethOutAmt.mul(uint(m.devFeeBP)) / (10000);
            treasuryAmtTotal = treasuryAmtTotal.add(treasuryAmt);
            
            ethOutAmt = ethOutAmt.sub(treasuryAmt);
            m.ethTotal = (m.ethTotal).sub(treasuryAmt, '!ethInVault'); // remove treasuryAmt
        }

        //--------  send TOKEN to contract --------
        ERC20(m.token).transferFrom(user, address(this), tokenInAmt);
        _mintTllll(m, user, tokenInAmt);

        //-------- send ETH to user --------
        _sendEth(m, user, ethOutAmt);
        emit LOCK_TOKEN(vaultId, user, tokenInAmt, ethOutAmt);
    }
    
    function unlockToken(uint vaultId) external payable // payback ETH to unlock TOKEN
    {
        VAULT_INFO storage m = VAULT[vaultId];
    	require (block.timestamp < m.tEnd, '!vaultEnded');         

        //-------- receive ETH from user --------
        uint ethInAmt = msg.value;
        require (ethInAmt > 0, '!ethInAmt');
        
        uint ethReturnAmt = 0;
        address payable user = msg.sender;
        
        //-------- compute LIQUID out amt --------
        uint priceScaled = getVaultPriceScaled(vaultId);

        uint tokenOutAmt = ethInAmt.mul(PRICE_SCALE).div(priceScaled);
        if (tokenOutAmt > m.tllll[user])
        {
            tokenOutAmt = m.tllll[user];
            ethReturnAmt = ethInAmt.sub(
                    tokenOutAmt.mul(priceScaled) / (PRICE_SCALE)
                );
        }
        
        //-------- send TOKEN to user --------
        _burnTllll(m, user, tokenOutAmt);
        ERC20(m.token).transfer(user, tokenOutAmt);
        
        //-------- return extra ETH to user --------
        m.ethTotal = (m.ethTotal).add(ethInAmt); // add input ETH first
        if (ethReturnAmt > 0)
            _sendEth(m, user, ethReturnAmt);
        emit UNLOCK_TOKEN(vaultId, user, tokenOutAmt, ethInAmt.sub(ethReturnAmt));
    }
    
    ////////////////////////////////////////////////////////////////////////////////
    
    event EXIT_SHARE(uint indexed vaultId, address indexed user, uint shareAmt);
    
    function exitShare(uint vaultId, address payable user) external // exit vaultShare after vault is closed
    {
        VAULT_INFO storage m = VAULT[vaultId];
    	require (block.timestamp > m.tEnd, '!vaultStillOpen');

    	//-------- compute ETH & TOKEN out amt --------
    	uint userShareAmt = m.share[user];
    	require (userShareAmt > 0, '!userShareAmt');

    	uint ethOutAmt = (m.ethTotal).mul(userShareAmt).div(m.shareTotal);
    	uint tokenOutAmt = (m.tllllTotal).mul(userShareAmt).div(m.shareTotal);

        //-------- burn vaultShare from user --------
        _burnShare(m, user, userShareAmt);

        //-------- send ETH & TOKEN to user --------
        if (tokenOutAmt > 0) {
            m.tllllTotal = (m.tllllTotal).sub(tokenOutAmt); // remove tllll
            ERC20(m.token).transfer(user, tokenOutAmt);
        }
        if (ethOutAmt > 0)
            _sendEth(m, user, ethOutAmt);
        
        emit EXIT_SHARE(vaultId, user, userShareAmt);
    }
    
    ////////////////////////////////////////////////////////////////////////////////

    function treasurySend(uint amt) external
    {
        treasuryAmtTotal = treasuryAmtTotal.sub(amt);
        
        address payable _treasuryAddr = address(uint160(treasuryAddr));
        _treasuryAddr.transfer(amt);
    }    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"token","type":"address"},{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint32","name":"tEnd","type":"uint32"},{"indexed":false,"internalType":"uint128","name":"priceEndScaled","type":"uint128"},{"indexed":false,"internalType":"uint24","name":"apyBP","type":"uint24"}],"name":"CREATE_VAULT","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"shareAmt","type":"uint256"}],"name":"EXIT_SHARE","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareAmt","type":"uint256"}],"name":"LOCK_ETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"}],"name":"LOCK_TOKEN","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"shareAmt","type":"uint256"}],"name":"UNLOCK_ETH","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"vaultId","type":"uint256"},{"indexed":true,"internalType":"address","name":"user","type":"address"},{"indexed":false,"internalType":"uint256","name":"tokenAmt","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"ethAmt","type":"uint256"}],"name":"UNLOCK_TOKEN","type":"event"},{"inputs":[],"name":"DEFAULT_devFeeBP","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"VAULT","outputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint32","name":"tEnd","type":"uint32"},{"internalType":"uint128","name":"priceEndScaled","type":"uint128"},{"internalType":"uint24","name":"apyBP","type":"uint24"},{"internalType":"uint8","name":"devFeeBP","type":"uint8"},{"internalType":"uint8","name":"vaultStatus","type":"uint8"},{"internalType":"uint256","name":"shareTotal","type":"uint256"},{"internalType":"uint256","name":"tllllTotal","type":"uint256"},{"internalType":"uint256","name":"ethTotal","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint32","name":"tEnd","type":"uint32"},{"internalType":"uint128","name":"priceEndScaled","type":"uint128"},{"internalType":"uint24","name":"apyBP","type":"uint24"}],"name":"createVault","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"address payable","name":"user","type":"address"}],"name":"exitShare","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"getVaultPriceScaled","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"address","name":"user","type":"address"}],"name":"getVaultStatForUser","outputs":[{"internalType":"uint256","name":"share","type":"uint256"},{"internalType":"uint256","name":"tllll","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"getVaultValueInEth","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"govAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"govSetTreasury","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"$DEFAULT_devFeeBP","type":"uint8"}],"name":"govSet_DEFAULT_devFeeBP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint8","name":"$devFeeBP","type":"uint8"}],"name":"govSet_devFeeBP","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"uint256","name":"$tokenStatus","type":"uint256"}],"name":"govSet_tokenStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint8","name":"$vaultStatus","type":"uint8"}],"name":"govSet_vaultStatus","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newAddr","type":"address"}],"name":"govTransferAddr","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"lockEth","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"tokenInAmt","type":"uint256"}],"name":"lockToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"tokenStatus","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryAddr","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"treasuryAmtTotal","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"treasurySend","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"},{"internalType":"uint256","name":"shareBurnAmt","type":"uint256"}],"name":"unlockEth","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"vaultId","type":"uint256"}],"name":"unlockToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"vaultCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]

608060405260006002556003805460ff1916905534801561001f57600080fd5b5060008054336001600160a01b0319918216811783556001805490921617905561203c90819061004f90396000f3fe60806040526004361061013f5760003560e01c806383670971116100b6578063c83ce00a1161006f578063c83ce00a1461048a578063cb85ce67146104b4578063d4e04f94146104c9578063dd2e0ac014610522578063fa3e1d8b1461053f578063ff71b4e5146105cf5761013f565b80638367097114610384578063a7c6a100146103af578063a917609d146103c4578063baa34110146103ee578063c0ae51e01461041e578063c8037c1c146104575761013f565b806341039de71161010857806341039de71461027157806342edd8e01461029e5780634e54ed2f146102d1578063663ddd9b146103045780637cfd312d14610334578063823758ed146103675761013f565b80629c3080146101445780630acac942146101805780631824a599146101b3578063187c7fc41461020557806330d9a62a14610240575b600080fd5b34801561015057600080fd5b5061016e6004803603602081101561016757600080fd5b50356105e4565b60408051918252519081900360200190f35b34801561018c57600080fd5b5061016e600480360360208110156101a357600080fd5b50356001600160a01b0316610754565b3480156101bf57600080fd5b506101ec600480360360408110156101d657600080fd5b50803590602001356001600160a01b0316610766565b6040805192835260208301919091528051918290030190f35b34801561021157600080fd5b5061023e6004803603604081101561022857600080fd5b506001600160a01b0381351690602001356107f8565b005b34801561024c57600080fd5b5061025561085c565b604080516001600160a01b039092168252519081900360200190f35b34801561027d57600080fd5b5061023e6004803603602081101561029457600080fd5b503560ff1661086b565b3480156102aa57600080fd5b5061023e600480360360208110156102c157600080fd5b50356001600160a01b03166108c9565b3480156102dd57600080fd5b5061023e600480360360408110156102f457600080fd5b508035906020013560ff16610976565b34801561031057600080fd5b5061023e6004803603604081101561032757600080fd5b50803590602001356109f9565b34801561034057600080fd5b5061023e6004803603602081101561035757600080fd5b50356001600160a01b0316610b41565b61023e6004803603602081101561037d57600080fd5b5035610bee565b34801561039057600080fd5b50610399610d45565b6040805160ff9092168252519081900360200190f35b3480156103bb57600080fd5b5061016e610d4e565b3480156103d057600080fd5b5061016e600480360360208110156103e757600080fd5b5035610d54565b3480156103fa57600080fd5b5061023e6004803603604081101561041157600080fd5b5080359060200135610e8b565b34801561042a57600080fd5b5061023e6004803603604081101561044157600080fd5b50803590602001356001600160a01b03166111c4565b34801561046357600080fd5b5061023e6004803603604081101561047a57600080fd5b508035906020013560ff166113dd565b34801561049657600080fd5b5061023e600480360360208110156104ad57600080fd5b5035611460565b3480156104c057600080fd5b506102556114b1565b3480156104d557600080fd5b5061023e600480360360808110156104ec57600080fd5b5080356001600160a01b031690602081013563ffffffff169060408101356001600160801b0316906060013562ffffff166114c0565b61023e6004803603602081101561053857600080fd5b503561188b565b34801561054b57600080fd5b506105696004803603602081101561056257600080fd5b5035611ad6565b604080516001600160a01b03909a168a5263ffffffff90981660208a01526001600160801b039096168888015262ffffff909416606088015260ff9283166080880152911660a086015260c085015260e084015261010083015251908190036101200190f35b3480156105db57600080fd5b5061016e611b56565b60006105ee611fba565b600583815481106105fb57fe5b600091825260208083206040805161012081018252600790940290910180546001600160a01b038116855263ffffffff600160a01b918290041693850184905260018201546001600160801b0381169386019390935262ffffff600160801b840416606086015260ff600160981b840481166080870152920490911660a0840152600381015460c0840152600581015460e08401526006015461010083015290925042106106b7575060408101516001600160801b0316610714565b6000670de0b6b3a764000090506127106301e1338042856020015163ffffffff1603856060015162ffffff16840202816106ed57fe5b04816106f557fe5b0481018184604001516001600160801b0316028161070f57fe5b049150505b61010082015160e0830151600090670de0b6b3a7640000906107369085611b5c565b8161073d57fe5b04905061074a8282611bbc565b9695505050505050565b60046020526000908152604090205481565b6000806005848154811061077657fe5b90600052602060002090600702016002016000846001600160a01b03166001600160a01b03168152602001908152602001600020549150600584815481106107ba57fe5b90600052602060002090600702016004016000846001600160a01b03166001600160a01b031681526020019081526020016000205490509250929050565b6000546001600160a01b03163314610840576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b03909116600090815260046020526040902055565b6001546001600160a01b031681565b6000546001600160a01b031633146108b3576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6003805460ff191660ff92909216919091179055565b6000546001600160a01b03163314610911576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b038116610954576040805162461bcd60e51b815260206004820152600560248201526410b0b2323960d91b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109be576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b80600583815481106109cc57fe5b906000526020600020906007020160010160146101000a81548160ff021916908360ff1602179055505050565b600060058381548110610a0857fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff164210610a6b576040805162461bcd60e51b815260206004820152600b60248201526a085d985d5b1d115b99195960aa1b604482015290519081900360640190fd5b60008211610ab0576040805162461bcd60e51b815260206004820152600d60248201526c085cda185c99509d5c9b905b5d609a1b604482015290519081900360640190fd5b60003390506000610ad88360030154610ad2610acb886105e4565b8790611b5c565b90611bfe565b9050610ae5838386611c50565b610af0838383611d04565b816001600160a01b0316857f3f6c7c131f29a1ace0e1879445abe358a301478b3ff3ad08567555c987cd9f938387604051808381526020018281526020019250505060405180910390a35050505050565b6000546001600160a01b03163314610b89576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b038116610bcc576040805162461bcd60e51b815260206004820152600560248201526410b0b2323960d91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600060058281548110610bfd57fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff164210610c60576040805162461bcd60e51b815260206004820152600b60248201526a085d985d5b1d115b99195960aa1b604482015290519081900360640190fd5b333480610ca0576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b6000836003015460001415610cb6575080610cd5565b610cd2610cc2866105e4565b6003860154610ad2908590611b5c565b90505b6006840154610ce49083611bbc565b6006850155610cf4848483611d80565b826001600160a01b0316857f4fe895b20fb4d3b843ffaafc53ccc36497cb9076a6b09adfe6ea43fbabcff7228484604051808381526020018281526020019250505060405180910390a35050505050565b60035460ff1681565b60055490565b6000610d5e611fba565b60058381548110610d6b57fe5b600091825260208083206040805161012081018252600790940290910180546001600160a01b038116855263ffffffff600160a01b918290041693850184905260018201546001600160801b0381169386019390935262ffffff600160801b840416606086015260ff600160981b840481166080870152920490911660a0840152600381015460c0840152600581015460e0840152600601546101008301529092504210610e27575060408101516001600160801b0316610e84565b6000670de0b6b3a764000090506127106301e1338042856020015163ffffffff1603856060015162ffffff1684020281610e5d57fe5b0481610e6557fe5b0481018184604001516001600160801b03160281610e7f57fe5b049150505b9392505050565b600060058381548110610e9a57fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff164210610efd576040805162461bcd60e51b815260206004820152600b60248201526a085d985d5b1d115b99195960aa1b604482015290519081900360640190fd5b600181015460c8600160a01b90910460ff1610610f50576040805162461bcd60e51b815260206004820152600c60248201526b085d985d5b1d10985b9b995960a21b604482015290519081900360640190fd5b80546001600160a01b03166000908152600460205260409020547109f4f2726179a224501d762422c946590d91603c1b11610fc1576040805162461bcd60e51b815260206004820152600c60248201526b085d1bdad95b90985b9b995960a21b604482015290519081900360640190fd5b60008211611004576040805162461bcd60e51b815260206004820152600b60248201526a085d1bdad95b925b905b5d60aa1b604482015290519081900360640190fd5b336000670de0b6b3a764000061102361101c87610d54565b8690611b5c565b8161102a57fe5b60018501549190049150600160981b900460ff16156110d557600183015460009061271090611064908490600160981b900460ff16611b5c565b8161106b57fe5b04905061108381600254611bbc90919063ffffffff16565b6002556110908282611dcf565b91506110ce816040518060400160405280600b81526020016a08595d1a125b95985d5b1d60aa1b8152508660060154611e149092919063ffffffff16565b6006850155505b8254604080516323b872dd60e01b81526001600160a01b03858116600483015230602483015260448201889052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561113057600080fd5b505af1158015611144573d6000803e3d6000fd5b505050506040513d602081101561115a57600080fd5b506111689050838386611eab565b611173838383611d04565b816001600160a01b0316857f05033b7c91434d46a613a104120d9b64d90442b02e743210b60d45617f751f4a8684604051808381526020018281526020019250505060405180910390a35050505050565b6000600583815481106111d357fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff16421161123a576040805162461bcd60e51b815260206004820152600f60248201526e10bb30bab63a29ba34b63627b832b760891b604482015290519081900360640190fd5b6001600160a01b038216600090815260028201602052604090205480611297576040805162461bcd60e51b815260206004820152600d60248201526c085d5cd95c94da185c99505b5d609a1b604482015290519081900360640190fd5b60006112b88360030154610ad2848660060154611b5c90919063ffffffff16565b905060006112db8460030154610ad2858760050154611b5c90919063ffffffff16565b90506112e8848685611c50565b80156113845760058401546112fd9082611dcf565b600585015583546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561135757600080fd5b505af115801561136b573d6000803e3d6000fd5b505050506040513d602081101561138157600080fd5b50505b811561139557611395848684611d04565b6040805184815290516001600160a01b0387169188917f283349053d66d9da21ce374ae3939d0b4e29a7e880380937c647a7cd6b4105b89181900360200190a3505050505050565b6000546001600160a01b03163314611425576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b806005838154811061143357fe5b906000526020600020906007020160010160136101000a81548160ff021916908360ff1602179055505050565b60025461146d9082611dcf565b6002556001546040516001600160a01b0390911690819083156108fc029084906000818181858888f193505050501580156114ac573d6000803e3d6000fd5b505050565b6000546001600160a01b031681565b6114c8611fba565b6001600160a01b03851661150c576040805162461bcd60e51b815260206004820152600660248201526510ba37b5b2b760d11b604482015290519081900360640190fd5b6001600160a01b0385166000908152600460205260409020547109f4f2726179a224501d762422c946590d91603c1b1161157c576040805162461bcd60e51b815260206004820152600c60248201526b085d1bdad95b90985b9b995960a21b604482015290519081900360640190fd5b428463ffffffff16116115be576040805162461bcd60e51b8152602060048201526005602482015264085d115b9960da1b604482015290519081900360640190fd5b6000836001600160801b03161161160e576040805162461bcd60e51b815260206004820152600f60248201526e085c1c9a58d9515b9914d8d85b1959608a1b604482015290519081900360640190fd5b60008262ffffff1611611651576040805162461bcd60e51b815260206004820152600660248201526502161707942560d41b604482015290519081900360640190fd5b6001600160a01b03858116825263ffffffff851660208301526001600160801b038416604083015262ffffff8316606083015260035460ff166080830152600054163314156116a257606460a08201525b60058054600181018255600082905282517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600790920291820180546020808701516001600160a01b03199092166001600160a01b039485161763ffffffff60a01b1916600160a01b63ffffffff9384168102919091179093556040808801517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1870180546060808c015160808d015160a08e01516fffffffffffffffffffffffffffffffff199094166001600160801b039687161762ffffff60801b1916600160801b62ffffff938416021760ff60981b1916600160981b60ff928316021760ff60a01b191693169098029190911790915560c08a01517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db389015560e08a01517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db58901556101008a01517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db69098019790975596548151938c168452968a169183019190915291871681830152905133946000190193928a16927f17210feba3f6379855b838dc82a42a06ce4c65ea191f6cd9dea6004d6fc6fa39928290030190a45050505050565b60006005828154811061189a57fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff1642106118fd576040805162461bcd60e51b815260206004820152600b60248201526a085d985d5b1d115b99195960aa1b604482015290519081900360640190fd5b348061193c576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b6000338161194986610d54565b9050600061196382610ad287670de0b6b3a7640000611b5c565b6001600160a01b03841660009081526004880160205260409020549091508111156119cd57506001600160a01b03821660009081526004860160205260409020546119ca670de0b6b3a76400006119ba8385611b5c565b816119c157fe5b87919004611dcf565b93505b6119d8868483611f07565b85546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015611a2d57600080fd5b505af1158015611a41573d6000803e3d6000fd5b505050506040513d6020811015611a5757600080fd5b50506006860154611a689086611bbc565b60068701558315611a7e57611a7e868486611d04565b6001600160a01b038316877fcd07afbf16f8c7d60914648608cc8a5ccd7b25919754fe0c1aca21757e0e5eb083611ab58989611dcf565b6040805192835260208301919091528051918290030190a350505050505050565b60058181548110611ae357fe5b6000918252602090912060079091020180546001820154600383015460058401546006909401546001600160a01b038416955063ffffffff600160a01b9485900416946001600160801b0384169462ffffff600160801b8604169460ff600160981b820481169592909104169290919089565b60025481565b600082611b6b57506000611bb6565b82820282848281611b7857fe5b0414611bb3576040805162461bcd60e51b815260206004820152600560248201526408485b5d5b60da1b604482015290519081900360640190fd5b90505b92915050565b600082820183811015611bb3576040805162461bcd60e51b8152602060048201526005602482015264084858591960da1b604482015290519081900360640190fd5b6000808211611c3c576040805162461bcd60e51b81526020600482015260056024820152641090b234bb60d91b604482015290519081900360640190fd5b6000828481611c4757fe5b04949350505050565b604080518082018252600f81526e216e6f74456e6f756768536861726560881b6020808301919091526001600160a01b0385166000908152600287019091529190912054611c9f918390611e14565b6001600160a01b0383166000908152600285016020908152604091829020929092558051808201909152600f81526e216e6f74456e6f756768536861726560881b918101919091526003840154611cf7918390611e14565b8360030181905550505050565b604080518082019091526014815273085b9bdd115b9bdd59da115d1a125b95985d5b1d60621b60208201526006840154611d3f918390611e14565b60068401556040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7a573d6000803e3d6000fd5b50505050565b6001600160a01b0382166000908152600284016020526040902054611da59082611bbc565b6001600160a01b03831660009081526002850160205260409020556003830154611cf79082611bbc565b600082821115611e0e576040805162461bcd60e51b81526020600482015260056024820152641090b9bab160d91b604482015290519081900360640190fd5b50900390565b60008184841115611ea35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e68578181015183820152602001611e50565b50505050905090810190601f168015611e955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0382166000908152600484016020526040902054611ed09082611bbc565b6001600160a01b03831660009081526004850160205260409020556005830154611efa9082611bbc565b8360050181905550505050565b6040805180820182526015815274085b9bdd115b9bdd59da151bdad95b931bd8dad959605a1b6020808301919091526001600160a01b0385166000908152600487019091529190912054611f5c918390611e14565b6001600160a01b03831660009081526004850160209081526040918290209290925580518082019091526015815274085b9bdd115b9bdd59da151bdad95b931bd8dad959605a1b918101919091526005840154611efa918390611e14565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091529056fea2646970667358221220ba97274f482c94d3c8fa015288167aa16cc0ce4e8e59e4f31f4eb88a1c77be1564736f6c634300060c0033

Deployed Bytecode

0x60806040526004361061013f5760003560e01c806383670971116100b6578063c83ce00a1161006f578063c83ce00a1461048a578063cb85ce67146104b4578063d4e04f94146104c9578063dd2e0ac014610522578063fa3e1d8b1461053f578063ff71b4e5146105cf5761013f565b80638367097114610384578063a7c6a100146103af578063a917609d146103c4578063baa34110146103ee578063c0ae51e01461041e578063c8037c1c146104575761013f565b806341039de71161010857806341039de71461027157806342edd8e01461029e5780634e54ed2f146102d1578063663ddd9b146103045780637cfd312d14610334578063823758ed146103675761013f565b80629c3080146101445780630acac942146101805780631824a599146101b3578063187c7fc41461020557806330d9a62a14610240575b600080fd5b34801561015057600080fd5b5061016e6004803603602081101561016757600080fd5b50356105e4565b60408051918252519081900360200190f35b34801561018c57600080fd5b5061016e600480360360208110156101a357600080fd5b50356001600160a01b0316610754565b3480156101bf57600080fd5b506101ec600480360360408110156101d657600080fd5b50803590602001356001600160a01b0316610766565b6040805192835260208301919091528051918290030190f35b34801561021157600080fd5b5061023e6004803603604081101561022857600080fd5b506001600160a01b0381351690602001356107f8565b005b34801561024c57600080fd5b5061025561085c565b604080516001600160a01b039092168252519081900360200190f35b34801561027d57600080fd5b5061023e6004803603602081101561029457600080fd5b503560ff1661086b565b3480156102aa57600080fd5b5061023e600480360360208110156102c157600080fd5b50356001600160a01b03166108c9565b3480156102dd57600080fd5b5061023e600480360360408110156102f457600080fd5b508035906020013560ff16610976565b34801561031057600080fd5b5061023e6004803603604081101561032757600080fd5b50803590602001356109f9565b34801561034057600080fd5b5061023e6004803603602081101561035757600080fd5b50356001600160a01b0316610b41565b61023e6004803603602081101561037d57600080fd5b5035610bee565b34801561039057600080fd5b50610399610d45565b6040805160ff9092168252519081900360200190f35b3480156103bb57600080fd5b5061016e610d4e565b3480156103d057600080fd5b5061016e600480360360208110156103e757600080fd5b5035610d54565b3480156103fa57600080fd5b5061023e6004803603604081101561041157600080fd5b5080359060200135610e8b565b34801561042a57600080fd5b5061023e6004803603604081101561044157600080fd5b50803590602001356001600160a01b03166111c4565b34801561046357600080fd5b5061023e6004803603604081101561047a57600080fd5b508035906020013560ff166113dd565b34801561049657600080fd5b5061023e600480360360208110156104ad57600080fd5b5035611460565b3480156104c057600080fd5b506102556114b1565b3480156104d557600080fd5b5061023e600480360360808110156104ec57600080fd5b5080356001600160a01b031690602081013563ffffffff169060408101356001600160801b0316906060013562ffffff166114c0565b61023e6004803603602081101561053857600080fd5b503561188b565b34801561054b57600080fd5b506105696004803603602081101561056257600080fd5b5035611ad6565b604080516001600160a01b03909a168a5263ffffffff90981660208a01526001600160801b039096168888015262ffffff909416606088015260ff9283166080880152911660a086015260c085015260e084015261010083015251908190036101200190f35b3480156105db57600080fd5b5061016e611b56565b60006105ee611fba565b600583815481106105fb57fe5b600091825260208083206040805161012081018252600790940290910180546001600160a01b038116855263ffffffff600160a01b918290041693850184905260018201546001600160801b0381169386019390935262ffffff600160801b840416606086015260ff600160981b840481166080870152920490911660a0840152600381015460c0840152600581015460e08401526006015461010083015290925042106106b7575060408101516001600160801b0316610714565b6000670de0b6b3a764000090506127106301e1338042856020015163ffffffff1603856060015162ffffff16840202816106ed57fe5b04816106f557fe5b0481018184604001516001600160801b0316028161070f57fe5b049150505b61010082015160e0830151600090670de0b6b3a7640000906107369085611b5c565b8161073d57fe5b04905061074a8282611bbc565b9695505050505050565b60046020526000908152604090205481565b6000806005848154811061077657fe5b90600052602060002090600702016002016000846001600160a01b03166001600160a01b03168152602001908152602001600020549150600584815481106107ba57fe5b90600052602060002090600702016004016000846001600160a01b03166001600160a01b031681526020019081526020016000205490509250929050565b6000546001600160a01b03163314610840576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b03909116600090815260046020526040902055565b6001546001600160a01b031681565b6000546001600160a01b031633146108b3576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6003805460ff191660ff92909216919091179055565b6000546001600160a01b03163314610911576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b038116610954576040805162461bcd60e51b815260206004820152600560248201526410b0b2323960d91b604482015290519081900360640190fd5b600080546001600160a01b0319166001600160a01b0392909216919091179055565b6000546001600160a01b031633146109be576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b80600583815481106109cc57fe5b906000526020600020906007020160010160146101000a81548160ff021916908360ff1602179055505050565b600060058381548110610a0857fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff164210610a6b576040805162461bcd60e51b815260206004820152600b60248201526a085d985d5b1d115b99195960aa1b604482015290519081900360640190fd5b60008211610ab0576040805162461bcd60e51b815260206004820152600d60248201526c085cda185c99509d5c9b905b5d609a1b604482015290519081900360640190fd5b60003390506000610ad88360030154610ad2610acb886105e4565b8790611b5c565b90611bfe565b9050610ae5838386611c50565b610af0838383611d04565b816001600160a01b0316857f3f6c7c131f29a1ace0e1879445abe358a301478b3ff3ad08567555c987cd9f938387604051808381526020018281526020019250505060405180910390a35050505050565b6000546001600160a01b03163314610b89576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b6001600160a01b038116610bcc576040805162461bcd60e51b815260206004820152600560248201526410b0b2323960d91b604482015290519081900360640190fd5b600180546001600160a01b0319166001600160a01b0392909216919091179055565b600060058281548110610bfd57fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff164210610c60576040805162461bcd60e51b815260206004820152600b60248201526a085d985d5b1d115b99195960aa1b604482015290519081900360640190fd5b333480610ca0576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b6000836003015460001415610cb6575080610cd5565b610cd2610cc2866105e4565b6003860154610ad2908590611b5c565b90505b6006840154610ce49083611bbc565b6006850155610cf4848483611d80565b826001600160a01b0316857f4fe895b20fb4d3b843ffaafc53ccc36497cb9076a6b09adfe6ea43fbabcff7228484604051808381526020018281526020019250505060405180910390a35050505050565b60035460ff1681565b60055490565b6000610d5e611fba565b60058381548110610d6b57fe5b600091825260208083206040805161012081018252600790940290910180546001600160a01b038116855263ffffffff600160a01b918290041693850184905260018201546001600160801b0381169386019390935262ffffff600160801b840416606086015260ff600160981b840481166080870152920490911660a0840152600381015460c0840152600581015460e0840152600601546101008301529092504210610e27575060408101516001600160801b0316610e84565b6000670de0b6b3a764000090506127106301e1338042856020015163ffffffff1603856060015162ffffff1684020281610e5d57fe5b0481610e6557fe5b0481018184604001516001600160801b03160281610e7f57fe5b049150505b9392505050565b600060058381548110610e9a57fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff164210610efd576040805162461bcd60e51b815260206004820152600b60248201526a085d985d5b1d115b99195960aa1b604482015290519081900360640190fd5b600181015460c8600160a01b90910460ff1610610f50576040805162461bcd60e51b815260206004820152600c60248201526b085d985d5b1d10985b9b995960a21b604482015290519081900360640190fd5b80546001600160a01b03166000908152600460205260409020547109f4f2726179a224501d762422c946590d91603c1b11610fc1576040805162461bcd60e51b815260206004820152600c60248201526b085d1bdad95b90985b9b995960a21b604482015290519081900360640190fd5b60008211611004576040805162461bcd60e51b815260206004820152600b60248201526a085d1bdad95b925b905b5d60aa1b604482015290519081900360640190fd5b336000670de0b6b3a764000061102361101c87610d54565b8690611b5c565b8161102a57fe5b60018501549190049150600160981b900460ff16156110d557600183015460009061271090611064908490600160981b900460ff16611b5c565b8161106b57fe5b04905061108381600254611bbc90919063ffffffff16565b6002556110908282611dcf565b91506110ce816040518060400160405280600b81526020016a08595d1a125b95985d5b1d60aa1b8152508660060154611e149092919063ffffffff16565b6006850155505b8254604080516323b872dd60e01b81526001600160a01b03858116600483015230602483015260448201889052915191909216916323b872dd9160648083019260209291908290030181600087803b15801561113057600080fd5b505af1158015611144573d6000803e3d6000fd5b505050506040513d602081101561115a57600080fd5b506111689050838386611eab565b611173838383611d04565b816001600160a01b0316857f05033b7c91434d46a613a104120d9b64d90442b02e743210b60d45617f751f4a8684604051808381526020018281526020019250505060405180910390a35050505050565b6000600583815481106111d357fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff16421161123a576040805162461bcd60e51b815260206004820152600f60248201526e10bb30bab63a29ba34b63627b832b760891b604482015290519081900360640190fd5b6001600160a01b038216600090815260028201602052604090205480611297576040805162461bcd60e51b815260206004820152600d60248201526c085d5cd95c94da185c99505b5d609a1b604482015290519081900360640190fd5b60006112b88360030154610ad2848660060154611b5c90919063ffffffff16565b905060006112db8460030154610ad2858760050154611b5c90919063ffffffff16565b90506112e8848685611c50565b80156113845760058401546112fd9082611dcf565b600585015583546040805163a9059cbb60e01b81526001600160a01b038881166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b15801561135757600080fd5b505af115801561136b573d6000803e3d6000fd5b505050506040513d602081101561138157600080fd5b50505b811561139557611395848684611d04565b6040805184815290516001600160a01b0387169188917f283349053d66d9da21ce374ae3939d0b4e29a7e880380937c647a7cd6b4105b89181900360200190a3505050505050565b6000546001600160a01b03163314611425576040805162461bcd60e51b8152602060048083019190915260248201526310b3b7bb60e11b604482015290519081900360640190fd5b806005838154811061143357fe5b906000526020600020906007020160010160136101000a81548160ff021916908360ff1602179055505050565b60025461146d9082611dcf565b6002556001546040516001600160a01b0390911690819083156108fc029084906000818181858888f193505050501580156114ac573d6000803e3d6000fd5b505050565b6000546001600160a01b031681565b6114c8611fba565b6001600160a01b03851661150c576040805162461bcd60e51b815260206004820152600660248201526510ba37b5b2b760d11b604482015290519081900360640190fd5b6001600160a01b0385166000908152600460205260409020547109f4f2726179a224501d762422c946590d91603c1b1161157c576040805162461bcd60e51b815260206004820152600c60248201526b085d1bdad95b90985b9b995960a21b604482015290519081900360640190fd5b428463ffffffff16116115be576040805162461bcd60e51b8152602060048201526005602482015264085d115b9960da1b604482015290519081900360640190fd5b6000836001600160801b03161161160e576040805162461bcd60e51b815260206004820152600f60248201526e085c1c9a58d9515b9914d8d85b1959608a1b604482015290519081900360640190fd5b60008262ffffff1611611651576040805162461bcd60e51b815260206004820152600660248201526502161707942560d41b604482015290519081900360640190fd5b6001600160a01b03858116825263ffffffff851660208301526001600160801b038416604083015262ffffff8316606083015260035460ff166080830152600054163314156116a257606460a08201525b60058054600181018255600082905282517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db0600790920291820180546020808701516001600160a01b03199092166001600160a01b039485161763ffffffff60a01b1916600160a01b63ffffffff9384168102919091179093556040808801517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db1870180546060808c015160808d015160a08e01516fffffffffffffffffffffffffffffffff199094166001600160801b039687161762ffffff60801b1916600160801b62ffffff938416021760ff60981b1916600160981b60ff928316021760ff60a01b191693169098029190911790915560c08a01517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db389015560e08a01517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db58901556101008a01517f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db69098019790975596548151938c168452968a169183019190915291871681830152905133946000190193928a16927f17210feba3f6379855b838dc82a42a06ce4c65ea191f6cd9dea6004d6fc6fa39928290030190a45050505050565b60006005828154811061189a57fe5b600091825260209091206007909102018054909150600160a01b900463ffffffff1642106118fd576040805162461bcd60e51b815260206004820152600b60248201526a085d985d5b1d115b99195960aa1b604482015290519081900360640190fd5b348061193c576040805162461bcd60e51b815260206004820152600960248201526808595d1a125b905b5d60ba1b604482015290519081900360640190fd5b6000338161194986610d54565b9050600061196382610ad287670de0b6b3a7640000611b5c565b6001600160a01b03841660009081526004880160205260409020549091508111156119cd57506001600160a01b03821660009081526004860160205260409020546119ca670de0b6b3a76400006119ba8385611b5c565b816119c157fe5b87919004611dcf565b93505b6119d8868483611f07565b85546040805163a9059cbb60e01b81526001600160a01b038681166004830152602482018590529151919092169163a9059cbb9160448083019260209291908290030181600087803b158015611a2d57600080fd5b505af1158015611a41573d6000803e3d6000fd5b505050506040513d6020811015611a5757600080fd5b50506006860154611a689086611bbc565b60068701558315611a7e57611a7e868486611d04565b6001600160a01b038316877fcd07afbf16f8c7d60914648608cc8a5ccd7b25919754fe0c1aca21757e0e5eb083611ab58989611dcf565b6040805192835260208301919091528051918290030190a350505050505050565b60058181548110611ae357fe5b6000918252602090912060079091020180546001820154600383015460058401546006909401546001600160a01b038416955063ffffffff600160a01b9485900416946001600160801b0384169462ffffff600160801b8604169460ff600160981b820481169592909104169290919089565b60025481565b600082611b6b57506000611bb6565b82820282848281611b7857fe5b0414611bb3576040805162461bcd60e51b815260206004820152600560248201526408485b5d5b60da1b604482015290519081900360640190fd5b90505b92915050565b600082820183811015611bb3576040805162461bcd60e51b8152602060048201526005602482015264084858591960da1b604482015290519081900360640190fd5b6000808211611c3c576040805162461bcd60e51b81526020600482015260056024820152641090b234bb60d91b604482015290519081900360640190fd5b6000828481611c4757fe5b04949350505050565b604080518082018252600f81526e216e6f74456e6f756768536861726560881b6020808301919091526001600160a01b0385166000908152600287019091529190912054611c9f918390611e14565b6001600160a01b0383166000908152600285016020908152604091829020929092558051808201909152600f81526e216e6f74456e6f756768536861726560881b918101919091526003840154611cf7918390611e14565b8360030181905550505050565b604080518082019091526014815273085b9bdd115b9bdd59da115d1a125b95985d5b1d60621b60208201526006840154611d3f918390611e14565b60068401556040516001600160a01b0383169082156108fc029083906000818181858888f19350505050158015611d7a573d6000803e3d6000fd5b50505050565b6001600160a01b0382166000908152600284016020526040902054611da59082611bbc565b6001600160a01b03831660009081526002850160205260409020556003830154611cf79082611bbc565b600082821115611e0e576040805162461bcd60e51b81526020600482015260056024820152641090b9bab160d91b604482015290519081900360640190fd5b50900390565b60008184841115611ea35760405162461bcd60e51b81526004018080602001828103825283818151815260200191508051906020019080838360005b83811015611e68578181015183820152602001611e50565b50505050905090810190601f168015611e955780820380516001836020036101000a031916815260200191505b509250505060405180910390fd5b505050900390565b6001600160a01b0382166000908152600484016020526040902054611ed09082611bbc565b6001600160a01b03831660009081526004850160205260409020556005830154611efa9082611bbc565b8360050181905550505050565b6040805180820182526015815274085b9bdd115b9bdd59da151bdad95b931bd8dad959605a1b6020808301919091526001600160a01b0385166000908152600487019091529190912054611f5c918390611e14565b6001600160a01b03831660009081526004850160209081526040918290209290925580518082019091526015815274085b9bdd115b9bdd59da151bdad95b931bd8dad959605a1b918101919091526005840154611efa918390611e14565b6040805161012081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101919091529056fea2646970667358221220ba97274f482c94d3c8fa015288167aa16cc0ce4e8e59e4f31f4eb88a1c77be1564736f6c634300060c0033

Deployed Bytecode Sourcemap

1973:12678:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5864:646;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5864:646:0;;:::i;:::-;;;;;;;;;;;;;;;;3081:44;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3081:44:0;-1:-1:-1;;;;;3081:44:0;;:::i;5553:207::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;5553:207:0;;;;;;-1:-1:-1;;;;;5553:207:0;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;3285:128;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;3285:128:0;;;;;;;;:::i;:::-;;2157:27;;;;;;;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;2157:27:0;;;;;;;;;;;;;;2806:127;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2806:127:0;;;;:::i;2444:140::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2444:140:0;-1:-1:-1;;;;;2444:140:0;;:::i;3425:136::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;3425:136:0;;;;;;;;;:::i;9486:726::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;9486:726:0;;;;;;;:::i;2596:148::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2596:148:0;-1:-1:-1;;;;;2596:148:0;;:::i;8471:1003::-;;;;;;;;;;;;;;;;-1:-1:-1;8471:1003:0;;:::i;2760:33::-;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;5447:94;;;;;;;;;;;;;:::i;6522:511::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6522:511:0;;:::i;10515:1287::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;10515:1287:0;;;;;;;:::i;13317:997::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13317:997:0;;;;;;-1:-1:-1;;;;;13317:997:0;;:::i;2945:124::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;2945:124:0;;;;;;;;;:::i;14414:230::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;14414:230:0;;:::i;2128:22::-;;;;;;;;;;;;;:::i;4560:783::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4560:783:0;;-1:-1:-1;;;;;4560:783:0;;;;;;;;;;;;;-1:-1:-1;;;;;4560:783:0;;;;;;;;:::i;11814:1311::-;;;;;;;;;;;;;;;;-1:-1:-1;11814:1311:0;;:::i;4377:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;4377:25:0;;:::i;:::-;;;;-1:-1:-1;;;;;4377:25:0;;;;;;;;;;;;;-1:-1:-1;;;;;4377:25:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2191:32;;;;;;;;;;;;;:::i;5864:646::-;5927:4;5949:19;;:::i;:::-;5971:5;5977:7;5971:14;;;;;;;;;;;;;;;;5949:36;;;;;;;;5971:14;;;;;;;5949:36;;-1:-1:-1;;;;;5949:36:0;;;;;-1:-1:-1;;;5949:36:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;5949:36:0;;;;;;;;;;-1:-1:-1;;;5949:36:0;;;;;;;;-1:-1:-1;;;5949:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6040:15:0;:25;6036:289;;-1:-1:-1;6097:16:0;;;;-1:-1:-1;;;;;6080:33:0;6036:289;;;6144:11;6158:6;6144:20;;6307:5;6295:8;6275:15;6266:1;:6;;;:24;;;6254:1;:7;;;6249:13;;6240:6;:22;:51;:64;;;;;;:72;;;;;;6231:6;:81;6221:6;6201:1;:16;;;-1:-1:-1;;;;;6196:22:0;:31;:117;;;;;;6179:134;;6036:289;;6361:10;;;;6401:12;;;;6345:13;;4360:8;;6400:34;;6419:14;6400:18;:34::i;:::-;:50;;;;;;;-1:-1:-1;6478:24:0;:8;6400:50;6478:12;:24::i;:::-;6471:31;5864:646;-1:-1:-1;;;;;;5864:646:0:o;3081:44::-;;;;;;;;;;;;;:::o;5553:207::-;5633:10;5645;5681:5;5687:7;5681:14;;;;;;;;;;;;;;;;;;:20;;:26;5702:4;-1:-1:-1;;;;;5681:26:0;-1:-1:-1;;;;;5681:26:0;;;;;;;;;;;;;5673:34;;5726:5;5732:7;5726:14;;;;;;;;;;;;;;;;;;:20;;:26;5747:4;-1:-1:-1;;;;;5726:26:0;-1:-1:-1;;;;;5726:26:0;;;;;;;;;;;;;5718:34;;5553:207;;;;;:::o;3285:128::-;2399:7;;-1:-1:-1;;;;;2399:7:0;2385:10;:21;2376:39;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;3372:18:0;;::::1;;::::0;;;:11:::1;:18;::::0;;;;:33;3285:128::o;2157:27::-;;;-1:-1:-1;;;;;2157:27:0;;:::o;2806:127::-;2399:7;;-1:-1:-1;;;;;2399:7:0;2385:10;:21;2376:39;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;2889:16:::1;:36:::0;;-1:-1:-1;;2889:36:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;2806:127::o;2444:140::-;2399:7;;-1:-1:-1;;;;;2399:7:0;2385:10;:21;2376:39;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2520:21:0;::::1;2511:40;;;::::0;;-1:-1:-1;;;2511:40:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2511:40:0;;;;;;;;;;;;;::::1;;2559:7;:17:::0;;-1:-1:-1;;;;;;2559:17:0::1;-1:-1:-1::0;;;;;2559:17:0;;;::::1;::::0;;;::::1;::::0;;2444:140::o;3425:136::-;2399:7;;-1:-1:-1;;;;;2399:7:0;2385:10;:21;2376:39;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;3541:12:::1;3512:5;3518:7;3512:14;;;;;;;;;;;;;;;;;;:26;;;:41;;;;;;;;;;;;;;;;;;3425:136:::0;;:::o;9486:726::-;9598:20;9621:5;9627:7;9621:14;;;;;;;;;;;;;;;;;;;;;9670:6;;9621:14;;-1:-1:-1;;;;9670:6:0;;;;9652:15;:24;9643:49;;;;;-1:-1:-1;;;9643:49:0;;;;;;;;;;;;-1:-1:-1;;;9643:49:0;;;;;;;;;;;;;;;9737:1;9722:12;:16;9713:43;;;;;-1:-1:-1;;;9713:43:0;;;;;;;;;;;;-1:-1:-1;;;9713:43:0;;;;;;;;;;;;;;;9767:20;9790:10;9767:33;;9870:14;9887:63;9937:1;:12;;;9887:45;9904:27;9923:7;9904:18;:27::i;:::-;9887:12;;:16;:45::i;:::-;:49;;:63::i;:::-;9870:80;;10018:33;10029:1;10032:4;10038:12;10018:10;:33::i;:::-;10110:28;10119:1;10122:4;10128:9;10110:8;:28::i;:::-;10174:4;-1:-1:-1;;;;;10154:50:0;10165:7;10154:50;10180:9;10191:12;10154:50;;;;;;;;;;;;;;;;;;;;;;;;9486:726;;;;;:::o;2596:148::-;2399:7;;-1:-1:-1;;;;;2399:7:0;2385:10;:21;2376:39;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;2675:21:0;::::1;2667:39;;;::::0;;-1:-1:-1;;;2667:39:0;;::::1;;::::0;::::1;::::0;::::1;::::0;;;;-1:-1:-1;;;2667:39:0;;;;;;;;;;;;;::::1;;2714:12;:22:::0;;-1:-1:-1;;;;;;2714:22:0::1;-1:-1:-1::0;;;;;2714:22:0;;;::::1;::::0;;;::::1;::::0;;2596:148::o;8471:1003::-;8580:20;8603:5;8609:7;8603:14;;;;;;;;;;;;;;;;;;;;;8652:6;;8603:14;;-1:-1:-1;;;;8652:6:0;;;;8634:15;:24;8625:49;;;;;-1:-1:-1;;;8625:49:0;;;;;;;;;;;;-1:-1:-1;;;8625:49:0;;;;;;;;;;;;;;;8753:10;8790:9;8819:12;8810:35;;;;;-1:-1:-1;;;8810:35:0;;;;;;;;;;;;-1:-1:-1;;;8810:35:0;;;;;;;;;;;;;;;8923:17;8959:1;:12;;;8975:1;8959:17;8955:240;;;-1:-1:-1;9009:8:0;8955:240;;;9124:59;9155:27;9174:7;9155:18;:27::i;:::-;9137:12;;;;9124:26;;:8;;:12;:26::i;:59::-;9109:74;;8955:240;9221:10;;;;9220:26;;9237:8;9220:16;:26::i;:::-;9207:10;;;:39;9360:33;9207:1;9374:4;9380:12;9360:10;:33::i;:::-;9437:4;-1:-1:-1;;;;;9419:47:0;9428:7;9419:47;9443:8;9453:12;9419:47;;;;;;;;;;;;;;;;;;;;;;;;8471:1003;;;;;:::o;2760:33::-;;;;;;:::o;5447:94::-;5521:5;:12;5447:94;:::o;6522:511::-;6586:4;6608:19;;:::i;:::-;6630:5;6636:7;6630:14;;;;;;;;;;;;;;;;6608:36;;;;;;;;6630:14;;;;;;;6608:36;;-1:-1:-1;;;;;6608:36:0;;;;;-1:-1:-1;;;6608:36:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;6608:36:0;;;;;;;;;;-1:-1:-1;;;6608:36:0;;;;;;;;-1:-1:-1;;;6608:36:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;6699:15:0;:25;6695:289;;-1:-1:-1;6756:16:0;;;;-1:-1:-1;;;;;6739:33:0;6695:289;;;6803:11;6817:6;6803:20;;6966:5;6954:8;6934:15;6925:1;:6;;;:24;;;6913:1;:7;;;6908:13;;6899:6;:22;:51;:64;;;;;;:72;;;;;;6890:6;:81;6880:6;6860:1;:16;;;-1:-1:-1;;;;;6855:22:0;:31;:117;;;;;;6838:134;;6695:289;;7011:14;6522:511;-1:-1:-1;;;6522:511:0:o;10515:1287::-;10618:20;10641:5;10647:7;10641:14;;;;;;;;;;;;;;;;;;;;;10690:6;;10641:14;;-1:-1:-1;;;;10690:6:0;;;;10672:15;:24;10663:49;;;;;-1:-1:-1;;;10663:49:0;;;;;;;;;;;;-1:-1:-1;;;10663:49:0;;;;;;;;;;;;;;;10739:13;;;;3269:3;-1:-1:-1;;;10739:13:0;;;:35;:13;:35;10730:61;;;;;-1:-1:-1;;;10730:61:0;;;;;;;;;;;;-1:-1:-1;;;10730:61:0;;;;;;;;;;;;;;;10820:7;;-1:-1:-1;;;;;10820:7:0;10808:20;;;;:11;:20;;;;;;-1:-1:-1;;;;10799:68:0;;;;;-1:-1:-1;;;10799:68:0;;;;;;;;;;;;-1:-1:-1;;;10799:68:0;;;;;;;;;;;;;;;10902:1;10889:10;:14;10880:39;;;;;-1:-1:-1;;;10880:39:0;;;;;;;;;;;;-1:-1:-1;;;10880:39:0;;;;;;;;;;;;;;;10953:10;10930:20;4360:8;11050:44;11065:28;11085:7;11065:19;:28::i;:::-;11050:10;;:14;:44::i;:::-;:60;;;;;11135:10;;;;11050:60;;;;-1:-1:-1;;;;11135:10:0;;;;:14;11131:345;;11214:10;;;;11176:16;;11230:5;;11195:31;;:9;;-1:-1:-1;;;11214:10:0;;;;11195:13;:31::i;:::-;:41;;;;;;11176:60;;11270:33;11291:11;11270:16;;:20;;:33;;;;:::i;:::-;11251:16;:52;11344:26;:9;11358:11;11344:13;:26::i;:::-;11332:38;;11398:44;11415:11;11398:44;;;;;;;;;;;;;-1:-1:-1;;;11398:44:0;;;11399:1;:10;;;11398:16;;:44;;;;;:::i;:::-;11385:10;;;:57;-1:-1:-1;11131:345:0;11547:7;;11541:60;;;-1:-1:-1;;;11541:60:0;;-1:-1:-1;;;;;11541:60:0;;;;;;;11583:4;11541:60;;;;;;;;;;;;11547:7;;;;;11541:27;;:60;;;;;;;;;;;;;;11547:7;;11541:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;11612:31:0;;-1:-1:-1;11623:1:0;11626:4;11632:10;11612;:31::i;:::-;11702:28;11711:1;11714:4;11720:9;11702:8;:28::i;:::-;11766:4;-1:-1:-1;;;;;11746:48:0;11757:7;11746:48;11772:10;11784:9;11746:48;;;;;;;;;;;;;;;;;;;;;;;;10515:1287;;;;;:::o;13317:997::-;13438:20;13461:5;13467:7;13461:14;;;;;;;;;;;;;;;;;;;;;13510:6;;13461:14;;-1:-1:-1;;;;13510:6:0;;;;13492:15;:24;13483:53;;;;;-1:-1:-1;;;13483:53:0;;;;;;;;;;;;-1:-1:-1;;;13483:53:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;13620:13:0;;13600:17;13620:13;;;:7;;;:13;;;;;;13650:16;13641:43;;;;;-1:-1:-1;;;13641:43:0;;;;;;;;;;;;-1:-1:-1;;;13641:43:0;;;;;;;;;;;;;;;13694:14;13711:48;13746:1;:12;;;13711:30;13728:12;13712:1;:10;;;13711:16;;:30;;;;:::i;:48::-;13694:65;;13767:16;13786:50;13823:1;:12;;;13786:32;13805:12;13787:1;:12;;;13786:18;;:32;;;;:::i;:50::-;13767:69;;13904:33;13915:1;13918:4;13924:12;13904:10;:33::i;:::-;14008:15;;14004:167;;14056:12;;;;14055:31;;14074:11;14055:18;:31::i;:::-;14040:12;;;:46;14123:7;;14117:42;;;-1:-1:-1;;;14117:42:0;;-1:-1:-1;;;;;14117:42:0;;;;;;;;;;;;;;;14123:7;;;;;14117:23;;:42;;;;;;;;;;;;;;14123:7;;14117:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;14004:167:0;14185:13;;14181:60;;14213:28;14222:1;14225:4;14231:9;14213:8;:28::i;:::-;14267:39;;;;;;;;-1:-1:-1;;;;;14267:39:0;;;14278:7;;14267:39;;;;;;;;;13317:997;;;;;;:::o;2945:124::-;2399:7;;-1:-1:-1;;;;;2399:7:0;2385:10;:21;2376:39;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;2376:39:0;;;;;;;;;;;;;;;3052:9:::1;3026:5;3032:7;3026:14;;;;;;;;;;;;;;;;;;:23;;;:35;;;;;;;;;;;;;;;;;;2945:124:::0;;:::o;14414:230::-;14490:16;;:25;;14511:3;14490:20;:25::i;:::-;14471:16;:44;14584:12;;14609:27;;-1:-1:-1;;;;;14584:12:0;;;;;;14609:27;;;;;14632:3;;14536:29;14609:27;14536:29;14609:27;14632:3;14584:12;14609:27;;;;;;;;;;;;;;;;;;;;;14414:230;;:::o;2128:22::-;;;-1:-1:-1;;;;;2128:22:0;;:::o;4560:783::-;4673:19;;:::i;:::-;-1:-1:-1;;;;;4712:19:0;;4703:39;;;;;-1:-1:-1;;;4703:39:0;;;;;;;;;;;;-1:-1:-1;;;4703:39:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4762:18:0;;;;;;:11;:18;;;;;;-1:-1:-1;;;;4753:66:0;;;;;-1:-1:-1;;;4753:66:0;;;;;;;;;;;;-1:-1:-1;;;4753:66:0;;;;;;;;;;;;;;;4846:15;4839:4;:22;;;4830:41;;;;;-1:-1:-1;;;4830:41:0;;;;;;;;;;;;-1:-1:-1;;;4830:41:0;;;;;;;;;;;;;;;4908:1;4891:14;-1:-1:-1;;;;;4891:18:0;;4882:47;;;;;-1:-1:-1;;;4882:47:0;;;;;;;;;;;;-1:-1:-1;;;4882:47:0;;;;;;;;;;;;;;;4957:1;4949:5;:9;;;4940:29;;;;;-1:-1:-1;;;4940:29:0;;;;;;;;;;;;-1:-1:-1;;;4940:29:0;;;;;;;;;;;;;;;-1:-1:-1;;;;;4986:15:0;;;;;5009:13;;;:6;;;:13;-1:-1:-1;;;;;5030:33:0;;:16;;;:33;5074:15;;;:7;;;:15;5112:16;;;;5099:10;;;:29;-1:-1:-1;5161:7:0;;5147:10;:21;5143:67;;;5198:3;5182:13;;;:19;5143:67;5224:5;:13;;;;;;;-1:-1:-1;5224:13:0;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;;5224:13:0;;;-1:-1:-1;;;;;5224:13:0;;;;-1:-1:-1;;;;5224:13:0;-1:-1:-1;;;5224:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;5224:13:0;;;-1:-1:-1;;;;;5224:13:0;;;;-1:-1:-1;;;;5224:13:0;-1:-1:-1;;;5224:13:0;;;;;;-1:-1:-1;;;;5224:13:0;-1:-1:-1;;;5224:13:0;;;;;;-1:-1:-1;;;;5224:13:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5277:12;;5257:78;;;;;;;;;;;;;;;;;;;;;;;;;;5295:10;;-1:-1:-1;;5277:16:0;;5257:78;;;;;;;;;;;;4560:783;;;;;:::o;11814:1311::-;11913:20;11936:5;11942:7;11936:14;;;;;;;;;;;;;;;;;;;;;11985:6;;11936:14;;-1:-1:-1;;;;11985:6:0;;;;11967:15;:24;11958:49;;;;;-1:-1:-1;;;11958:49:0;;;;;;;;;;;;-1:-1:-1;;;11958:49:0;;;;;;;;;;;;;;;12096:9;12125:12;12116:35;;;;;-1:-1:-1;;;12116:35:0;;;;;;;;;;;;-1:-1:-1;;;12116:35:0;;;;;;;;;;;;;;;12172:17;12227:10;12172:17;12329:28;12349:7;12329:19;:28::i;:::-;12310:47;-1:-1:-1;12370:16:0;12389:42;12310:47;12389:25;:8;4360;12389:12;:25::i;:42::-;-1:-1:-1;;;;;12460:13:0;;;;;;:7;;;:13;;;;;;12370:61;;-1:-1:-1;12446:27:0;;12442:224;;;-1:-1:-1;;;;;;12513:13:0;;;;;;:7;;;:13;;;;;;12556:98;4360:8;12591:28;12513:13;12607:11;12591:15;:28::i;:::-;:44;;;;;12556:8;;12591:44;;12556:12;:98::i;:::-;12541:113;;12442:224;12734:32;12745:1;12748:4;12754:11;12734:10;:32::i;:::-;12783:7;;12777:42;;;-1:-1:-1;;;12777:42:0;;-1:-1:-1;;;;;12777:42:0;;;;;;;;;;;;;;;12783:7;;;;;12777:23;;:42;;;;;;;;;;;;;;12783:7;;12777:42;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;12908:10:0;;;;12907:26;;12924:8;12907:16;:26::i;:::-;12894:10;;;:39;12971:16;;12967:66;;13002:31;13011:1;13014:4;13020:12;13002:8;:31::i;:::-;-1:-1:-1;;;;;13049:68:0;;13062:7;13049:68;13077:11;13090:26;:8;13103:12;13090;:26::i;:::-;13049:68;;;;;;;;;;;;;;;;;;;;;;11814:1311;;;;;;;:::o;4377:25::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;4377:25:0;;;-1:-1:-1;4377:25:0;-1:-1:-1;;;4377:25:0;;;;;;-1:-1:-1;;;;;4377:25:0;;;;-1:-1:-1;;;4377:25:0;;;;;-1:-1:-1;;;4377:25:0;;;;;;;;;;;;;;;:::o;2191:32::-;;;;:::o;1116:219::-;1174:7;1198:6;1194:47;;-1:-1:-1;1228:1:0;1221:8;;1194:47;1263:5;;;1267:1;1263;:5;:1;1288:5;;;;;:10;1279:29;;;;;-1:-1:-1;;;1279:29:0;;;;;;;;;;;;-1:-1:-1;;;1279:29:0;;;;;;;;;;;;;;;1326:1;-1:-1:-1;1116:219:0;;;;;:::o;590:158::-;648:7;680:5;;;705:6;;;;696:25;;;;;-1:-1:-1;;;696:25:0;;;;;;;;;;;;-1:-1:-1;;;696:25:0;;;;;;;;;;;;;;1341:157;1399:7;1432:1;1428;:5;1419:24;;;;;-1:-1:-1;;;1419:24:0;;;;;;;;;;;;-1:-1:-1;;;1419:24:0;;;;;;;;;;;;;;;1454:9;1470:1;1466;:5;;;;;;;1341:157;-1:-1:-1;;;;1341:157:0:o;7540:241::-;7646:47;;;;;;;;;;;-1:-1:-1;;;7646:47:0;;;;;;;;-1:-1:-1;;;;;7647:13:0;;-1:-1:-1;7647:13:0;;;:7;;;:13;;;;;;;;7646:47;;7666:7;;7646:19;:47::i;:::-;-1:-1:-1;;;;;7630:13:0;;;;;;:7;;;:13;;;;;;;;;:63;;;;7719:46;;;;;;;;;;;-1:-1:-1;;;7719:46:0;;;;;;;7720:12;;;;7719:46;;7738:7;;7719:18;:46::i;:::-;7704:1;:12;;:61;;;;7540:241;;;:::o;8267:196::-;8375:48;;;;;;;;;;;;-1:-1:-1;;;8375:48:0;;;;8376:10;;;;8375:48;;8392:6;;8375:16;:48::i;:::-;8362:10;;;:61;8434:21;;-1:-1:-1;;;;;8434:13:0;;;:21;;;;;8448:6;;8434:21;;;;8448:6;8434:13;:21;;;;;;;;;;;;;;;;;;;;;8267:196;;;:::o;7331:203::-;-1:-1:-1;;;;;7438:13:0;;;;;;:7;;;:13;;;;;;7437:28;;7457:7;7437:19;:28::i;:::-;-1:-1:-1;;;;;7421:13:0;;;;;;:7;;;:13;;;;;:44;7492:12;;;;7491:27;;7510:7;7491:18;:27::i;754:158::-;812:7;846:1;841;:6;;832:25;;;;;-1:-1:-1;;;832:25:0;;;;;;;;;;;;-1:-1:-1;;;832:25:0;;;;;;;;;;;;;;;-1:-1:-1;880:5:0;;;754:158::o;918:188::-;1004:7;1041:12;1033:6;;;;1024:30;;;;-1:-1:-1;;;1024:30:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;1074:5:0;;;918:188::o;7793:203::-;-1:-1:-1;;;;;7900:13:0;;;;;;:7;;;:13;;;;;;7899:28;;7919:7;7899:19;:28::i;:::-;-1:-1:-1;;;;;7883:13:0;;;;;;:7;;;:13;;;;;:44;7954:12;;;;7953:27;;7972:7;7953:18;:27::i;:::-;7938:1;:12;;:42;;;;7793:203;;;:::o;8002:253::-;8108:53;;;;;;;;;;;-1:-1:-1;;;8108:53:0;;;;;;;;-1:-1:-1;;;;;8109:13:0;;-1:-1:-1;8109:13:0;;;:7;;;:13;;;;;;;;8108:53;;8128:7;;8108:19;:53::i;:::-;-1:-1:-1;;;;;8092:13:0;;;;;;:7;;;:13;;;;;;;;;:69;;;;8187:52;;;;;;;;;;;-1:-1:-1;;;8187:52:0;;;;;;;8188:12;;;;8187:52;;8206:7;;8187:18;:52::i;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o

Swarm Source

ipfs://ba97274f482c94d3c8fa015288167aa16cc0ce4e8e59e4f31f4eb88a1c77be15

Block Transaction Difficulty Gas Used Reward
View All Blocks Produced

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

Validator Index Block Amount
View All Withdrawals

Transaction Hash Block Value Eth2 PubKey Valid
View All Deposits
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.