Token DEVIUM

 

Overview [ERC-20]

Max Total Supply:
100,000,000,000 DEVI

Holders:
1 (0.00%)

Transfers:
-

Loading
[ Download CSV Export  ] 
Loading
[ Download CSV Export  ] 
Loading

OVERVIEW

Devium is a decentralized DevOps platform developed specifically for developers. All developers will be able to store source code, run it in a test environment and deploy it from Web2 to Web3 using Devium's DeviLabs. At the same time, by licensing the DeviNFT product and source codes with NFT.

# Exchange Pair Price  24H Volume % Volume
Loading

Contract Source Code Verified (Exact Match)

Contract Name:
DEVItoken

Compiler Version
v0.8.12+commit.f00d7308

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-02-18
*/

//SPDX-License-Identifier: UNLICENSED
pragma solidity ^0.8.0;

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

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

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }

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

abstract contract Ownable is Context {
    address private _owner;

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

    /**
     * @dev Initializes the contract setting the deployer as the initial owner.
     */
    constructor() {
        _transferOwnership(_msgSender());
    }

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

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

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

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Can only be called by the current owner.
     */
    function transferOwnership(address newOwner) public virtual onlyOwner {
        require(newOwner != address(0), "Ownable: new owner is the zero address");
        _transferOwnership(newOwner);
    }

    /**
     * @dev Transfers ownership of the contract to a new account (`newOwner`).
     * Internal function without access restriction.
     */
    function _transferOwnership(address newOwner) internal virtual {
        address oldOwner = _owner;
        _owner = newOwner;
        emit OwnershipTransferred(oldOwner, newOwner);
    }
}


contract TokenVesting is Ownable{
    
    struct VestedToken{
        uint256 cliff;
        uint256 start;
        uint256 duration;
        uint256 releasedToken;
        uint256 totalToken;
        bool revoked;
    }
    
    mapping (address => VestedToken) public vestedUser; 
    
    // default Vesting parameter values
    uint256 private _cliff = 2678400; // 31 days 
    uint256 private _duration = 31536000; // 365 days 
    bool private _revoked = false;
    
    IERC20 public DEVIToken;
    address public _presale;

    event TokenReleased(address indexed account, uint256 amount);
    event VestingRevoked(address indexed account);
    
    /**
     * @dev Its a modifier in which we authenticate the caller is owner or DEVIToken Smart Contract
     */ 
    modifier onlyDeviTokenAndOwner() {
        require(msg.sender==owner() || msg.sender == address(DEVIToken) || msg.sender == _presale);
        _;
    }
    
    /**
     * @dev First we have to set token address before doing any thing 
     * @param token Tiger Smart contract Address
     */
     
    function setTokenAddress(IERC20 token) public onlyOwner returns(bool){
        DEVIToken = token;
        return true;
    }

    function setPresaleAddress(address add) public onlyOwner returns(bool){
        _presale = add;
        return true;
    }
    
    /**
     * @dev this will set the beneficiary with default vesting 
     * parameters ie, every month for 3 years
     * @param account address of the beneficiary for vesting
     * @param amount  totalToken to be vested
     */
     
     function setDefaultVesting(address account, uint256 amount) public onlyDeviTokenAndOwner returns(bool){
         _setDefaultVesting(account, amount);
         return true;
     }
     
     /**
      *@dev Internal function to set default vesting parameters
      */
      
     function _setDefaultVesting(address account, uint256 amount)  internal {
         require(account!=address(0));
         VestedToken storage vested = vestedUser[account];
         vested.cliff = _cliff;
         vested.start = block.timestamp;
         vested.duration += _duration;
         vested.totalToken += amount;
         vested.releasedToken = vested.releasedToken;
         vested.revoked = _revoked;
     }
     
     
     /**
     * @dev this will set the beneficiary with vesting 
     * parameters provided
     * @param account address of the beneficiary for vesting
     * @param amount  totalToken to be vested
     * @param cliff In seconds of one period in vesting
     * @param duration In seconds of total vesting 
     * @param startAt UNIX timestamp in seconds from where vesting will start
     */
     
     function setVesting(address account, uint256 amount, uint256 cliff, uint256 duration, uint256 startAt ) public onlyDeviTokenAndOwner  returns(bool){
         _setVesting(account, amount, cliff, duration, startAt);
         return true;
     }
     
     /**
      * @dev Internal function to set default vesting parameters
      * @param account address of the beneficiary for vesting
      * @param amount  totalToken to be vested
      * @param cliff In seconds of one period in vestin
      * @param duration In seconds of total vesting duration
      * @param startAt UNIX timestamp in seconds from where vesting will start
      *
      */
     
     function _setVesting(address account, uint256 amount, uint256 cliff, uint256 duration, uint256 startAt) internal {
         
         require(account!=address(0));
         require(cliff<=duration);
         VestedToken storage vested = vestedUser[account];
         vested.cliff = cliff;
         vested.start = startAt;
         vested.duration += duration;
         vested.totalToken += amount;
         vested.releasedToken = vested.releasedToken;
         vested.revoked = false;
     }

    /**
     * @notice Transfers vested tokens to beneficiary.
     * anyone can release their token 
     */
     
    function releaseMyToken() public returns(bool) {
        releaseToken(msg.sender);
        return true;
    }
    
     /**
     * @notice Transfers vested tokens to the given account.
     * @param account address of the vested user
     */
    function releaseToken(address account) public {
       require(account != address(0));
       VestedToken storage vested = vestedUser[account];
       uint256 unreleasedToken = _releasableAmount(account);  // total releasable token currently
       require(unreleasedToken>0);
       vested.releasedToken = vested.releasedToken + (unreleasedToken);
       DEVIToken.transfer(account,unreleasedToken);
       emit TokenReleased(account, unreleasedToken);
    }
    
    /**
     * @dev Calculates the amount that has already vested but hasn't been released yet.
     * @param account address of user
     */
    function _releasableAmount(address account) internal view returns (uint256) {
        return _vestedAmount(account) - (vestedUser[account].releasedToken);
    }

  
    /**
     * @dev Calculates the amount that has already vested.
     * @param account address of the user
     */
    function _vestedAmount(address account) internal view returns (uint256) {
        VestedToken storage vested = vestedUser[account];
        uint256 totalToken = vested.totalToken;
        if(block.timestamp <  vested.start + (vested.cliff)){
            return 0;
        }else if(block.timestamp >= vested.start+(vested.duration) || vested.revoked){
            return totalToken;
        }else{
            uint256 numberOfPeriods = (block.timestamp - (vested.start))/(vested.cliff);
            return (totalToken*(numberOfPeriods*(vested.cliff)))/(vested.duration);
        }
    }
    
    /**
     * @notice Allows the owner to revoke the vesting. Tokens already vested
     * remain in the contract, the rest are returned to the owner.
     * @param account address in which the vesting is revoked
     */
    function revoke(address account) public onlyOwner {
        VestedToken storage vested = vestedUser[account];
        require(!vested.revoked);
        uint256 balance = vested.totalToken;
        uint256 unreleased = _releasableAmount(account);
        uint256 refund = balance - (unreleased);
        vested.revoked = true;
        vested.totalToken = unreleased;
        DEVIToken.transfer(owner(), refund);
        emit VestingRevoked(account);
    }
    
    
    
    
}

