ETH Price: $2,684.11 (-2.57%)
Gas: 0.86 Gwei

Token

LynKey (LYNK)
 

Overview

Max Total Supply

1,000,000,000 LYNK

Holders

10,059 (0.00%)

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 8 Decimals)

Balance
140,059.7145 LYNK

Value
$0.00
0xe665a604028671033b446f12fbd978eea56942e1
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

Smart luxury resorts, tourism and property, powered by Blockchain and NFTs.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
Lynkey

Compiler Version
v0.8.7+commit.e28d00a7

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, MIT license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-04-06
*/

// SPDX-License-Identifier: MIT


// File: @openzeppelin/contracts/token/ERC20/IERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/IERC20.sol)

pragma solidity 0.8.7;

/**
 * @dev Interface of the ERC20 standard as defined in the EIP.
 */
interface IERC20 {
    /**
     * @dev Returns the amount of tokens in existence.
     */
    function totalSupply() external view returns (uint256);

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

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

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

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

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

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

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

// File: @openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/IERC20Metadata.sol)

pragma solidity 0.8.7;


/**
 * @dev Interface for the optional metadata functions from the ERC20 standard.
 *
 * _Available since v4.1._
 */
interface IERC20Metadata is IERC20 {
    /**
     * @dev Returns the name of the token.
     */
    function name() external view returns (string memory);

    /**
     * @dev Returns the symbol of the token.
     */
    function symbol() external view returns (string memory);

    /**
     * @dev Returns the decimals places of the token.
     */
    function decimals() external view returns (uint8);
}

// File: @openzeppelin/contracts/utils/Context.sol


// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)

pragma solidity 0.8.7;

/**
 * @dev Provides information about the current execution context, including the
 * sender of the transaction and its data. While these are generally available
 * via msg.sender and msg.data, they should not be accessed in such a direct
 * manner, since when dealing with meta-transactions the account sending and
 * paying for execution may not be the actual sender (as far as an application
 * is concerned).
 *
 * This contract is only required for intermediate, library-like contracts.
 */
abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

    function _msgData() internal view virtual returns (bytes calldata) {
        return msg.data;
    }
}


// File: @openzeppelin/contracts/token/ERC20/ERC20.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/ERC20.sol)

pragma solidity 0.8.7;




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

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

    uint256 private _totalSupply;

    string private _name;
    string private _symbol;

    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }

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

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

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

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

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

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

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

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

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

        uint256 currentAllowance = _allowances[sender][_msgSender()];
        require(currentAllowance >= amount, "ERC20: transfer amount exceeds allowance");
        unchecked {
            _approve(sender, _msgSender(), currentAllowance - amount);
        }

        return true;
    }

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

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

        return true;
    }

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

        _beforeTokenTransfer(sender, recipient, amount);

        uint256 senderBalance = _balances[sender];
        require(senderBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[sender] = senderBalance - amount;
        }
        _balances[recipient] += amount;

        emit Transfer(sender, recipient, amount);

        _afterTokenTransfer(sender, recipient, amount);
    }

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

        _beforeTokenTransfer(address(0), account, amount);

        _totalSupply += amount;
        _balances[account] += amount;
        emit Transfer(address(0), account, amount);

        _afterTokenTransfer(address(0), account, amount);
    }

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

        _beforeTokenTransfer(account, address(0), amount);

        uint256 accountBalance = _balances[account];
        require(accountBalance >= amount, "ERC20: burn amount exceeds balance");
        unchecked {
            _balances[account] = accountBalance - amount;
        }
        _totalSupply -= amount;

        emit Transfer(account, address(0), amount);

        _afterTokenTransfer(account, address(0), amount);
    }

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

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

    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be transferred to `to`.
     * - when `from` is zero, `amount` tokens will be minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens will be burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _beforeTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}

    /**
     * @dev Hook that is called after any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * has been transferred to `to`.
     * - when `from` is zero, `amount` tokens have been minted for `to`.
     * - when `to` is zero, `amount` of ``from``'s tokens have been burned.
     * - `from` and `to` are never both zero.
     *
     * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
     */
    function _afterTokenTransfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {}
}

// File: @openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol


// OpenZeppelin Contracts v4.4.1 (token/ERC20/extensions/ERC20Burnable.sol)

pragma solidity 0.8.7;



/**
 * @dev Extension of {ERC20} that allows token holders to destroy both their own
 * tokens and those that they have an allowance for, in a way that can be
 * recognized off-chain (via event analysis).
 */
abstract contract ERC20Burnable is Context, ERC20 {
    /**
     * @dev Destroys `amount` tokens from the caller.
     *
     * See {ERC20-_burn}.
     */
    function burn(uint256 amount) public virtual {
        _burn(_msgSender(), amount);
    }

    /**
     * @dev Destroys `amount` tokens from `account`, deducting from the caller's
     * allowance.
     *
     * See {ERC20-_burn} and {ERC20-allowance}.
     *
     * Requirements:
     *
     * - the caller must have allowance for ``accounts``'s tokens of at least
     * `amount`.
     */
    function burnFrom(address account, uint256 amount) public virtual {
        uint256 currentAllowance = allowance(account, _msgSender());
        require(currentAllowance >= amount, "ERC20: burn amount exceeds allowance");
        unchecked {
            _approve(account, _msgSender(), currentAllowance - amount);
        }
        _burn(account, amount);
    }
}

// File: @openzeppelin/contracts/access/Ownable.sol


// File: contracts/lynkey.sol
pragma solidity 0.8.7;


contract Lynkey is ERC20Burnable {
    event event_lockSystemWallet(address _caller, address _wallet, uint256 _amountSum, uint256 _startTime, uint8 _forHowManyPeriods, uint256 _periodInSeconds);
    event event_transferAndLock(address _caller, address _receiver, uint256 _amount, uint256 _releaseTime);
    event event_transfer_by_admin(address _caller, address _receiver, uint256 _amount);
    
    address private _owner;

    address ecosystemWallet; 
	address crowdsaleWallet; 
	address stakingRewardWallet;
	address reserveLiquidityWallet;
	address teamWallet;
	address partnerWallet;
	
    // #tokens at at issuance; actual token supply tokenSupply() may be less due to possible future token burning 
	uint256 private totalSupplyAtBirth; 
    
    struct LockItem {
        uint256  releaseTime;
        uint256  amount;
    }
    mapping (address => LockItem[]) public lockList;
    
    function decimals() public pure override returns (uint8) {
        return 8;
    }
    
	constructor() ERC20("LynKey", "LYNK") {  

        // all these 6 system addresses are Gnosis multi-sig:  
        
        crowdsaleWallet = 0x07188d46b305b8183F0c7FA204a7bcbB6C2E59e9;
	    ecosystemWallet = 0x9968c39f7D8ea29648203A6043CA1eef51c4e509;
	    stakingRewardWallet = 0xfee25971dc356acE41fF004Fd2c8661A5B87C177;
	    reserveLiquidityWallet = 0x261f04b695361672210D6F02AD0dC0a371Bb4b1C;
	    teamWallet = 0x4eAC98E2f866830440b7E5Fa4e3e78ce0a8516d9;
	    partnerWallet = 0x611A909aB6218046872a0438E29f80d067A42d42;
	        
        _owner = msg.sender;

        totalSupplyAtBirth = 1000000000 * 10 ** uint256(decimals());

        // allocate tokens to the system main wallets according to the Token Allocation
        _mint(crowdsaleWallet, totalSupplyAtBirth  * 25/100); // 25% allocation
        _mint(ecosystemWallet,  totalSupplyAtBirth * 20/100); // 20%
        _mint(reserveLiquidityWallet,  totalSupplyAtBirth * 23/100); // 23%
        _mint(teamWallet,  totalSupplyAtBirth * 12/100); // 12%
        _mint(partnerWallet,  totalSupplyAtBirth * 10/100); // 10%
        _mint(stakingRewardWallet,  totalSupplyAtBirth * 10/100); // 10%
        
        uint256 starttime = block.timestamp;
        // releasing linearly quarterly for the next 12 quarterly periods (3 years)
        lockSystemWallet(ecosystemWallet,  totalSupplyAtBirth * 20/100, starttime, 12, 7884000); 
        lockSystemWallet(reserveLiquidityWallet, totalSupplyAtBirth  * 23/100, starttime, 12, 7884000); 
        lockSystemWallet(teamWallet, totalSupplyAtBirth  * 12/100, starttime, 12, 7884000); 
        lockSystemWallet(partnerWallet, totalSupplyAtBirth *  10/100, starttime, 12, 7884000); 
        lockSystemWallet(stakingRewardWallet, totalSupplyAtBirth *  10/100, starttime, 12, 7884000); 

    }

    /**
     * @dev allocate tokens and lock to release periodically
     * allocate tokens from owner to system wallets when smart contract is deployed
     */
    function lockSystemWallet(address _wallet, uint256 _amountSum, uint256 _startTime, uint8 _forHowManyPeriods, uint256 _periodInSeconds) private {        
        uint256 amount = _amountSum/_forHowManyPeriods;
        for(uint8 i = 0; i< _forHowManyPeriods; i++) {
            uint256 releaseTime = _startTime + uint256(i)*_periodInSeconds; 
            if (i==_forHowManyPeriods-1) {
                // last month includes all the rest
                amount += (_amountSum - amount * _forHowManyPeriods); // all the rest
            }
    	    lockFund(_wallet, amount, releaseTime);
         }
         emit event_lockSystemWallet(msg.sender, _wallet,  _amountSum,  _startTime,  _forHowManyPeriods,  _periodInSeconds);
    }

	
	/**
     * @dev Returns the address of the current owner.
     */
    function owner() external view returns (address) {
        return _owner;
    }
	
	receive () payable external {   
        revert();
    }
    
    fallback () payable external {   
        revert();
    }
    
    
    /**
     * @dev check if this address is one of the system's reserve wallets
     * @return the bool true if success.
     * @param _addr The address to verify.
     */
    function isAdminWallet(address _addr) private view returns (bool) {
        return (
            _addr == crowdsaleWallet || 
            _addr == ecosystemWallet ||
            _addr == stakingRewardWallet ||
            _addr == reserveLiquidityWallet ||
            _addr == teamWallet ||
            _addr == partnerWallet 
        );
    }
    
     /**
     * @dev transfer of token to another address.
     * always require the sender has enough balance
     * @return the bool true if success. 
     * @param _receiver The address to transfer to.
     * @param _amount The amount to be transferred.
     */
     
	function transfer(address _receiver, uint256 _amount) public override returns (bool) {
	    require(_amount > 0, "amount must be larger than 0");
        require(_receiver != address(0), "cannot send to the zero address");
        require(msg.sender != _receiver, "receiver cannot be the same as sender");
	    require(_amount <= getAvailableBalance(msg.sender), "not enough enough fund to transfer");

        if (isAdminWallet(msg.sender)) {
            emit event_transfer_by_admin(msg.sender, _receiver, _amount);
        }
        return ERC20.transfer(_receiver, _amount);
	}
	
	/**
     * @dev transfer of token on behalf of the owner to another address. 
     * always require the owner has enough balance and the sender is allowed to transfer the given amount
     * @return the bool true if success. 
     * @param _from The address to transfer from.
     * @param _receiver The address to transfer to.
     * @param _amount The amount to be transferred.
     */
    function transferFrom(address _from, address _receiver, uint256 _amount) public override  returns (bool) {
        require(_amount > 0, "amount must be larger than 0");
        require(_receiver != address(0), "cannot send to the zero address");
        require(_from != _receiver, "receiver cannot be the same as sender");
        require(_amount <= getAvailableBalance(_from), "not enough enough fund to transfer");
        return ERC20.transferFrom(_from, _receiver, _amount);
    }

    /**
     * @dev transfer to a given address a given amount and lock this fund until a given time
     * used by system wallets for sending fund to team members, partners, etc who needs to be locked for certain time
     * @return the bool true if success.
     * @param _receiver The address to transfer to.
     * @param _amount The amount to transfer.
     * @param _releaseTime The date to release token.
     */
	
	function transferAndLock(address _receiver, uint256 _amount, uint256 _releaseTime) external  returns (bool) {
	    require(isAdminWallet(msg.sender), "Only system wallets can have permission to transfer and lock");
	    require(_amount > 0, "amount must be larger than 0");
        require(_receiver != address(0), "cannot send to the zero address");
        require(msg.sender != _receiver, "receiver cannot be the same as sender");
        require(_amount <= getAvailableBalance(msg.sender), "not enough enough fund to transfer");
        
	    ERC20.transfer(_receiver,_amount);
    	lockFund(_receiver, _amount, _releaseTime);
		
        emit event_transferAndLock(msg.sender, _receiver,   _amount,   _releaseTime);

        return true;
	}
	
	
	/**
     * @dev set a lock to free a given amount only to release at given time
     */
	function lockFund(address _addr, uint256 _amount, uint256 _releaseTime) private {
    	LockItem memory item = LockItem({amount:_amount, releaseTime:_releaseTime});
		lockList[_addr].push(item);
	} 
	
	
    /**
     * @return the total amount of locked funds of a given address.
     * @param lockedAddress The address to check.
     */
	function getLockedAmount(address lockedAddress) private view returns(uint256) {
	    uint256 lockedAmount =0;
	    for(uint256 j = 0; j<lockList[lockedAddress].length; j++) {
	        if(block.timestamp < lockList[lockedAddress][j].releaseTime) {
	            uint256 temp = lockList[lockedAddress][j].amount;
	            lockedAmount += temp;
	        }
	    }
	    return lockedAmount;
	}
	
	/**
     * @return the total amount of locked funds of a given address.
     * @param lockedAddress The address to check.
     */
	function getAvailableBalance(address lockedAddress) public view returns(uint256) {
	    uint256 bal = balanceOf(lockedAddress);
	    uint256 locked = getLockedAmount(lockedAddress);
        if (bal <= locked) return 0;
	    return bal-locked;
	}

	    
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"spender","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"Transfer","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_caller","type":"address"},{"indexed":false,"internalType":"address","name":"_wallet","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amountSum","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_startTime","type":"uint256"},{"indexed":false,"internalType":"uint8","name":"_forHowManyPeriods","type":"uint8"},{"indexed":false,"internalType":"uint256","name":"_periodInSeconds","type":"uint256"}],"name":"event_lockSystemWallet","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_caller","type":"address"},{"indexed":false,"internalType":"address","name":"_receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"_releaseTime","type":"uint256"}],"name":"event_transferAndLock","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"_caller","type":"address"},{"indexed":false,"internalType":"address","name":"_receiver","type":"address"},{"indexed":false,"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"event_transfer_by_admin","type":"event"},{"stateMutability":"payable","type":"fallback"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"spender","type":"address"}],"name":"allowance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"approve","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"lockedAddress","type":"address"}],"name":"getAvailableBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"lockList","outputs":[{"internalType":"uint256","name":"releaseTime","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"},{"internalType":"uint256","name":"_releaseTime","type":"uint256"}],"name":"transferAndLock","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_from","type":"address"},{"internalType":"address","name":"_receiver","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60806040523480156200001157600080fd5b506040518060400160405280600681526020017f4c796e4b657900000000000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f4c594e4b0000000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000a10565b508060049080519060200190620000af92919062000a10565b5050507307188d46b305b8183f0c7fa204a7bcbb6c2e59e9600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550739968c39f7d8ea29648203a6043ca1eef51c4e509600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073fee25971dc356ace41ff004fd2c8661a5b87c177600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073261f04b695361672210d6f02ad0dc0a371bb4b1c600960006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550734eac98e2f866830440b7e5fa4e3e78ce0a8516d9600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073611a909ab6218046872a0438e29f80d067a42d42600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555033600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000301620006dc60201b60201c565b60ff16600a62000312919062000cc7565b633b9aca0062000323919062000e04565b600c819055506200037b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646019600c5462000363919062000e04565b6200036f919062000c34565b620006e560201b60201c565b620003cd600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646014600c54620003b5919062000e04565b620003c1919062000c34565b620006e560201b60201c565b6200041f600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646017600c5462000407919062000e04565b62000413919062000c34565b620006e560201b60201c565b62000470600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600c805462000458919062000e04565b62000464919062000c34565b620006e560201b60201c565b620004c2600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600a600c54620004aa919062000e04565b620004b6919062000c34565b620006e560201b60201c565b62000514600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600a600c54620004fc919062000e04565b62000508919062000c34565b620006e560201b60201c565b600042905062000572600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646014600c5462000553919062000e04565b6200055f919062000c34565b83600c62784ce06200085e60201b60201c565b620005cb600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660646017600c54620005ac919062000e04565b620005b8919062000c34565b83600c62784ce06200085e60201b60201c565b62000623600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600c805462000604919062000e04565b62000610919062000c34565b83600c62784ce06200085e60201b60201c565b6200067c600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600a600c546200065d919062000e04565b62000669919062000c34565b83600c62784ce06200085e60201b60201c565b620006d5600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff166064600a600c54620006b6919062000e04565b620006c2919062000c34565b83600c62784ce06200085e60201b60201c565b506200104e565b60006008905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000758576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200074f9062000b87565b60405180910390fd5b6200076c600083836200096860201b60201c565b806002600082825462000780919062000bd7565b92505081905550806000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620007d7919062000bd7565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200083e919062000ba9565b60405180910390a36200085a600083836200096d60201b60201c565b5050565b60008260ff168562000871919062000c34565b905060005b8360ff168160ff1610156200091c576000838260ff1662000898919062000e04565b86620008a5919062000bd7565b9050600185620008b6919062000ea0565b60ff168260ff161415620008f2578460ff1683620008d5919062000e04565b87620008e2919062000e65565b83620008ef919062000bd7565b92505b620009058884836200097260201b60201c565b508080620009139062000f5c565b91505062000876565b507f6db2728c77670a2e819721ca71d2ed76dc7caf4ec1d20c704b74171e39ff160d338787878787604051620009589695949392919062000b1a565b60405180910390a1505050505050565b505050565b505050565b60006040518060400160405280838152602001848152509050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505050505050565b82805462000a1e9062000f26565b90600052602060002090601f01602090048101928262000a42576000855562000a8e565b82601f1062000a5d57805160ff191683800117855562000a8e565b8280016001018555821562000a8e579182015b8281111562000a8d57825182559160200191906001019062000a70565b5b50905062000a9d919062000aa1565b5090565b5b8082111562000abc57600081600090555060010162000aa2565b5090565b62000acb8162000edb565b82525050565b600062000ae0601f8362000bc6565b915062000aed8262001025565b602082019050919050565b62000b038162000f0f565b82525050565b62000b148162000f19565b82525050565b600060c08201905062000b31600083018962000ac0565b62000b40602083018862000ac0565b62000b4f604083018762000af8565b62000b5e606083018662000af8565b62000b6d608083018562000b09565b62000b7c60a083018462000af8565b979650505050505050565b6000602082019050818103600083015262000ba28162000ad1565b9050919050565b600060208201905062000bc0600083018462000af8565b92915050565b600082825260208201905092915050565b600062000be48262000f0f565b915062000bf18362000f0f565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c295762000c2862000f8b565b5b828201905092915050565b600062000c418262000f0f565b915062000c4e8362000f0f565b92508262000c615762000c6062000fba565b5b828204905092915050565b6000808291508390505b600185111562000cbe5780860481111562000c965762000c9562000f8b565b5b600185161562000ca65780820291505b808102905062000cb68562001018565b945062000c76565b94509492505050565b600062000cd48262000f0f565b915062000ce18362000f0f565b925062000d107fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff848462000d18565b905092915050565b60008262000d2a576001905062000dfd565b8162000d3a576000905062000dfd565b816001811462000d53576002811462000d5e5762000d94565b600191505062000dfd565b60ff84111562000d735762000d7262000f8b565b5b8360020a91508482111562000d8d5762000d8c62000f8b565b5b5062000dfd565b5060208310610133831016604e8410600b841016171562000dce5782820a90508381111562000dc85762000dc762000f8b565b5b62000dfd565b62000ddd848484600162000c6c565b9250905081840481111562000df75762000df662000f8b565b5b81810290505b9392505050565b600062000e118262000f0f565b915062000e1e8362000f0f565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000e5a5762000e5962000f8b565b5b828202905092915050565b600062000e728262000f0f565b915062000e7f8362000f0f565b92508282101562000e955762000e9462000f8b565b5b828203905092915050565b600062000ead8262000f19565b915062000eba8362000f19565b92508282101562000ed05762000ecf62000f8b565b5b828203905092915050565b600062000ee88262000eef565b9050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b6000600282049050600182168062000f3f57607f821691505b6020821081141562000f565762000f5562000fe9565b5b50919050565b600062000f698262000f19565b915060ff82141562000f805762000f7f62000f8b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60008160011c9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b612887806200105e6000396000f3fe6080604052600436106101025760003560e01c806370a082311161009557806395d89b411161006457806395d89b411461037d578063a457c2d7146103a8578063a9059cbb146103e5578063c8eb119714610422578063dd62ed3e146104605761010c565b806370a08231146102af57806379cc6790146102ec57806384d5d944146103155780638da5cb5b146103525761010c565b8063313ce567116100d1578063313ce567146101e1578063395093511461020c57806342966c68146102495780636c24a76f146102725761010c565b806306fdde0314610111578063095ea7b31461013c57806318160ddd1461017957806323b872dd146101a45761010c565b3661010c57600080fd5b600080fd5b34801561011d57600080fd5b5061012661049d565b6040516101339190611f21565b60405180910390f35b34801561014857600080fd5b50610163600480360381019061015e9190611b2d565b61052f565b6040516101709190611f06565b60405180910390f35b34801561018557600080fd5b5061018e61054d565b60405161019b9190612123565b60405180910390f35b3480156101b057600080fd5b506101cb60048036038101906101c69190611ada565b610557565b6040516101d89190611f06565b60405180910390f35b3480156101ed57600080fd5b506101f66106d9565b6040516102039190612167565b60405180910390f35b34801561021857600080fd5b50610233600480360381019061022e9190611b2d565b6106e2565b6040516102409190611f06565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190611bc0565b61078e565b005b34801561027e57600080fd5b5061029960048036038101906102949190611a6d565b6107a2565b6040516102a69190612123565b60405180910390f35b3480156102bb57600080fd5b506102d660048036038101906102d19190611a6d565b6107e5565b6040516102e39190612123565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190611b2d565b61082d565b005b34801561032157600080fd5b5061033c60048036038101906103379190611b6d565b6108a8565b6040516103499190611f06565b60405180910390f35b34801561035e57600080fd5b50610367610abd565b6040516103749190611e6f565b60405180910390f35b34801561038957600080fd5b50610392610ae7565b60405161039f9190611f21565b60405180910390f35b3480156103b457600080fd5b506103cf60048036038101906103ca9190611b2d565b610b79565b6040516103dc9190611f06565b60405180910390f35b3480156103f157600080fd5b5061040c60048036038101906104079190611b2d565b610c64565b6040516104199190611f06565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190611b2d565b610e2e565b60405161045792919061213e565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190611a9a565b610e6f565b6040516104949190612123565b60405180910390f35b6060600380546104ac906122b0565b80601f01602080910402602001604051908101604052809291908181526020018280546104d8906122b0565b80156105255780601f106104fa57610100808354040283529160200191610525565b820191906000526020600020905b81548152906001019060200180831161050857829003601f168201915b5050505050905090565b600061054361053c610ef6565b8484610efe565b6001905092915050565b6000600254905090565b600080821161059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059290612003565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561060b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290612103565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561067a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067190611fe3565b60405180910390fd5b610683846107a2565b8211156106c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bc906120c3565b60405180910390fd5b6106d08484846110c9565b90509392505050565b60006008905090565b60006107846106ef610ef6565b8484600160006106fd610ef6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461077f919061219e565b610efe565b6001905092915050565b61079f610799610ef6565b826111c1565b50565b6000806107ae836107e5565b905060006107bb84611398565b90508082116107cf576000925050506107e0565b80826107db91906121f4565b925050505b919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006108408361083b610ef6565b610e6f565b905081811015610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90612043565b60405180910390fd5b61089983610891610ef6565b848403610efe565b6108a383836111c1565b505050565b60006108b3336114ea565b6108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990611f63565b60405180910390fd5b60008311610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90612003565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c90612103565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b90611fe3565b60405180910390fd5b610a1d336107a2565b831115610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906120c3565b60405180910390fd5b610a6984846116fc565b50610a7584848461171a565b7fb06729a9a087e73fe35da07e5fef1e618a8aac21b2869a7d35580c82d52870bb33858585604051610aaa9493929190611ec1565b60405180910390a1600190509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610af6906122b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b22906122b0565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b5050505050905090565b60008060016000610b88610ef6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c906120e3565b60405180910390fd5b610c59610c50610ef6565b85858403610efe565b600191505092915050565b6000808211610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f90612003565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90612103565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90611fe3565b60405180910390fd5b610d90336107a2565b821115610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906120c3565b60405180910390fd5b610ddb336114ea565b15610e1c577f26b356730a2ba624eedd52b73830b2e9ce58c6cd0c0f2eac8890d1db571ac69c338484604051610e1393929190611e8a565b60405180910390a15b610e2683836116fc565b905092915050565b600d6020528160005260406000208181548110610e4a57600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f65906120a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590611fa3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110bc9190612123565b60405180910390a3505050565b60006110d68484846117b8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611121610ef6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890612023565b60405180910390fd5b6111b5856111ad610ef6565b858403610efe565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890612063565b60405180910390fd5b61123d82600083611a39565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90611f83565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461131a91906121f4565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161137f9190612123565b60405180910390a361139383600084611a3e565b505050565b6000806000905060005b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156114e057600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061143d5761143c612389565b5b9060005260206000209060020201600001544210156114cd576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106114a9576114a8612389565b5b906000526020600020906002020160010154905080836114c9919061219e565b9250505b80806114d8906122e2565b9150506113a2565b5080915050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806115955750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806115ed5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116455750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061169d5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116f55750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000611710611709610ef6565b84846117b8565b6001905092915050565b60006040518060400160405280838152602001848152509050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90612083565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90611f43565b60405180910390fd5b6118a3838383611a39565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090611fc3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119bc919061219e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a209190612123565b60405180910390a3611a33848484611a3e565b50505050565b505050565b505050565b600081359050611a5281612823565b92915050565b600081359050611a678161283a565b92915050565b600060208284031215611a8357611a826123b8565b5b6000611a9184828501611a43565b91505092915050565b60008060408385031215611ab157611ab06123b8565b5b6000611abf85828601611a43565b9250506020611ad085828601611a43565b9150509250929050565b600080600060608486031215611af357611af26123b8565b5b6000611b0186828701611a43565b9350506020611b1286828701611a43565b9250506040611b2386828701611a58565b9150509250925092565b60008060408385031215611b4457611b436123b8565b5b6000611b5285828601611a43565b9250506020611b6385828601611a58565b9150509250929050565b600080600060608486031215611b8657611b856123b8565b5b6000611b9486828701611a43565b9350506020611ba586828701611a58565b9250506040611bb686828701611a58565b9150509250925092565b600060208284031215611bd657611bd56123b8565b5b6000611be484828501611a58565b91505092915050565b611bf681612228565b82525050565b611c058161223a565b82525050565b6000611c1682612182565b611c20818561218d565b9350611c3081856020860161227d565b611c39816123bd565b840191505092915050565b6000611c5160238361218d565b9150611c5c826123ce565b604082019050919050565b6000611c74603c8361218d565b9150611c7f8261241d565b604082019050919050565b6000611c9760228361218d565b9150611ca28261246c565b604082019050919050565b6000611cba60228361218d565b9150611cc5826124bb565b604082019050919050565b6000611cdd60268361218d565b9150611ce88261250a565b604082019050919050565b6000611d0060258361218d565b9150611d0b82612559565b604082019050919050565b6000611d23601c8361218d565b9150611d2e826125a8565b602082019050919050565b6000611d4660288361218d565b9150611d51826125d1565b604082019050919050565b6000611d6960248361218d565b9150611d7482612620565b604082019050919050565b6000611d8c60218361218d565b9150611d978261266f565b604082019050919050565b6000611daf60258361218d565b9150611dba826126be565b604082019050919050565b6000611dd260248361218d565b9150611ddd8261270d565b604082019050919050565b6000611df560228361218d565b9150611e008261275c565b604082019050919050565b6000611e1860258361218d565b9150611e23826127ab565b604082019050919050565b6000611e3b601f8361218d565b9150611e46826127fa565b602082019050919050565b611e5a81612266565b82525050565b611e6981612270565b82525050565b6000602082019050611e846000830184611bed565b92915050565b6000606082019050611e9f6000830186611bed565b611eac6020830185611bed565b611eb96040830184611e51565b949350505050565b6000608082019050611ed66000830187611bed565b611ee36020830186611bed565b611ef06040830185611e51565b611efd6060830184611e51565b95945050505050565b6000602082019050611f1b6000830184611bfc565b92915050565b60006020820190508181036000830152611f3b8184611c0b565b905092915050565b60006020820190508181036000830152611f5c81611c44565b9050919050565b60006020820190508181036000830152611f7c81611c67565b9050919050565b60006020820190508181036000830152611f9c81611c8a565b9050919050565b60006020820190508181036000830152611fbc81611cad565b9050919050565b60006020820190508181036000830152611fdc81611cd0565b9050919050565b60006020820190508181036000830152611ffc81611cf3565b9050919050565b6000602082019050818103600083015261201c81611d16565b9050919050565b6000602082019050818103600083015261203c81611d39565b9050919050565b6000602082019050818103600083015261205c81611d5c565b9050919050565b6000602082019050818103600083015261207c81611d7f565b9050919050565b6000602082019050818103600083015261209c81611da2565b9050919050565b600060208201905081810360008301526120bc81611dc5565b9050919050565b600060208201905081810360008301526120dc81611de8565b9050919050565b600060208201905081810360008301526120fc81611e0b565b9050919050565b6000602082019050818103600083015261211c81611e2e565b9050919050565b60006020820190506121386000830184611e51565b92915050565b60006040820190506121536000830185611e51565b6121606020830184611e51565b9392505050565b600060208201905061217c6000830184611e60565b92915050565b600081519050919050565b600082825260208201905092915050565b60006121a982612266565b91506121b483612266565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121e9576121e861232b565b5b828201905092915050565b60006121ff82612266565b915061220a83612266565b92508282101561221d5761221c61232b565b5b828203905092915050565b600061223382612246565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561229b578082015181840152602081019050612280565b838111156122aa576000848401525b50505050565b600060028204905060018216806122c857607f821691505b602082108114156122dc576122db61235a565b5b50919050565b60006122ed82612266565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156123205761231f61232b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792073797374656d2077616c6c6574732063616e20686176652070657260008201527f6d697373696f6e20746f207472616e7366657220616e64206c6f636b00000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f72656365697665722063616e6e6f74206265207468652073616d65206173207360008201527f656e646572000000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74206d757374206265206c6172676572207468616e203000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820656e6f7567682066756e6420746f207472616e736660008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f742073656e6420746f20746865207a65726f206164647265737300600082015250565b61282c81612228565b811461283757600080fd5b50565b61284381612266565b811461284e57600080fd5b5056fea26469706673582212204d94bee29f6f5aae980b322b02751acab9ca838bcf2d7e1caa2392c84b21724564736f6c63430008070033