contract DEVItoken is Context, IERC20, IERC20Metadata, Ownable {
    mapping(address => uint256) private _balances;

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

    uint256 private _totalSupply;

    TokenVesting public vestingContractAddress;
    
    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() {
        _name = "DEVIUM";
        _symbol = "DEVI";
        _mint(msg.sender, 100000000000 * 1e18 );
    }

    /**
     * @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);
    }

    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);
    }
    
    /**
     * @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 {}



    /**
     * @dev Set Vesting Token Smart contract Address before starting vesting
     * @param tokenVestingAddress Smart conract Address of the Vesting Smart contract
     */ 
    function setTokenVestingAddress(TokenVesting tokenVestingAddress) external onlyOwner returns(bool){
        vestingContractAddress = tokenVestingAddress;
        return true;
    }
    
    
    /**
     * @dev Vesting users token by default parameters
     * @param account address of the user 
     * @param amount the amount to be vested
     */
     function setDefaultVestingToken(address account, uint256 amount) external onlyOwner returns(bool){
         vestingContractAddress.setDefaultVesting(account, amount);
         _transfer(msg.sender,address(vestingContractAddress), amount);
         return true;
     }
     
    /**
     * @dev Vesting users token by given parameters
     * @param account address of the beneficiary for vesting
     * @param amount  totalToken to be vested
     * @param cliff In seconds of one period in vestin
     * @param duration In seconds of total vesting duration
     * @param startAt UNIX timestamp in seconds from where vesting will start
     */
     function setVestingToken(address account, uint256 amount, uint256 cliff, uint256 duration, uint256 startAt) external onlyOwner returns(bool){
         vestingContractAddress.setVesting(account, amount, cliff, duration, startAt);
         _transfer(msg.sender ,address(vestingContractAddress), amount);
         return true;
     }
}

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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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"},{"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":"view","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":"spender","type":"address"},{"internalType":"uint256","name":"addedValue","type":"uint256"}],"name":"increaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"setDefaultVestingToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"contract TokenVesting","name":"tokenVestingAddress","type":"address"}],"name":"setTokenVestingAddress","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"cliff","type":"uint256"},{"internalType":"uint256","name":"duration","type":"uint256"},{"internalType":"uint256","name":"startAt","type":"uint256"}],"name":"setVestingToken","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","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":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"address","name":"recipient","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transferFrom","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"vestingContractAddress","outputs":[{"internalType":"contract TokenVesting","name":"","type":"address"}],"stateMutability":"view","type":"function"}]

60806040523480156200001157600080fd5b506200003262000026620000f360201b60201c565b620000fb60201b60201c565b6040518060400160405280600681526020017f44455649554d0000000000000000000000000000000000000000000000000000815250600590805190602001906200007f92919062000343565b506040518060400160405280600481526020017f444556490000000000000000000000000000000000000000000000000000000081525060069080519060200190620000cd92919062000343565b50620000ed336c01431e0fae6d7217caa0000000620001bf60201b60201c565b6200059f565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000232576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002299062000454565b60405180910390fd5b62000246600083836200033960201b60201c565b80600360008282546200025a9190620004af565b9250508190555080600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254620002b29190620004af565b925050819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef836040516200031991906200051d565b60405180910390a362000335600083836200033e60201b60201c565b5050565b505050565b505050565b828054620003519062000569565b90600052602060002090601f016020900481019282620003755760008555620003c1565b82601f106200039057805160ff1916838001178555620003c1565b82800160010185558215620003c1579182015b82811115620003c0578251825591602001919060010190620003a3565b5b509050620003d09190620003d4565b5090565b5b80821115620003ef576000816000905550600101620003d5565b5090565b600082825260208201905092915050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b60006200043c601f83620003f3565b9150620004498262000404565b602082019050919050565b600060208201905081810360008301526200046f816200042d565b9050919050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000620004bc8262000476565b9150620004c98362000476565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000501576200050062000480565b5b828201905092915050565b620005178162000476565b82525050565b60006020820190506200053460008301846200050c565b92915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200058257607f821691505b602082108114156200059957620005986200053a565b5b50919050565b61234780620005af6000396000f3fe608060405234801561001057600080fd5b506004361061012c5760003560e01c806379cc6790116100ad578063a457c2d711610071578063a457c2d714610347578063a9059cbb14610377578063ba7c11a2146103a7578063dd62ed3e146103d7578063f2fde38b146104075761012c565b806379cc6790146102a15780638ca9f786146102bd5780638da5cb5b146102ed57806395d89b411461030b5780639e7bf05f146103295761012c565b8063313ce567116100f4578063313ce567146101fd578063395093511461021b57806342966c681461024b57806370a0823114610267578063715018a6146102975761012c565b806306fdde031461013157806307f97a3b1461014f578063095ea7b31461017f57806318160ddd146101af57806323b872dd146101cd575b600080fd5b610139610423565b6040516101469190611667565b60405180910390f35b610169600480360381019061016491906116fe565b6104b5565b6040516101769190611746565b60405180910390f35b610199600480360381019061019491906117c3565b61057d565b6040516101a69190611746565b60405180910390f35b6101b761059b565b6040516101c49190611812565b60405180910390f35b6101e760048036038101906101e2919061182d565b6105a5565b6040516101f49190611746565b60405180910390f35b61020561069d565b604051610212919061189c565b60405180910390f35b610235600480360381019061023091906117c3565b6106a6565b6040516102429190611746565b60405180910390f35b610265600480360381019061026091906118b7565b610752565b005b610281600480360381019061027c91906118e4565b610766565b60405161028e9190611812565b60405180910390f35b61029f6107af565b005b6102bb60048036038101906102b691906117c3565b610837565b005b6102d760048036038101906102d29190611911565b6108b2565b6040516102e49190611746565b60405180910390f35b6102f5610a11565b604051610302919061199b565b60405180910390f35b610313610a3a565b6040516103209190611667565b60405180910390f35b610331610acc565b60405161033e9190611a15565b60405180910390f35b610361600480360381019061035c91906117c3565b610af2565b60405161036e9190611746565b60405180910390f35b610391600480360381019061038c91906117c3565b610bdd565b60405161039e9190611746565b60405180910390f35b6103c160048036038101906103bc91906117c3565b610bfb565b6040516103ce9190611746565b60405180910390f35b6103f160048036038101906103ec9190611a30565b610d51565b6040516103fe9190611812565b60405180910390f35b610421600480360381019061041c91906118e4565b610dd8565b005b60606005805461043290611a9f565b80601f016020809104026020016040519081016040528092919081815260200182805461045e90611a9f565b80156104ab5780601f10610480576101008083540402835291602001916104ab565b820191906000526020600020905b81548152906001019060200180831161048e57829003601f168201915b5050505050905090565b60006104bf610ed0565b73ffffffffffffffffffffffffffffffffffffffff166104dd610a11565b73ffffffffffffffffffffffffffffffffffffffff1614610533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161052a90611b1d565b60405180910390fd5b81600460006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555060019050919050565b600061059161058a610ed0565b8484610ed8565b6001905092915050565b6000600354905090565b60006105b28484846110a3565b6000600260008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006105fd610ed0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508281101561067d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161067490611baf565b60405180910390fd5b61069185610689610ed0565b858403610ed8565b60019150509392505050565b60006012905090565b60006107486106b3610ed0565b8484600260006106c1610ed0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546107439190611bfe565b610ed8565b6001905092915050565b61076361075d610ed0565b82611327565b50565b6000600160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6107b7610ed0565b73ffffffffffffffffffffffffffffffffffffffff166107d5610a11565b73ffffffffffffffffffffffffffffffffffffffff161461082b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161082290611b1d565b60405180910390fd5b6108356000611500565b565b600061084a83610845610ed0565b610d51565b90508181101561088f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161088690611cc6565b60405180910390fd5b6108a38361089b610ed0565b848403610ed8565b6108ad8383611327565b505050565b60006108bc610ed0565b73ffffffffffffffffffffffffffffffffffffffff166108da610a11565b73ffffffffffffffffffffffffffffffffffffffff1614610930576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092790611b1d565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16632a2eddde87878787876040518663ffffffff1660e01b8152600401610993959493929190611ce6565b6020604051808303816000875af11580156109b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109d69190611d65565b50610a0433600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16876110a3565b6001905095945050505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060068054610a4990611a9f565b80601f0160208091040260200160405190810160405280929190818152602001828054610a7590611a9f565b8015610ac25780601f10610a9757610100808354040283529160200191610ac2565b820191906000526020600020905b815481529060010190602001808311610aa557829003601f168201915b5050505050905090565b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60008060026000610b01610ed0565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905082811015610bbe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bb590611e04565b60405180910390fd5b610bd2610bc9610ed0565b85858403610ed8565b600191505092915050565b6000610bf1610bea610ed0565b84846110a3565b6001905092915050565b6000610c05610ed0565b73ffffffffffffffffffffffffffffffffffffffff16610c23610a11565b73ffffffffffffffffffffffffffffffffffffffff1614610c79576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7090611b1d565b60405180910390fd5b600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16630e77e5e384846040518363ffffffff1660e01b8152600401610cd6929190611e24565b6020604051808303816000875af1158015610cf5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d199190611d65565b50610d4733600460009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16846110a3565b6001905092915050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b610de0610ed0565b73ffffffffffffffffffffffffffffffffffffffff16610dfe610a11565b73ffffffffffffffffffffffffffffffffffffffff1614610e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e4b90611b1d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ec4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ebb90611ebf565b60405180910390fd5b610ecd81611500565b50565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610f48576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f3f90611f51565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610fb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610faf90611fe3565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516110969190611812565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611113576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110a90612075565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611183576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117a90612107565b60405180910390fd5b61118e8383836115c4565b6000600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611215576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120c90612199565b60405180910390fd5b818103600160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208190555081600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112aa9190611bfe565b925050819055508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161130e9190611812565b60405180910390a36113218484846115c9565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611397576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161138e9061222b565b60405180910390fd5b6113a3826000836115c4565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508181101561142a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611421906122bd565b60405180910390fd5b818103600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816003600082825461148291906122dd565b92505081905550600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef846040516114e79190611812565b60405180910390a36114fb836000846115c9565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b838110156116085780820151818401526020810190506115ed565b83811115611617576000848401525b50505050565b6000601f19601f8301169050919050565b6000611639826115ce565b61164381856115d9565b93506116538185602086016115ea565b61165c8161161d565b840191505092915050565b60006020820190508181036000830152611681818461162e565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006116b98261168e565b9050919050565b60006116cb826116ae565b9050919050565b6116db816116c0565b81146116e657600080fd5b50565b6000813590506116f8816116d2565b92915050565b60006020828403121561171457611713611689565b5b6000611722848285016116e9565b91505092915050565b60008115159050919050565b6117408161172b565b82525050565b600060208201905061175b6000830184611737565b92915050565b61176a816116ae565b811461177557600080fd5b50565b60008135905061178781611761565b92915050565b6000819050919050565b6117a08161178d565b81146117ab57600080fd5b50565b6000813590506117bd81611797565b92915050565b600080604083850312156117da576117d9611689565b5b60006117e885828601611778565b92505060206117f9858286016117ae565b9150509250929050565b61180c8161178d565b82525050565b60006020820190506118276000830184611803565b92915050565b60008060006060848603121561184657611845611689565b5b600061185486828701611778565b935050602061186586828701611778565b9250506040611876868287016117ae565b9150509250925092565b600060ff82169050919050565b61189681611880565b82525050565b60006020820190506118b1600083018461188d565b92915050565b6000602082840312156118cd576118cc611689565b5b60006118db848285016117ae565b91505092915050565b6000602082840312156118fa576118f9611689565b5b600061190884828501611778565b91505092915050565b600080600080600060a0868803121561192d5761192c611689565b5b600061193b88828901611778565b955050602061194c888289016117ae565b945050604061195d888289016117ae565b935050606061196e888289016117ae565b925050608061197f888289016117ae565b9150509295509295909350565b611995816116ae565b82525050565b60006020820190506119b0600083018461198c565b92915050565b6000819050919050565b60006119db6119d66119d18461168e565b6119b6565b61168e565b9050919050565b60006119ed826119c0565b9050919050565b60006119ff826119e2565b9050919050565b611a0f816119f4565b82525050565b6000602082019050611a2a6000830184611a06565b92915050565b60008060408385031215611a4757611a46611689565b5b6000611a5585828601611778565b9250506020611a6685828601611778565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680611ab757607f821691505b60208210811415611acb57611aca611a70565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000611b076020836115d9565b9150611b1282611ad1565b602082019050919050565b60006020820190508181036000830152611b3681611afa565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206160008201527f6c6c6f77616e6365000000000000000000000000000000000000000000000000602082015250565b6000611b996028836115d9565b9150611ba482611b3d565b604082019050919050565b60006020820190508181036000830152611bc881611b8c565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000611c098261178d565b9150611c148361178d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115611c4957611c48611bcf565b5b828201905092915050565b7f45524332303a206275726e20616d6f756e74206578636565647320616c6c6f7760008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b6000611cb06024836115d9565b9150611cbb82611c54565b604082019050919050565b60006020820190508181036000830152611cdf81611ca3565b9050919050565b600060a082019050611cfb600083018861198c565b611d086020830187611803565b611d156040830186611803565b611d226060830185611803565b611d2f6080830184611803565b9695505050505050565b611d428161172b565b8114611d4d57600080fd5b50565b600081519050611d5f81611d39565b92915050565b600060208284031215611d7b57611d7a611689565b5b6000611d8984828501611d50565b91505092915050565b7f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f7760008201527f207a65726f000000000000000000000000000000000000000000000000000000602082015250565b6000611dee6025836115d9565b9150611df982611d92565b604082019050919050565b60006020820190508181036000830152611e1d81611de1565b9050919050565b6000604082019050611e39600083018561198c565b611e466020830184611803565b9392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000611ea96026836115d9565b9150611eb482611e4d565b604082019050919050565b60006020820190508181036000830152611ed881611e9c565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000611f3b6024836115d9565b9150611f4682611edf565b604082019050919050565b60006020820190508181036000830152611f6a81611f2e565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000611fcd6022836115d9565b9150611fd882611f71565b604082019050919050565b60006020820190508181036000830152611ffc81611fc0565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061205f6025836115d9565b915061206a82612003565b604082019050919050565b6000602082019050818103600083015261208e81612052565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b60006120f16023836115d9565b91506120fc82612095565b604082019050919050565b60006020820190508181036000830152612120816120e4565b9050919050565b7f45524332303a207472616e7366657220616d6f756e742065786365656473206260008201527f616c616e63650000000000000000000000000000000000000000000000000000602082015250565b60006121836026836115d9565b915061218e82612127565b604082019050919050565b600060208201905081810360008301526121b281612176565b9050919050565b7f45524332303a206275726e2066726f6d20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b60006122156021836115d9565b9150612220826121b9565b604082019050919050565b6000602082019050818103600083015261224481612208565b9050919050565b7f45524332303a206275726e20616d6f756e7420657863656564732062616c616e60008201527f6365000000000000000000000000000000000000000000000000000000000000602082015250565b60006122a76022836115d9565b91506122b28261224b565b604082019050919050565b600060208201905081810360008301526122d68161229a565b9050919050565b60006122e88261178d565b91506122f38361178d565b92508282101561230657612305611bcf565b5b82820390509291505056fea2646970667358221220c631f3cca6965055a255267b7962675075b1f9ce14fe23df4adc1c83a522401e64736f6c634300080c0033