Deployed Bytecode

0x6080604052600436106101025760003560e01c806370a082311161009557806395d89b411161006457806395d89b411461037d578063a457c2d7146103a8578063a9059cbb146103e5578063c8eb119714610422578063dd62ed3e146104605761010c565b806370a08231146102af57806379cc6790146102ec57806384d5d944146103155780638da5cb5b146103525761010c565b8063313ce567116100d1578063313ce567146101e1578063395093511461020c57806342966c68146102495780636c24a76f146102725761010c565b806306fdde0314610111578063095ea7b31461013c57806318160ddd1461017957806323b872dd146101a45761010c565b3661010c57600080fd5b600080fd5b34801561011d57600080fd5b5061012661049d565b6040516101339190611f21565b60405180910390f35b34801561014857600080fd5b50610163600480360381019061015e9190611b2d565b61052f565b6040516101709190611f06565b60405180910390f35b34801561018557600080fd5b5061018e61054d565b60405161019b9190612123565b60405180910390f35b3480156101b057600080fd5b506101cb60048036038101906101c69190611ada565b610557565b6040516101d89190611f06565b60405180910390f35b3480156101ed57600080fd5b506101f66106d9565b6040516102039190612167565b60405180910390f35b34801561021857600080fd5b50610233600480360381019061022e9190611b2d565b6106e2565b6040516102409190611f06565b60405180910390f35b34801561025557600080fd5b50610270600480360381019061026b9190611bc0565b61078e565b005b34801561027e57600080fd5b5061029960048036038101906102949190611a6d565b6107a2565b6040516102a69190612123565b60405180910390f35b3480156102bb57600080fd5b506102d660048036038101906102d19190611a6d565b6107e5565b6040516102e39190612123565b60405180910390f35b3480156102f857600080fd5b50610313600480360381019061030e9190611b2d565b61082d565b005b34801561032157600080fd5b5061033c60048036038101906103379190611b6d565b6108a8565b6040516103499190611f06565b60405180910390f35b34801561035e57600080fd5b50610367610abd565b6040516103749190611e6f565b60405180910390f35b34801561038957600080fd5b50610392610ae7565b60405161039f9190611f21565b60405180910390f35b3480156103b457600080fd5b506103cf60048036038101906103ca9190611b2d565b610b79565b6040516103dc9190611f06565b60405180910390f35b3480156103f157600080fd5b5061040c60048036038101906104079190611b2d565b610c64565b6040516104199190611f06565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190611b2d565b610e2e565b60405161045792919061213e565b60405180910390f35b34801561046c57600080fd5b5061048760048036038101906104829190611a9a565b610e6f565b6040516104949190612123565b60405180910390f35b6060600380546104ac906122b0565b80601f01602080910402602001604051908101604052809291908181526020018280546104d8906122b0565b80156105255780601f106104fa57610100808354040283529160200191610525565b820191906000526020600020905b81548152906001019060200180831161050857829003601f168201915b5050505050905090565b600061054361053c610ef6565b8484610efe565b6001905092915050565b6000600254905090565b600080821161059b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161059290612003565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561060b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161060290612103565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16141561067a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067190611fe3565b60405180910390fd5b610683846107a2565b8211156106c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106bc906120c3565b60405180910390fd5b6106d08484846110c9565b90509392505050565b60006008905090565b60006107846106ef610ef6565b8484600160006106fd610ef6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461077f919061219e565b610efe565b6001905092915050565b61079f610799610ef6565b826111c1565b50565b6000806107ae836107e5565b905060006107bb84611398565b90508082116107cf576000925050506107e0565b80826107db91906121f4565b925050505b919050565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b60006108408361083b610ef6565b610e6f565b905081811015610885576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161087c90612043565b60405180910390fd5b61089983610891610ef6565b848403610efe565b6108a383836111c1565b505050565b60006108b3336114ea565b6108f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108e990611f63565b60405180910390fd5b60008311610935576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092c90612003565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156109a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161099c90612103565b60405180910390fd5b8373ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610a14576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0b90611fe3565b60405180910390fd5b610a1d336107a2565b831115610a5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a56906120c3565b60405180910390fd5b610a6984846116fc565b50610a7584848461171a565b7fb06729a9a087e73fe35da07e5fef1e618a8aac21b2869a7d35580c82d52870bb33858585604051610aaa9493929190611ec1565b60405180910390a1600190509392505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610af6906122b0565b80601f0160208091040260200160405190810160405280929190818152602001828054610b22906122b0565b8015610b6f5780601f10610b4457610100808354040283529160200191610b6f565b820191906000526020600020905b815481529060010190602001808311610b5257829003601f168201915b5050505050905090565b60008060016000610b88610ef6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610c45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3c906120e3565b60405180910390fd5b610c59610c50610ef6565b85858403610efe565b600191505092915050565b6000808211610ca8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9f90612003565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f90612103565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161415610d87576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7e90611fe3565b60405180910390fd5b610d90336107a2565b821115610dd2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dc9906120c3565b60405180910390fd5b610ddb336114ea565b15610e1c577f26b356730a2ba624eedd52b73830b2e9ce58c6cd0c0f2eac8890d1db571ac69c338484604051610e1393929190611e8a565b60405180910390a15b610e2683836116fc565b905092915050565b600d6020528160005260406000208181548110610e4a57600080fd5b9060005260206000209060020201600091509150508060000154908060010154905082565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f65906120a3565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd590611fa3565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110bc9190612123565b60405180910390a3505050565b60006110d68484846117b8565b6000600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000611121610ef6565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050828110156111a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119890612023565b60405180910390fd5b6111b5856111ad610ef6565b858403610efe565b60019150509392505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611231576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161122890612063565b60405180910390fd5b61123d82600083611a39565b60008060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156112c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ba90611f83565b60405180910390fd5b8181036000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816002600082825461131a91906121f4565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161137f9190612123565b60405180910390a361139383600084611a3e565b505050565b6000806000905060005b600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508110156114e057600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020818154811061143d5761143c612389565b5b9060005260206000209060020201600001544210156114cd576000600d60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002082815481106114a9576114a8612389565b5b906000526020600020906002020160010154905080836114c9919061219e565b9250505b80806114d8906122e2565b9150506113a2565b5080915050919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614806115955750600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806115ed5750600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116455750600960009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b8061169d5750600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b806116f55750600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16145b9050919050565b6000611710611709610ef6565b84846117b8565b6001905092915050565b60006040518060400160405280838152602001848152509050600d60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190806001815401808255809150506001900390600052602060002090600202016000909190919091506000820151816000015560208201518160010155505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611828576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161181f90612083565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f90611f43565b60405180910390fd5b6118a3838383611a39565b60008060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090611fc3565b60405180910390fd5b8181036000808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119bc919061219e565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef84604051611a209190612123565b60405180910390a3611a33848484611a3e565b50505050565b505050565b505050565b600081359050611a5281612823565b92915050565b600081359050611a678161283a565b92915050565b600060208284031215611a8357611a826123b8565b5b6000611a9184828501611a43565b91505092915050565b60008060408385031215611ab157611ab06123b8565b5b6000611abf85828601611a43565b9250506020611ad085828601611a43565b9150509250929050565b600080600060608486031215611af357611af26123b8565b5b6000611b0186828701611a43565b9350506020611b1286828701611a43565b9250506040611b2386828701611a58565b9150509250925092565b60008060408385031215611b4457611b436123b8565b5b6000611b5285828601611a43565b9250506020611b6385828601611a58565b9150509250929050565b600080600060608486031215611b8657611b856123b8565b5b6000611b9486828701611a43565b9350506020611ba586828701611a58565b9250506040611bb686828701611a58565b9150509250925092565b600060208284031215611bd657611bd56123b8565b5b6000611be484828501611a58565b91505092915050565b611bf681612228565b82525050565b611c058161223a565b82525050565b6000611c1682612182565b611c20818561218d565b9350611c3081856020860161227d565b611c39816123bd565b840191505092915050565b6000611c5160238361218d565b9150611c5c826123ce565b604082019050919050565b6000611c74603c8361218d565b9150611c7f8261241d565b604082019050919050565b6000611c9760228361218d565b9150611ca28261246c565b604082019050919050565b6000611cba60228361218d565b9150611cc5826124bb565b604082019050919050565b6000611cdd60268361218d565b9150611ce88261250a565b604082019050919050565b6000611d0060258361218d565b9150611d0b82612559565b604082019050919050565b6000611d23601c8361218d565b9150611d2e826125a8565b602082019050919050565b6000611d4660288361218d565b9150611d51826125d1565b604082019050919050565b6000611d6960248361218d565b9150611d7482612620565b604082019050919050565b6000611d8c60218361218d565b9150611d978261266f565b604082019050919050565b6000611daf60258361218d565b9150611dba826126be565b604082019050919050565b6000611dd260248361218d565b9150611ddd8261270d565b604082019050919050565b6000611df560228361218d565b9150611e008261275c565b604082019050919050565b6000611e1860258361218d565b9150611e23826127ab565b604082019050919050565b6000611e3b601f8361218d565b9150611e46826127fa565b602082019050919050565b611e5a81612266565b82525050565b611e6981612270565b82525050565b6000602082019050611e846000830184611bed565b92915050565b6000606082019050611e9f6000830186611bed565b611eac6020830185611bed565b611eb96040830184611e51565b949350505050565b6000608082019050611ed66000830187611bed565b611ee36020830186611bed565b611ef06040830185611e51565b611efd6060830184611e51565b95945050505050565b6000602082019050611f1b6000830184611bfc565b92915050565b60006020820190508181036000830152611f3b8184611c0b565b905092915050565b60006020820190508181036000830152611f5c81611c44565b9050919050565b60006020820190508181036000830152611f7c81611c67565b9050919050565b60006020820190508181036000830152611f9c81611c8a565b9050919050565b60006020820190508181036000830152611fbc81611cad565b9050919050565b60006020820190508181036000830152611fdc81611cd0565b9050919050565b60006020820190508181036000830152611ffc81611cf3565b9050919050565b6000602082019050818103600083015261201c81611d16565b9050919050565b6000602082019050818103600083015261203c81611d39565b9050919050565b6000602082019050818103600083015261205c81611d5c565b9050919050565b6000602082019050818103600083015261207c81611d7f565b9050919050565b6000602082019050818103600083015261209c81611da2565b9050919050565b600060208201905081810360008301526120bc81611dc5565b9050919050565b600060208201905081810360008301526120dc81611de8565b9050919050565b600060208201905081810360008301526120fc81611e0b565b9050919050565b6000602082019050818103600083015261211c81611e2e565b9050919050565b60006020820190506121386000830184611e51565b92915050565b60006040820190506121536000830185611e51565b6121606020830184611e51565b9392505050565b600060208201905061217c6000830184611e60565b92915050565b600081519050919050565b600082825260208201905092915050565b60006121a982612266565b91506121b483612266565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156121e9576121e861232b565b5b828201905092915050565b60006121ff82612266565b915061220a83612266565b92508282101561221d5761221c61232b565b5b828203905092915050565b600061223382612246565b9050919050565b60008115159050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60005b8381101561229b578082015181840152602081019050612280565b838111156122aa576000848401525b50505050565b600060028204905060018216806122c857607f821691505b602082108114156122dc576122db61235a565b5b50919050565b60006122ed82612266565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156123205761231f61232b565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f4f6e6c792073797374656d2077616c6c6574732063616e20686176652070657260008201527f6d697373696f6e20746f207472616e7366657220616e64206c6f636b00000000602082015250565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b7f72656365697665722063616e6e6f74206265207468652073616d65206173207360008201527f656e646572000000000000000000000000000000000000000000000000000000602082015250565b7f616d6f756e74206d757374206265206c6172676572207468616e203000000000600082015250565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f6e6f7420656e6f75676820656e6f7567682066756e6420746f207472616e736660008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b7f63616e6e6f742073656e6420746f20746865207a65726f206164647265737300600082015250565b61282c81612228565b811461283757600080fd5b50565b61284381612266565b811461284e57600080fd5b5056fea26469706673582212204d94bee29f6f5aae980b322b02751acab9ca838bcf2d7e1caa2392c84b21724564736f6c63430008070033