Deployed ByteCode Sourcemap

11878:13161:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12736:100;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23676:183;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14903:169;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13856:108;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;15554:492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;13698:93;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;16455:215;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;20427:91;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;14027:127;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4473:103;;;:::i;:::-;;20837:368;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24702:334;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3822:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12955:104;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12115:42;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;17173:413;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14367:175;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24041:271;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;14605:151;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4731:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12736:100;12790:13;12823:5;12816:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12736:100;:::o;23676:183::-;23769:4;4053:12;:10;:12::i;:::-;4042:23;;:7;:5;:7::i;:::-;:23;;;4034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;23810:19:::1;23785:22;;:44;;;;;;;;;;;;;;;;;;23847:4;23840:11;;23676:183:::0;;;:::o;14903:169::-;14986:4;15003:39;15012:12;:10;:12::i;:::-;15026:7;15035:6;15003:8;:39::i;:::-;15060:4;15053:11;;14903:169;;;;:::o;13856:108::-;13917:7;13944:12;;13937:19;;13856:108;:::o;15554:492::-;15694:4;15711:36;15721:6;15729:9;15740:6;15711:9;:36::i;:::-;15760:24;15787:11;:19;15799:6;15787:19;;;;;;;;;;;;;;;:33;15807:12;:10;:12::i;:::-;15787:33;;;;;;;;;;;;;;;;15760:60;;15859:6;15839:16;:26;;15831:79;;;;;;;;;;;;:::i;:::-;;;;;;;;;15946:57;15955:6;15963:12;:10;:12::i;:::-;15996:6;15977:16;:25;15946:8;:57::i;:::-;16034:4;16027:11;;;15554:492;;;;;:::o;13698:93::-;13756:5;13781:2;13774:9;;13698:93;:::o;16455:215::-;16543:4;16560:80;16569:12;:10;:12::i;:::-;16583:7;16629:10;16592:11;:25;16604:12;:10;:12::i;:::-;16592:25;;;;;;;;;;;;;;;:34;16618:7;16592:34;;;;;;;;;;;;;;;;:47;;;;:::i;:::-;16560:8;:80::i;:::-;16658:4;16651:11;;16455:215;;;;:::o;20427:91::-;20483:27;20489:12;:10;:12::i;:::-;20503:6;20483:5;:27::i;:::-;20427:91;:::o;14027:127::-;14101:7;14128:9;:18;14138:7;14128:18;;;;;;;;;;;;;;;;14121:25;;14027:127;;;:::o;4473:103::-;4053:12;:10;:12::i;:::-;4042:23;;:7;:5;:7::i;:::-;:23;;;4034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4538:30:::1;4565:1;4538:18;:30::i;:::-;4473:103::o:0;20837:368::-;20914:24;20941:32;20951:7;20960:12;:10;:12::i;:::-;20941:9;:32::i;:::-;20914:59;;21012:6;20992:16;:26;;20984:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;21095:58;21104:7;21113:12;:10;:12::i;:::-;21146:6;21127:16;:25;21095:8;:58::i;:::-;21175:22;21181:7;21190:6;21175:5;:22::i;:::-;20903:302;20837:368;;:::o;24702:334::-;24837:4;4053:12;:10;:12::i;:::-;4042:23;;:7;:5;:7::i;:::-;:23;;;4034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24854:22:::1;;;;;;;;;;;:33;;;24888:7;24897:6;24905:5;24912:8;24922:7;24854:76;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24942:62;24952:10;24972:22;;;;;;;;;;;24997:6;24942:9;:62::i;:::-;25023:4;25016:11;;24702:334:::0;;;;;;;:::o;3822:87::-;3868:7;3895:6;;;;;;;;;;;3888:13;;3822:87;:::o;12955:104::-;13011:13;13044:7;13037:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12955:104;:::o;12115:42::-;;;;;;;;;;;;;:::o;17173:413::-;17266:4;17283:24;17310:11;:25;17322:12;:10;:12::i;:::-;17310:25;;;;;;;;;;;;;;;:34;17336:7;17310:34;;;;;;;;;;;;;;;;17283:61;;17383:15;17363:16;:35;;17355:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;17476:67;17485:12;:10;:12::i;:::-;17499:7;17527:15;17508:16;:34;17476:8;:67::i;:::-;17574:4;17567:11;;;17173:413;;;;:::o;14367:175::-;14453:4;14470:42;14480:12;:10;:12::i;:::-;14494:9;14505:6;14470:9;:42::i;:::-;14530:4;14523:11;;14367:175;;;;:::o;24041:271::-;24133:4;4053:12;:10;:12::i;:::-;4042:23;;:7;:5;:7::i;:::-;:23;;;4034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;24150:22:::1;;;;;;;;;;;:40;;;24191:7;24200:6;24150:57;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;24219:61;24229:10;24248:22;;;;;;;;;;;24273:6;24219:9;:61::i;:::-;24299:4;24292:11;;24041:271:::0;;;;:::o;14605:151::-;14694:7;14721:11;:18;14733:5;14721:18;;;;;;;;;;;;;;;:27;14740:7;14721:27;;;;;;;;;;;;;;;;14714:34;;14605:151;;;;:::o;4731:201::-;4053:12;:10;:12::i;:::-;4042:23;;:7;:5;:7::i;:::-;:23;;;4034:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4840:1:::1;4820:22;;:8;:22;;;;4812:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4896:28;4915:8;4896:18;:28::i;:::-;4731:201:::0;:::o;3196:98::-;3249:7;3276:10;3269:17;;3196:98;:::o;21647:380::-;21800:1;21783:19;;:5;:19;;;;21775:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21881:1;21862:21;;:7;:21;;;;21854:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;21965:6;21935:11;:18;21947:5;21935:18;;;;;;;;;;;;;;;:27;21954:7;21935:27;;;;;;;;;;;;;;;:36;;;;22003:7;21987:32;;21996:5;21987:32;;;22012:6;21987:32;;;;;;:::i;:::-;;;;;;;;21647:380;;;:::o;18076:733::-;18234:1;18216:20;;:6;:20;;;;18208:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;18318:1;18297:23;;:9;:23;;;;18289:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;18373:47;18394:6;18402:9;18413:6;18373:20;:47::i;:::-;18433:21;18457:9;:17;18467:6;18457:17;;;;;;;;;;;;;;;;18433:41;;18510:6;18493:13;:23;;18485:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;18631:6;18615:13;:22;18595:9;:17;18605:6;18595:17;;;;;;;;;;;;;;;:42;;;;18683:6;18659:9;:20;18669:9;18659:20;;;;;;;;;;;;;;;;:30;;;;;;;:::i;:::-;;;;;;;;18724:9;18707:35;;18716:6;18707:35;;;18735:6;18707:35;;;;;;:::i;:::-;;;;;;;;18755:46;18775:6;18783:9;18794:6;18755:19;:46::i;:::-;18197:612;18076:733;;;:::o;19828:591::-;19931:1;19912:21;;:7;:21;;;;19904:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;19984:49;20005:7;20022:1;20026:6;19984:20;:49::i;:::-;20046:22;20071:9;:18;20081:7;20071:18;;;;;;;;;;;;;;;;20046:43;;20126:6;20108:14;:24;;20100:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;20245:6;20228:14;:23;20207:9;:18;20217:7;20207:18;;;;;;;;;;;;;;;:44;;;;20289:6;20273:12;;:22;;;;;;;:::i;:::-;;;;;;;;20339:1;20313:37;;20322:7;20313:37;;;20343:6;20313:37;;;;;;:::i;:::-;;;;;;;;20363:48;20383:7;20400:1;20404:6;20363:19;:48::i;:::-;19893:526;19828:591;;:::o;5092:191::-;5166:16;5185:6;;;;;;;;;;;5166:25;;5211:8;5202:6;;:17;;;;;;;;;;;;;;;;;;5266:8;5235:40;;5256:8;5235:40;;;;;;;;;;;;5155:128;5092:191;:::o;22627:125::-;;;;:::o;23356:124::-;;;;:::o;7:99:1:-;59:6;93:5;87:12;77:22;;7:99;;;:::o;112:169::-;196:11;230:6;225:3;218:19;270:4;265:3;261:14;246:29;;112:169;;;;:::o;287:307::-;355:1;365:113;379:6;376:1;373:13;365:113;;;464:1;459:3;455:11;449:18;445:1;440:3;436:11;429:39;401:2;398:1;394:10;389:15;;365:113;;;496:6;493:1;490:13;487:101;;;576:1;567:6;562:3;558:16;551:27;487:101;336:258;287:307;;;:::o;600:102::-;641:6;692:2;688:7;683:2;676:5;672:14;668:28;658:38;;600:102;;;:::o;708:364::-;796:3;824:39;857:5;824:39;:::i;:::-;879:71;943:6;938:3;879:71;:::i;:::-;872:78;;959:52;1004:6;999:3;992:4;985:5;981:16;959:52;:::i;:::-;1036:29;1058:6;1036:29;:::i;:::-;1031:3;1027:39;1020:46;;800:272;708:364;;;;:::o;1078:313::-;1191:4;1229:2;1218:9;1214:18;1206:26;;1278:9;1272:4;1268:20;1264:1;1253:9;1249:17;1242:47;1306:78;1379:4;1370:6;1306:78;:::i;:::-;1298:86;;1078:313;;;;:::o;1478:117::-;1587:1;1584;1577:12;1724:126;1761:7;1801:42;1794:5;1790:54;1779:65;;1724:126;;;:::o;1856:96::-;1893:7;1922:24;1940:5;1922:24;:::i;:::-;1911:35;;1856:96;;;:::o;1958:116::-;2015:7;2044:24;2062:5;2044:24;:::i;:::-;2033:35;;1958:116;;;:::o;2080:162::-;2173:44;2211:5;2173:44;:::i;:::-;2166:5;2163:55;2153:83;;2232:1;2229;2222:12;2153:83;2080:162;:::o;2248:179::-;2314:5;2352:6;2339:20;2330:29;;2368:53;2415:5;2368:53;:::i;:::-;2248:179;;;;:::o;2433:369::-;2512:6;2561:2;2549:9;2540:7;2536:23;2532:32;2529:119;;;2567:79;;:::i;:::-;2529:119;2687:1;2712:73;2777:7;2768:6;2757:9;2753:22;2712:73;:::i;:::-;2702:83;;2658:137;2433:369;;;;:::o;2808:90::-;2842:7;2885:5;2878:13;2871:21;2860:32;;2808:90;;;:::o;2904:109::-;2985:21;3000:5;2985:21;:::i;:::-;2980:3;2973:34;2904:109;;:::o;3019:210::-;3106:4;3144:2;3133:9;3129:18;3121:26;;3157:65;3219:1;3208:9;3204:17;3195:6;3157:65;:::i;:::-;3019:210;;;;:::o;3235:122::-;3308:24;3326:5;3308:24;:::i;:::-;3301:5;3298:35;3288:63;;3347:1;3344;3337:12;3288:63;3235:122;:::o;3363:139::-;3409:5;3447:6;3434:20;3425:29;;3463:33;3490:5;3463:33;:::i;:::-;3363:139;;;;:::o;3508:77::-;3545:7;3574:5;3563:16;;3508:77;;;:::o;3591:122::-;3664:24;3682:5;3664:24;:::i;:::-;3657:5;3654:35;3644:63;;3703:1;3700;3693:12;3644:63;3591:122;:::o;3719:139::-;3765:5;3803:6;3790:20;3781:29;;3819:33;3846:5;3819:33;:::i;:::-;3719:139;;;;:::o;3864:474::-;3932:6;3940;3989:2;3977:9;3968:7;3964:23;3960:32;3957:119;;;3995:79;;:::i;:::-;3957:119;4115:1;4140:53;4185:7;4176:6;4165:9;4161:22;4140:53;:::i;:::-;4130:63;;4086:117;4242:2;4268:53;4313:7;4304:6;4293:9;4289:22;4268:53;:::i;:::-;4258:63;;4213:118;3864:474;;;;;:::o;4344:118::-;4431:24;4449:5;4431:24;:::i;:::-;4426:3;4419:37;4344:118;;:::o;4468:222::-;4561:4;4599:2;4588:9;4584:18;4576:26;;4612:71;4680:1;4669:9;4665:17;4656:6;4612:71;:::i;:::-;4468:222;;;;:::o;4696:619::-;4773:6;4781;4789;4838:2;4826:9;4817:7;4813:23;4809:32;4806:119;;;4844:79;;:::i;:::-;4806:119;4964:1;4989:53;5034:7;5025:6;5014:9;5010:22;4989:53;:::i;:::-;4979:63;;4935:117;5091:2;5117:53;5162:7;5153:6;5142:9;5138:22;5117:53;:::i;:::-;5107:63;;5062:118;5219:2;5245:53;5290:7;5281:6;5270:9;5266:22;5245:53;:::i;:::-;5235:63;;5190:118;4696:619;;;;;:::o;5321:86::-;5356:7;5396:4;5389:5;5385:16;5374:27;;5321:86;;;:::o;5413:112::-;5496:22;5512:5;5496:22;:::i;:::-;5491:3;5484:35;5413:112;;:::o;5531:214::-;5620:4;5658:2;5647:9;5643:18;5635:26;;5671:67;5735:1;5724:9;5720:17;5711:6;5671:67;:::i;:::-;5531:214;;;;:::o;5751:329::-;5810:6;5859:2;5847:9;5838:7;5834:23;5830:32;5827:119;;;5865:79;;:::i;:::-;5827:119;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5751:329;;;;:::o;6086:::-;6145:6;6194:2;6182:9;6173:7;6169:23;6165:32;6162:119;;;6200:79;;:::i;:::-;6162:119;6320:1;6345:53;6390:7;6381:6;6370:9;6366:22;6345:53;:::i;:::-;6335:63;;6291:117;6086:329;;;;:::o;6421:911::-;6516:6;6524;6532;6540;6548;6597:3;6585:9;6576:7;6572:23;6568:33;6565:120;;;6604:79;;:::i;:::-;6565:120;6724:1;6749:53;6794:7;6785:6;6774:9;6770:22;6749:53;:::i;:::-;6739:63;;6695:117;6851:2;6877:53;6922:7;6913:6;6902:9;6898:22;6877:53;:::i;:::-;6867:63;;6822:118;6979:2;7005:53;7050:7;7041:6;7030:9;7026:22;7005:53;:::i;:::-;6995:63;;6950:118;7107:2;7133:53;7178:7;7169:6;7158:9;7154:22;7133:53;:::i;:::-;7123:63;;7078:118;7235:3;7262:53;7307:7;7298:6;7287:9;7283:22;7262:53;:::i;:::-;7252:63;;7206:119;6421:911;;;;;;;;:::o;7338:118::-;7425:24;7443:5;7425:24;:::i;:::-;7420:3;7413:37;7338:118;;:::o;7462:222::-;7555:4;7593:2;7582:9;7578:18;7570:26;;7606:71;7674:1;7663:9;7659:17;7650:6;7606:71;:::i;:::-;7462:222;;;;:::o;7690:60::-;7718:3;7739:5;7732:12;;7690:60;;;:::o;7756:142::-;7806:9;7839:53;7857:34;7866:24;7884:5;7866:24;:::i;:::-;7857:34;:::i;:::-;7839:53;:::i;:::-;7826:66;;7756:142;;;:::o;7904:126::-;7954:9;7987:37;8018:5;7987:37;:::i;:::-;7974:50;;7904:126;;;:::o;8036:146::-;8106:9;8139:37;8170:5;8139:37;:::i;:::-;8126:50;;8036:146;;;:::o;8188:171::-;8295:57;8346:5;8295:57;:::i;:::-;8290:3;8283:70;8188:171;;:::o;8365:262::-;8478:4;8516:2;8505:9;8501:18;8493:26;;8529:91;8617:1;8606:9;8602:17;8593:6;8529:91;:::i;:::-;8365:262;;;;:::o;8633:474::-;8701:6;8709;8758:2;8746:9;8737:7;8733:23;8729:32;8726:119;;;8764:79;;:::i;:::-;8726:119;8884:1;8909:53;8954:7;8945:6;8934:9;8930:22;8909:53;:::i;:::-;8899:63;;8855:117;9011:2;9037:53;9082:7;9073:6;9062:9;9058:22;9037:53;:::i;:::-;9027:63;;8982:118;8633:474;;;;;:::o;9113:180::-;9161:77;9158:1;9151:88;9258:4;9255:1;9248:15;9282:4;9279:1;9272:15;9299:320;9343:6;9380:1;9374:4;9370:12;9360:22;;9427:1;9421:4;9417:12;9448:18;9438:81;;9504:4;9496:6;9492:17;9482:27;;9438:81;9566:2;9558:6;9555:14;9535:18;9532:38;9529:84;;;9585:18;;:::i;:::-;9529:84;9350:269;9299:320;;;:::o;9625:182::-;9765:34;9761:1;9753:6;9749:14;9742:58;9625:182;:::o;9813:366::-;9955:3;9976:67;10040:2;10035:3;9976:67;:::i;:::-;9969:74;;10052:93;10141:3;10052:93;:::i;:::-;10170:2;10165:3;10161:12;10154:19;;9813:366;;;:::o;10185:419::-;10351:4;10389:2;10378:9;10374:18;10366:26;;10438:9;10432:4;10428:20;10424:1;10413:9;10409:17;10402:47;10466:131;10592:4;10466:131;:::i;:::-;10458:139;;10185:419;;;:::o;10610:227::-;10750:34;10746:1;10738:6;10734:14;10727:58;10819:10;10814:2;10806:6;10802:15;10795:35;10610:227;:::o;10843:366::-;10985:3;11006:67;11070:2;11065:3;11006:67;:::i;:::-;10999:74;;11082:93;11171:3;11082:93;:::i;:::-;11200:2;11195:3;11191:12;11184:19;;10843:366;;;:::o;11215:419::-;11381:4;11419:2;11408:9;11404:18;11396:26;;11468:9;11462:4;11458:20;11454:1;11443:9;11439:17;11432:47;11496:131;11622:4;11496:131;:::i;:::-;11488:139;;11215:419;;;:::o;11640:180::-;11688:77;11685:1;11678:88;11785:4;11782:1;11775:15;11809:4;11806:1;11799:15;11826:305;11866:3;11885:20;11903:1;11885:20;:::i;:::-;11880:25;;11919:20;11937:1;11919:20;:::i;:::-;11914:25;;12073:1;12005:66;12001:74;11998:1;11995:81;11992:107;;;12079:18;;:::i;:::-;11992:107;12123:1;12120;12116:9;12109:16;;11826:305;;;;:::o;12137:223::-;12277:34;12273:1;12265:6;12261:14;12254:58;12346:6;12341:2;12333:6;12329:15;12322:31;12137:223;:::o;12366:366::-;12508:3;12529:67;12593:2;12588:3;12529:67;:::i;:::-;12522:74;;12605:93;12694:3;12605:93;:::i;:::-;12723:2;12718:3;12714:12;12707:19;;12366:366;;;:::o;12738:419::-;12904:4;12942:2;12931:9;12927:18;12919:26;;12991:9;12985:4;12981:20;12977:1;12966:9;12962:17;12955:47;13019:131;13145:4;13019:131;:::i;:::-;13011:139;;12738:419;;;:::o;13163:664::-;13368:4;13406:3;13395:9;13391:19;13383:27;;13420:71;13488:1;13477:9;13473:17;13464:6;13420:71;:::i;:::-;13501:72;13569:2;13558:9;13554:18;13545:6;13501:72;:::i;:::-;13583;13651:2;13640:9;13636:18;13627:6;13583:72;:::i;:::-;13665;13733:2;13722:9;13718:18;13709:6;13665:72;:::i;:::-;13747:73;13815:3;13804:9;13800:19;13791:6;13747:73;:::i;:::-;13163:664;;;;;;;;:::o;13833:116::-;13903:21;13918:5;13903:21;:::i;:::-;13896:5;13893:32;13883:60;;13939:1;13936;13929:12;13883:60;13833:116;:::o;13955:137::-;14009:5;14040:6;14034:13;14025:22;;14056:30;14080:5;14056:30;:::i;:::-;13955:137;;;;:::o;14098:345::-;14165:6;14214:2;14202:9;14193:7;14189:23;14185:32;14182:119;;;14220:79;;:::i;:::-;14182:119;14340:1;14365:61;14418:7;14409:6;14398:9;14394:22;14365:61;:::i;:::-;14355:71;;14311:125;14098:345;;;;:::o;14449:224::-;14589:34;14585:1;14577:6;14573:14;14566:58;14658:7;14653:2;14645:6;14641:15;14634:32;14449:224;:::o;14679:366::-;14821:3;14842:67;14906:2;14901:3;14842:67;:::i;:::-;14835:74;;14918:93;15007:3;14918:93;:::i;:::-;15036:2;15031:3;15027:12;15020:19;;14679:366;;;:::o;15051:419::-;15217:4;15255:2;15244:9;15240:18;15232:26;;15304:9;15298:4;15294:20;15290:1;15279:9;15275:17;15268:47;15332:131;15458:4;15332:131;:::i;:::-;15324:139;;15051:419;;;:::o;15476:332::-;15597:4;15635:2;15624:9;15620:18;15612:26;;15648:71;15716:1;15705:9;15701:17;15692:6;15648:71;:::i;:::-;15729:72;15797:2;15786:9;15782:18;15773:6;15729:72;:::i;:::-;15476:332;;;;;:::o;15814:225::-;15954:34;15950:1;15942:6;15938:14;15931:58;16023:8;16018:2;16010:6;16006:15;15999:33;15814:225;:::o;16045:366::-;16187:3;16208:67;16272:2;16267:3;16208:67;:::i;:::-;16201:74;;16284:93;16373:3;16284:93;:::i;:::-;16402:2;16397:3;16393:12;16386:19;;16045:366;;;:::o;16417:419::-;16583:4;16621:2;16610:9;16606:18;16598:26;;16670:9;16664:4;16660:20;16656:1;16645:9;16641:17;16634:47;16698:131;16824:4;16698:131;:::i;:::-;16690:139;;16417:419;;;:::o;16842:223::-;16982:34;16978:1;16970:6;16966:14;16959:58;17051:6;17046:2;17038:6;17034:15;17027:31;16842:223;:::o;17071:366::-;17213:3;17234:67;17298:2;17293:3;17234:67;:::i;:::-;17227:74;;17310:93;17399:3;17310:93;:::i;:::-;17428:2;17423:3;17419:12;17412:19;;17071:366;;;:::o;17443:419::-;17609:4;17647:2;17636:9;17632:18;17624:26;;17696:9;17690:4;17686:20;17682:1;17671:9;17667:17;17660:47;17724:131;17850:4;17724:131;:::i;:::-;17716:139;;17443:419;;;:::o;17868:221::-;18008:34;18004:1;17996:6;17992:14;17985:58;18077:4;18072:2;18064:6;18060:15;18053:29;17868:221;:::o;18095:366::-;18237:3;18258:67;18322:2;18317:3;18258:67;:::i;:::-;18251:74;;18334:93;18423:3;18334:93;:::i;:::-;18452:2;18447:3;18443:12;18436:19;;18095:366;;;:::o;18467:419::-;18633:4;18671:2;18660:9;18656:18;18648:26;;18720:9;18714:4;18710:20;18706:1;18695:9;18691:17;18684:47;18748:131;18874:4;18748:131;:::i;:::-;18740:139;;18467:419;;;:::o;18892:224::-;19032:34;19028:1;19020:6;19016:14;19009:58;19101:7;19096:2;19088:6;19084:15;19077:32;18892:224;:::o;19122:366::-;19264:3;19285:67;19349:2;19344:3;19285:67;:::i;:::-;19278:74;;19361:93;19450:3;19361:93;:::i;:::-;19479:2;19474:3;19470:12;19463:19;;19122:366;;;:::o;19494:419::-;19660:4;19698:2;19687:9;19683:18;19675:26;;19747:9;19741:4;19737:20;19733:1;19722:9;19718:17;19711:47;19775:131;19901:4;19775:131;:::i;:::-;19767:139;;19494:419;;;:::o;19919:222::-;20059:34;20055:1;20047:6;20043:14;20036:58;20128:5;20123:2;20115:6;20111:15;20104:30;19919:222;:::o;20147:366::-;20289:3;20310:67;20374:2;20369:3;20310:67;:::i;:::-;20303:74;;20386:93;20475:3;20386:93;:::i;:::-;20504:2;20499:3;20495:12;20488:19;;20147:366;;;:::o;20519:419::-;20685:4;20723:2;20712:9;20708:18;20700:26;;20772:9;20766:4;20762:20;20758:1;20747:9;20743:17;20736:47;20800:131;20926:4;20800:131;:::i;:::-;20792:139;;20519:419;;;:::o;20944:225::-;21084:34;21080:1;21072:6;21068:14;21061:58;21153:8;21148:2;21140:6;21136:15;21129:33;20944:225;:::o;21175:366::-;21317:3;21338:67;21402:2;21397:3;21338:67;:::i;:::-;21331:74;;21414:93;21503:3;21414:93;:::i;:::-;21532:2;21527:3;21523:12;21516:19;;21175:366;;;:::o;21547:419::-;21713:4;21751:2;21740:9;21736:18;21728:26;;21800:9;21794:4;21790:20;21786:1;21775:9;21771:17;21764:47;21828:131;21954:4;21828:131;:::i;:::-;21820:139;;21547:419;;;:::o;21972:220::-;22112:34;22108:1;22100:6;22096:14;22089:58;22181:3;22176:2;22168:6;22164:15;22157:28;21972:220;:::o;22198:366::-;22340:3;22361:67;22425:2;22420:3;22361:67;:::i;:::-;22354:74;;22437:93;22526:3;22437:93;:::i;:::-;22555:2;22550:3;22546:12;22539:19;;22198:366;;;:::o;22570:419::-;22736:4;22774:2;22763:9;22759:18;22751:26;;22823:9;22817:4;22813:20;22809:1;22798:9;22794:17;22787:47;22851:131;22977:4;22851:131;:::i;:::-;22843:139;;22570:419;;;:::o;22995:221::-;23135:34;23131:1;23123:6;23119:14;23112:58;23204:4;23199:2;23191:6;23187:15;23180:29;22995:221;:::o;23222:366::-;23364:3;23385:67;23449:2;23444:3;23385:67;:::i;:::-;23378:74;;23461:93;23550:3;23461:93;:::i;:::-;23579:2;23574:3;23570:12;23563:19;;23222:366;;;:::o;23594:419::-;23760:4;23798:2;23787:9;23783:18;23775:26;;23847:9;23841:4;23837:20;23833:1;23822:9;23818:17;23811:47;23875:131;24001:4;23875:131;:::i;:::-;23867:139;;23594:419;;;:::o;24019:191::-;24059:4;24079:20;24097:1;24079:20;:::i;:::-;24074:25;;24113:20;24131:1;24113:20;:::i;:::-;24108:25;;24152:1;24149;24146:8;24143:34;;;24157:18;;:::i;:::-;24143:34;24202:1;24199;24195:9;24187:17;;24019:191;;;;:::o

Swarm Source

ipfs://c631f3cca6965055a255267b7962675075b1f9ce14fe23df4adc1c83a522401e

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.