Deployed Bytecode Sourcemap

18119:8808:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22071:8;;;18119:8808;22142:8;;;6690:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8857:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7810:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23992:491;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19037:84;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;10409:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17218:91;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26665:250;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7981:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17628:368;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24919:757;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21942:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6909:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11127:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22995:591;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;18977:47;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;8559:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6690:100;6744:13;6777:5;6770:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6690:100;:::o;8857:169::-;8940:4;8957:39;8966:12;:10;:12::i;:::-;8980:7;8989:6;8957:8;:39::i;:::-;9014:4;9007:11;;8857:169;;;;:::o;7810:108::-;7871:7;7898:12;;7891:19;;7810:108;:::o;23992:491::-;24091:4;24126:1;24116:7;:11;24108:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;24200:1;24179:23;;:9;:23;;;;24171:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;24266:9;24257:18;;:5;:18;;;;24249:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24347:26;24367:5;24347:19;:26::i;:::-;24336:7;:37;;24328:84;;;;;;;;;;;;:::i;:::-;;;;;;;;;24430:45;24449:5;24456:9;24467:7;24430:18;:45::i;:::-;24423:52;;23992:491;;;;;:::o;19037:84::-;19087:5;19112:1;19105:8;;19037:84;:::o;10409:215::-;10497:4;10514:80;10523:12;:10;:12::i;:::-;10537:7;10583:10;10546:11;:25;10558:12;:10;:12::i;:::-;10546:25;;;;;;;;;;;;;;;:34;10572:7;10546:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;10514:8;:80::i;:::-;10612:4;10605:11;;10409:215;;;;:::o;17218:91::-;17274:27;17280:12;:10;:12::i;:::-;17294:6;17274:5;:27::i;:::-;17218:91;:::o;26665:250::-;26737:7;26754:11;26768:24;26778:13;26768:9;:24::i;:::-;26754:38;;26800:14;26817:30;26833:13;26817:15;:30::i;:::-;26800:47;;26869:6;26862:3;:13;26858:27;;26884:1;26877:8;;;;;;26858:27;26904:6;26900:3;:10;;;;:::i;:::-;26893:17;;;;26665:250;;;;:::o;7981:127::-;8055:7;8082:9;:18;8092:7;8082:18;;;;;;;;;;;;;;;;8075:25;;7981:127;;;:::o;17628:368::-;17705:24;17732:32;17742:7;17751:12;:10;:12::i;:::-;17732:9;:32::i;:::-;17705:59;;17803:6;17783:16;:26;;17775:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;17886:58;17895:7;17904:12;:10;:12::i;:::-;17937:6;17918:16;:25;17886:8;:58::i;:::-;17966:22;17972:7;17981:6;17966:5;:22::i;:::-;17694:302;17628:368;;:::o;24919:757::-;25021:4;25043:25;25057:10;25043:13;:25::i;:::-;25035:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;25159:1;25149:7;:11;25141:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;25233:1;25212:23;;:9;:23;;;;25204:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;25304:9;25290:23;;:10;:23;;;;25282:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25385:31;25405:10;25385:19;:31::i;:::-;25374:7;:42;;25366:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;25473:33;25488:9;25498:7;25473:14;:33::i;:::-;;25514:42;25523:9;25534:7;25543:12;25514:8;:42::i;:::-;25576:71;25598:10;25610:9;25623:7;25634:12;25576:71;;;;;;;;;:::i;:::-;;;;;;;;25667:4;25660:11;;24919:757;;;;;:::o;21942:81::-;21982:7;22009:6;;;;;;;;;;;22002:13;;21942:81;:::o;6909:104::-;6965:13;6998:7;6991:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6909:104;:::o;11127:413::-;11220:4;11237:24;11264:11;:25;11276:12;:10;:12::i;:::-;11264:25;;;;;;;;;;;;;;;:34;11290:7;11264:34;;;;;;;;;;;;;;;;11237:61;;11337:15;11317:16;:35;;11309:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;11430:67;11439:12;:10;:12::i;:::-;11453:7;11481:15;11462:16;:34;11430:8;:67::i;:::-;11528:4;11521:11;;;11127:413;;;;:::o;22995:591::-;23074:4;23106:1;23096:7;:11;23088:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;23180:1;23159:23;;:9;:23;;;;23151:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;23251:9;23237:23;;:10;:23;;;;23229:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23329:31;23349:10;23329:19;:31::i;:::-;23318:7;:42;;23310:89;;;;;;;;;;;;:::i;:::-;;;;;;;;;23416:25;23430:10;23416:13;:25::i;:::-;23412:118;;;23463:55;23487:10;23499:9;23510:7;23463:55;;;;;;;;:::i;:::-;;;;;;;;23412:118;23547:34;23562:9;23573:7;23547:14;:34::i;:::-;23540:41;;22995:591;;;;:::o;18977:47::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;8559:151::-;8648:7;8675:11;:18;8687:5;8675:18;;;;;;;;;;;;;;;:27;8694:7;8675:27;;;;;;;;;;;;;;;;8668:34;;8559:151;;;;:::o;4344:98::-;4397:7;4424:10;4417:17;;4344:98;:::o;14811:380::-;14964:1;14947:19;;:5;:19;;;;14939:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15045:1;15026:21;;:7;:21;;;;15018:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15129:6;15099:11;:18;15111:5;15099:18;;;;;;;;;;;;;;;:27;15118:7;15099:27;;;;;;;;;;;;;;;:36;;;;15167:7;15151:32;;15160:5;15151:32;;;15176:6;15151:32;;;;;;:::i;:::-;;;;;;;;14811:380;;;:::o;9508:492::-;9648:4;9665:36;9675:6;9683:9;9694:6;9665:9;:36::i;:::-;9714:24;9741:11;:19;9753:6;9741:19;;;;;;;;;;;;;;;:33;9761:12;:10;:12::i;:::-;9741:33;;;;;;;;;;;;;;;;9714:60;;9813:6;9793:16;:26;;9785:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;9900:57;9909:6;9917:12;:10;:12::i;:::-;9950:6;9931:16;:25;9900:8;:57::i;:::-;9988:4;9981:11;;;9508:492;;;;;:::o;13782:591::-;13885:1;13866:21;;:7;:21;;;;13858:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;13938:49;13959:7;13976:1;13980:6;13938:20;:49::i;:::-;14000:22;14025:9;:18;14035:7;14025:18;;;;;;;;;;;;;;;;14000:43;;14080:6;14062:14;:24;;14054:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;14199:6;14182:14;:23;14161:9;:18;14171:7;14161:18;;;;;;;;;;;;;;;:44;;;;14243:6;14227:12;;:22;;;;;;;:::i;:::-;;;;;;;;14293:1;14267:37;;14276:7;14267:37;;;14297:6;14267:37;;;;;;:::i;:::-;;;;;;;;14317:48;14337:7;14354:1;14358:6;14317:19;:48::i;:::-;13847:526;13782:591;;:::o;26124:400::-;26193:7;26210:20;26232:1;26210:23;;26245:9;26241:252;26262:8;:23;26271:13;26262:23;;;;;;;;;;;;;;;:30;;;;26260:1;:32;26241:252;;;26332:8;:23;26341:13;26332:23;;;;;;;;;;;;;;;26356:1;26332:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:38;;;26314:15;:56;26311:174;;;26388:12;26403:8;:23;26412:13;26403:23;;;;;;;;;;;;;;;26427:1;26403:26;;;;;;;;:::i;:::-;;;;;;;;;;;;:33;;;26388:48;;26468:4;26452:20;;;;;:::i;:::-;;;26372:113;26311:174;26294:3;;;;;:::i;:::-;;;;26241:252;;;;26507:12;26500:19;;;26124:400;;;:::o;22354:353::-;22414:4;22462:15;;;;;;;;;;;22453:24;;:5;:24;;;:66;;;;22504:15;;;;;;;;;;;22495:24;;:5;:24;;;22453:66;:111;;;;22545:19;;;;;;;;;;;22536:28;;:5;:28;;;22453:111;:159;;;;22590:22;;;;;;;;;;;22581:31;;:5;:31;;;22453:159;:195;;;;22638:10;;;;;;;;;;;22629:19;;:5;:19;;;22453:195;:234;;;;22674:13;;;;;;;;;;;22665:22;;:5;:22;;;22453:234;22431:268;;22354:353;;;:::o;8321:175::-;8407:4;8424:42;8434:12;:10;:12::i;:::-;8448:9;8459:6;8424:9;:42::i;:::-;8484:4;8477:11;;8321:175;;;;:::o;25777:199::-;25865:20;25888:52;;;;;;;;25926:12;25888:52;;;;25905:7;25888:52;;;25865:75;;25945:8;:15;25954:5;25945:15;;;;;;;;;;;;;;;25966:4;25945:26;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25857:119;25777:199;;;:::o;12030:733::-;12188:1;12170:20;;:6;:20;;;;12162:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12272:1;12251:23;;:9;:23;;;;12243:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12327:47;12348:6;12356:9;12367:6;12327:20;:47::i;:::-;12387:21;12411:9;:17;12421:6;12411:17;;;;;;;;;;;;;;;;12387:41;;12464:6;12447:13;:23;;12439:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;12585:6;12569:13;:22;12549:9;:17;12559:6;12549:17;;;;;;;;;;;;;;;:42;;;;12637:6;12613:9;:20;12623:9;12613:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;12678:9;12661:35;;12670:6;12661:35;;;12689:6;12661:35;;;;;;:::i;:::-;;;;;;;;12709:46;12729:6;12737:9;12748:6;12709:19;:46::i;:::-;12151:612;12030:733;;;:::o;15791:125::-;;;;:::o;16520:124::-;;;;:::o;7:139:1:-;53:5;91:6;78:20;69:29;;107:33;134:5;107:33;:::i;:::-;7:139;;;;:::o;152:::-;198:5;236:6;223:20;214:29;;252:33;279:5;252:33;:::i;:::-;152:139;;;;:::o;297:329::-;356:6;405:2;393:9;384:7;380:23;376:32;373:119;;;411:79;;:::i;:::-;373:119;531:1;556:53;601:7;592:6;581:9;577:22;556:53;:::i;:::-;546:63;;502:117;297:329;;;;:::o;632:474::-;700:6;708;757:2;745:9;736:7;732:23;728:32;725:119;;;763:79;;:::i;:::-;725:119;883:1;908:53;953:7;944:6;933:9;929:22;908:53;:::i;:::-;898:63;;854:117;1010:2;1036:53;1081:7;1072:6;1061:9;1057:22;1036:53;:::i;:::-;1026:63;;981:118;632:474;;;;;:::o;1112:619::-;1189:6;1197;1205;1254:2;1242:9;1233:7;1229:23;1225:32;1222:119;;;1260:79;;:::i;:::-;1222:119;1380:1;1405:53;1450:7;1441:6;1430:9;1426:22;1405:53;:::i;:::-;1395:63;;1351:117;1507:2;1533:53;1578:7;1569:6;1558:9;1554:22;1533:53;:::i;:::-;1523:63;;1478:118;1635:2;1661:53;1706:7;1697:6;1686:9;1682:22;1661:53;:::i;:::-;1651:63;;1606:118;1112:619;;;;;:::o;1737:474::-;1805:6;1813;1862:2;1850:9;1841:7;1837:23;1833:32;1830:119;;;1868:79;;:::i;:::-;1830:119;1988:1;2013:53;2058:7;2049:6;2038:9;2034:22;2013:53;:::i;:::-;2003:63;;1959:117;2115:2;2141:53;2186:7;2177:6;2166:9;2162:22;2141:53;:::i;:::-;2131:63;;2086:118;1737:474;;;;;:::o;2217:619::-;2294:6;2302;2310;2359:2;2347:9;2338:7;2334:23;2330:32;2327:119;;;2365:79;;:::i;:::-;2327:119;2485:1;2510:53;2555:7;2546:6;2535:9;2531:22;2510:53;:::i;:::-;2500:63;;2456:117;2612:2;2638:53;2683:7;2674:6;2663:9;2659:22;2638:53;:::i;:::-;2628:63;;2583:118;2740:2;2766:53;2811:7;2802:6;2791:9;2787:22;2766:53;:::i;:::-;2756:63;;2711:118;2217:619;;;;;:::o;2842:329::-;2901:6;2950:2;2938:9;2929:7;2925:23;2921:32;2918:119;;;2956:79;;:::i;:::-;2918:119;3076:1;3101:53;3146:7;3137:6;3126:9;3122:22;3101:53;:::i;:::-;3091:63;;3047:117;2842:329;;;;:::o;3177:118::-;3264:24;3282:5;3264:24;:::i;:::-;3259:3;3252:37;3177:118;;:::o;3301:109::-;3382:21;3397:5;3382:21;:::i;:::-;3377:3;3370:34;3301:109;;:::o;3416:364::-;3504:3;3532:39;3565:5;3532:39;:::i;:::-;3587:71;3651:6;3646:3;3587:71;:::i;:::-;3580:78;;3667:52;3712:6;3707:3;3700:4;3693:5;3689:16;3667:52;:::i;:::-;3744:29;3766:6;3744:29;:::i;:::-;3739:3;3735:39;3728:46;;3508:272;3416:364;;;;:::o;3786:366::-;3928:3;3949:67;4013:2;4008:3;3949:67;:::i;:::-;3942:74;;4025:93;4114:3;4025:93;:::i;:::-;4143:2;4138:3;4134:12;4127:19;;3786:366;;;:::o;4158:::-;4300:3;4321:67;4385:2;4380:3;4321:67;:::i;:::-;4314:74;;4397:93;4486:3;4397:93;:::i;:::-;4515:2;4510:3;4506:12;4499:19;;4158:366;;;:::o;4530:::-;4672:3;4693:67;4757:2;4752:3;4693:67;:::i;:::-;4686:74;;4769:93;4858:3;4769:93;:::i;:::-;4887:2;4882:3;4878:12;4871:19;;4530:366;;;:::o;4902:::-;5044:3;5065:67;5129:2;5124:3;5065:67;:::i;:::-;5058:74;;5141:93;5230:3;5141:93;:::i;:::-;5259:2;5254:3;5250:12;5243:19;;4902:366;;;:::o;5274:::-;5416:3;5437:67;5501:2;5496:3;5437:67;:::i;:::-;5430:74;;5513:93;5602:3;5513:93;:::i;:::-;5631:2;5626:3;5622:12;5615:19;;5274:366;;;:::o;5646:::-;5788:3;5809:67;5873:2;5868:3;5809:67;:::i;:::-;5802:74;;5885:93;5974:3;5885:93;:::i;:::-;6003:2;5998:3;5994:12;5987:19;;5646:366;;;:::o;6018:::-;6160:3;6181:67;6245:2;6240:3;6181:67;:::i;:::-;6174:74;;6257:93;6346:3;6257:93;:::i;:::-;6375:2;6370:3;6366:12;6359:19;;6018:366;;;:::o;6390:::-;6532:3;6553:67;6617:2;6612:3;6553:67;:::i;:::-;6546:74;;6629:93;6718:3;6629:93;:::i;:::-;6747:2;6742:3;6738:12;6731:19;;6390:366;;;:::o;6762:::-;6904:3;6925:67;6989:2;6984:3;6925:67;:::i;:::-;6918:74;;7001:93;7090:3;7001:93;:::i;:::-;7119:2;7114:3;7110:12;7103:19;;6762:366;;;:::o;7134:::-;7276:3;7297:67;7361:2;7356:3;7297:67;:::i;:::-;7290:74;;7373:93;7462:3;7373:93;:::i;:::-;7491:2;7486:3;7482:12;7475:19;;7134:366;;;:::o;7506:::-;7648:3;7669:67;7733:2;7728:3;7669:67;:::i;:::-;7662:74;;7745:93;7834:3;7745:93;:::i;:::-;7863:2;7858:3;7854:12;7847:19;;7506:366;;;:::o;7878:::-;8020:3;8041:67;8105:2;8100:3;8041:67;:::i;:::-;8034:74;;8117:93;8206:3;8117:93;:::i;:::-;8235:2;8230:3;8226:12;8219:19;;7878:366;;;:::o;8250:::-;8392:3;8413:67;8477:2;8472:3;8413:67;:::i;:::-;8406:74;;8489:93;8578:3;8489:93;:::i;:::-;8607:2;8602:3;8598:12;8591:19;;8250:366;;;:::o;8622:::-;8764:3;8785:67;8849:2;8844:3;8785:67;:::i;:::-;8778:74;;8861:93;8950:3;8861:93;:::i;:::-;8979:2;8974:3;8970:12;8963:19;;8622:366;;;:::o;8994:::-;9136:3;9157:67;9221:2;9216:3;9157:67;:::i;:::-;9150:74;;9233:93;9322:3;9233:93;:::i;:::-;9351:2;9346:3;9342:12;9335:19;;8994:366;;;:::o;9366:118::-;9453:24;9471:5;9453:24;:::i;:::-;9448:3;9441:37;9366:118;;:::o;9490:112::-;9573:22;9589:5;9573:22;:::i;:::-;9568:3;9561:35;9490:112;;:::o;9608:222::-;9701:4;9739:2;9728:9;9724:18;9716:26;;9752:71;9820:1;9809:9;9805:17;9796:6;9752:71;:::i;:::-;9608:222;;;;:::o;9836:442::-;9985:4;10023:2;10012:9;10008:18;10000:26;;10036:71;10104:1;10093:9;10089:17;10080:6;10036:71;:::i;:::-;10117:72;10185:2;10174:9;10170:18;10161:6;10117:72;:::i;:::-;10199;10267:2;10256:9;10252:18;10243:6;10199:72;:::i;:::-;9836:442;;;;;;:::o;10284:553::-;10461:4;10499:3;10488:9;10484:19;10476:27;;10513:71;10581:1;10570:9;10566:17;10557:6;10513:71;:::i;:::-;10594:72;10662:2;10651:9;10647:18;10638:6;10594:72;:::i;:::-;10676;10744:2;10733:9;10729:18;10720:6;10676:72;:::i;:::-;10758;10826:2;10815:9;10811:18;10802:6;10758:72;:::i;:::-;10284:553;;;;;;;:::o;10843:210::-;10930:4;10968:2;10957:9;10953:18;10945:26;;10981:65;11043:1;11032:9;11028:17;11019:6;10981:65;:::i;:::-;10843:210;;;;:::o;11059:313::-;11172:4;11210:2;11199:9;11195:18;11187:26;;11259:9;11253:4;11249:20;11245:1;11234:9;11230:17;11223:47;11287:78;11360:4;11351:6;11287:78;:::i;:::-;11279:86;;11059:313;;;;:::o;11378:419::-;11544:4;11582:2;11571:9;11567:18;11559:26;;11631:9;11625:4;11621:20;11617:1;11606:9;11602:17;11595:47;11659:131;11785:4;11659:131;:::i;:::-;11651:139;;11378:419;;;:::o;11803:::-;11969:4;12007:2;11996:9;11992:18;11984:26;;12056:9;12050:4;12046:20;12042:1;12031:9;12027:17;12020:47;12084:131;12210:4;12084:131;:::i;:::-;12076:139;;11803:419;;;:::o;12228:::-;12394:4;12432:2;12421:9;12417:18;12409:26;;12481:9;12475:4;12471:20;12467:1;12456:9;12452:17;12445:47;12509:131;12635:4;12509:131;:::i;:::-;12501:139;;12228:419;;;:::o;12653:::-;12819:4;12857:2;12846:9;12842:18;12834:26;;12906:9;12900:4;12896:20;12892:1;12881:9;12877:17;12870:47;12934:131;13060:4;12934:131;:::i;:::-;12926:139;;12653:419;;;:::o;13078:::-;13244:4;13282:2;13271:9;13267:18;13259:26;;13331:9;13325:4;13321:20;13317:1;13306:9;13302:17;13295:47;13359:131;13485:4;13359:131;:::i;:::-;13351:139;;13078:419;;;:::o;13503:::-;13669:4;13707:2;13696:9;13692:18;13684:26;;13756:9;13750:4;13746:20;13742:1;13731:9;13727:17;13720:47;13784:131;13910:4;13784:131;:::i;:::-;13776:139;;13503:419;;;:::o;13928:::-;14094:4;14132:2;14121:9;14117:18;14109:26;;14181:9;14175:4;14171:20;14167:1;14156:9;14152:17;14145:47;14209:131;14335:4;14209:131;:::i;:::-;14201:139;;13928:419;;;:::o;14353:::-;14519:4;14557:2;14546:9;14542:18;14534:26;;14606:9;14600:4;14596:20;14592:1;14581:9;14577:17;14570:47;14634:131;14760:4;14634:131;:::i;:::-;14626:139;;14353:419;;;:::o;14778:::-;14944:4;14982:2;14971:9;14967:18;14959:26;;15031:9;15025:4;15021:20;15017:1;15006:9;15002:17;14995:47;15059:131;15185:4;15059:131;:::i;:::-;15051:139;;14778:419;;;:::o;15203:::-;15369:4;15407:2;15396:9;15392:18;15384:26;;15456:9;15450:4;15446:20;15442:1;15431:9;15427:17;15420:47;15484:131;15610:4;15484:131;:::i;:::-;15476:139;;15203:419;;;:::o;15628:::-;15794:4;15832:2;15821:9;15817:18;15809:26;;15881:9;15875:4;15871:20;15867:1;15856:9;15852:17;15845:47;15909:131;16035:4;15909:131;:::i;:::-;15901:139;;15628:419;;;:::o;16053:::-;16219:4;16257:2;16246:9;16242:18;16234:26;;16306:9;16300:4;16296:20;16292:1;16281:9;16277:17;16270:47;16334:131;16460:4;16334:131;:::i;:::-;16326:139;;16053:419;;;:::o;16478:::-;16644:4;16682:2;16671:9;16667:18;16659:26;;16731:9;16725:4;16721:20;16717:1;16706:9;16702:17;16695:47;16759:131;16885:4;16759:131;:::i;:::-;16751:139;;16478:419;;;:::o;16903:::-;17069:4;17107:2;17096:9;17092:18;17084:26;;17156:9;17150:4;17146:20;17142:1;17131:9;17127:17;17120:47;17184:131;17310:4;17184:131;:::i;:::-;17176:139;;16903:419;;;:::o;17328:::-;17494:4;17532:2;17521:9;17517:18;17509:26;;17581:9;17575:4;17571:20;17567:1;17556:9;17552:17;17545:47;17609:131;17735:4;17609:131;:::i;:::-;17601:139;;17328:419;;;:::o;17753:222::-;17846:4;17884:2;17873:9;17869:18;17861:26;;17897:71;17965:1;17954:9;17950:17;17941:6;17897:71;:::i;:::-;17753:222;;;;:::o;17981:332::-;18102:4;18140:2;18129:9;18125:18;18117:26;;18153:71;18221:1;18210:9;18206:17;18197:6;18153:71;:::i;:::-;18234:72;18302:2;18291:9;18287:18;18278:6;18234:72;:::i;:::-;17981:332;;;;;:::o;18319:214::-;18408:4;18446:2;18435:9;18431:18;18423:26;;18459:67;18523:1;18512:9;18508:17;18499:6;18459:67;:::i;:::-;18319:214;;;;:::o;18620:99::-;18672:6;18706:5;18700:12;18690:22;;18620:99;;;:::o;18725:169::-;18809:11;18843:6;18838:3;18831:19;18883:4;18878:3;18874:14;18859:29;;18725:169;;;;:::o;18900:305::-;18940:3;18959:20;18977:1;18959:20;:::i;:::-;18954:25;;18993:20;19011:1;18993:20;:::i;:::-;18988:25;;19147:1;19079:66;19075:74;19072:1;19069:81;19066:107;;;19153:18;;:::i;:::-;19066:107;19197:1;19194;19190:9;19183:16;;18900:305;;;;:::o;19211:191::-;19251:4;19271:20;19289:1;19271:20;:::i;:::-;19266:25;;19305:20;19323:1;19305:20;:::i;:::-;19300:25;;19344:1;19341;19338:8;19335:34;;;19349:18;;:::i;:::-;19335:34;19394:1;19391;19387:9;19379:17;;19211:191;;;;:::o;19408:96::-;19445:7;19474:24;19492:5;19474:24;:::i;:::-;19463:35;;19408:96;;;:::o;19510:90::-;19544:7;19587:5;19580:13;19573:21;19562:32;;19510:90;;;:::o;19606:126::-;19643:7;19683:42;19676:5;19672:54;19661:65;;19606:126;;;:::o;19738:77::-;19775:7;19804:5;19793:16;;19738:77;;;:::o;19821:86::-;19856:7;19896:4;19889:5;19885:16;19874:27;;19821:86;;;:::o;19913:307::-;19981:1;19991:113;20005:6;20002:1;19999:13;19991:113;;;20090:1;20085:3;20081:11;20075:18;20071:1;20066:3;20062:11;20055:39;20027:2;20024:1;20020:10;20015:15;;19991:113;;;20122:6;20119:1;20116:13;20113:101;;;20202:1;20193:6;20188:3;20184:16;20177:27;20113:101;19962:258;19913:307;;;:::o;20226:320::-;20270:6;20307:1;20301:4;20297:12;20287:22;;20354:1;20348:4;20344:12;20375:18;20365:81;;20431:4;20423:6;20419:17;20409:27;;20365:81;20493:2;20485:6;20482:14;20462:18;20459:38;20456:84;;;20512:18;;:::i;:::-;20456:84;20277:269;20226:320;;;:::o;20552:233::-;20591:3;20614:24;20632:5;20614:24;:::i;:::-;20605:33;;20660:66;20653:5;20650:77;20647:103;;;20730:18;;:::i;:::-;20647:103;20777:1;20770:5;20766:13;20759:20;;20552:233;;;:::o;20791:180::-;20839:77;20836:1;20829:88;20936:4;20933:1;20926:15;20960:4;20957:1;20950:15;20977:180;21025:77;21022:1;21015:88;21122:4;21119:1;21112:15;21146:4;21143:1;21136:15;21163:180;21211:77;21208:1;21201:88;21308:4;21305:1;21298:15;21332:4;21329:1;21322:15;21472:117;21581:1;21578;21571:12;21595:102;21636:6;21687:2;21683:7;21678:2;21671:5;21667:14;21663:28;21653:38;;21595:102;;;:::o;21703:222::-;21843:34;21839:1;21831:6;21827:14;21820:58;21912:5;21907:2;21899:6;21895:15;21888:30;21703:222;:::o;21931:247::-;22071:34;22067:1;22059:6;22055:14;22048:58;22140:30;22135:2;22127:6;22123:15;22116:55;21931:247;:::o;22184:221::-;22324:34;22320:1;22312:6;22308:14;22301:58;22393:4;22388:2;22380:6;22376:15;22369:29;22184:221;:::o;22411:::-;22551:34;22547:1;22539:6;22535:14;22528:58;22620:4;22615:2;22607:6;22603:15;22596:29;22411:221;:::o;22638:225::-;22778:34;22774:1;22766:6;22762:14;22755:58;22847:8;22842:2;22834:6;22830:15;22823:33;22638:225;:::o;22869:224::-;23009:34;23005:1;22997:6;22993:14;22986:58;23078:7;23073:2;23065:6;23061:15;23054:32;22869:224;:::o;23099:178::-;23239:30;23235:1;23227:6;23223:14;23216:54;23099:178;:::o;23283:227::-;23423:34;23419:1;23411:6;23407:14;23400:58;23492:10;23487:2;23479:6;23475:15;23468:35;23283:227;:::o;23516:223::-;23656:34;23652:1;23644:6;23640:14;23633:58;23725:6;23720:2;23712:6;23708:15;23701:31;23516:223;:::o;23745:220::-;23885:34;23881:1;23873:6;23869:14;23862:58;23954:3;23949:2;23941:6;23937:15;23930:28;23745:220;:::o;23971:224::-;24111:34;24107:1;24099:6;24095:14;24088:58;24180:7;24175:2;24167:6;24163:15;24156:32;23971:224;:::o;24201:223::-;24341:34;24337:1;24329:6;24325:14;24318:58;24410:6;24405:2;24397:6;24393:15;24386:31;24201:223;:::o;24430:221::-;24570:34;24566:1;24558:6;24554:14;24547:58;24639:4;24634:2;24626:6;24622:15;24615:29;24430:221;:::o;24657:224::-;24797:34;24793:1;24785:6;24781:14;24774:58;24866:7;24861:2;24853:6;24849:15;24842:32;24657:224;:::o;24887:181::-;25027:33;25023:1;25015:6;25011:14;25004:57;24887:181;:::o;25074:122::-;25147:24;25165:5;25147:24;:::i;:::-;25140:5;25137:35;25127:63;;25186:1;25183;25176:12;25127:63;25074:122;:::o;25202:::-;25275:24;25293:5;25275:24;:::i;:::-;25268:5;25265:35;25255:63;;25314:1;25311;25304:12;25255:63;25202:122;:::o

Swarm Source

ipfs://4d94bee29f6f5aae980b322b02751acab9ca838bcf2d7e1caa2392c84b217245
Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.