ETH Price: $3,026.24 (+2.26%)
Gas: 1 Gwei

Token

Everybody Loves Kwon (ELK)
 

Overview

Max Total Supply

1,000,000,000 ELK

Holders

157

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
681,097.528481030985794323 ELK

Value
$0.00
0x2d9980158a910219550027adc0b001b347869a06
Loading...
Loading
Loading...
Loading
Loading...
Loading

Click here to update the token information / general information
# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
ELK

Compiler Version
v0.8.0+commit.c7dfd78e

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2022-03-29
*/

/* 
Everybody Loves Kwon - Made for the community by the community - No taxes 
*/

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


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

pragma solidity ^0.8.0;

/**
 * @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/access/Ownable.sol


// OpenZeppelin Contracts v4.4.1 (access/Ownable.sol)

pragma solidity ^0.8.0;


/**
 * @dev Contract module which provides a basic access control mechanism, where
 * there is an account (an owner) that can be granted exclusive access to
 * specific functions.
 *
 * By default, the owner account will be the one that deploys the contract. This
 * can later be changed with {transferOwnership}.
 *
 * This module is used through inheritance. It will make available the modifier
 * `onlyOwner`, which can be applied to your functions to restrict their use to
 * the owner.
 */
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);
    }
}

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


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/IERC20.sol)

pragma solidity ^0.8.0;

/**
 * @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 `to`.
     *
     * Returns a boolean value indicating whether the operation succeeded.
     *
     * Emits a {Transfer} event.
     */
    function transfer(address to, 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 `from` to `to` 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 from,
        address to,
        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.0;


/**
 * @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/token/ERC20/ERC20.sol


// OpenZeppelin Contracts (last updated v4.5.0) (token/ERC20/ERC20.sol)

pragma solidity ^0.8.0;




/**
 * @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:
     *
     * - `to` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _transfer(owner, to, 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}.
     *
     * NOTE: If `amount` is the maximum `uint256`, the allowance is not updated on
     * `transferFrom`. This is semantically equivalent to an infinite approval.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        address owner = _msgSender();
        _approve(owner, 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}.
     *
     * NOTE: Does not update the allowance if the current allowance
     * is the maximum `uint256`.
     *
     * Requirements:
     *
     * - `from` and `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     * - the caller must have allowance for ``from``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address from,
        address to,
        uint256 amount
    ) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        _transfer(from, to, 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) {
        address owner = _msgSender();
        _approve(owner, spender, _allowances[owner][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) {
        address owner = _msgSender();
        uint256 currentAllowance = _allowances[owner][spender];
        require(currentAllowance >= subtractedValue, "ERC20: decreased allowance below zero");
        unchecked {
            _approve(owner, 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:
     *
     * - `from` cannot be the zero address.
     * - `to` cannot be the zero address.
     * - `from` must have a balance of at least `amount`.
     */
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal virtual {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");

        _beforeTokenTransfer(from, to, amount);

        uint256 fromBalance = _balances[from];
        require(fromBalance >= amount, "ERC20: transfer amount exceeds balance");
        unchecked {
            _balances[from] = fromBalance - amount;
        }
        _balances[to] += amount;

        emit Transfer(from, to, amount);

        _afterTokenTransfer(from, to, 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 Spend `amount` form the allowance of `owner` toward `spender`.
     *
     * Does not update the allowance amount in case of infinite allowance.
     * Revert if not enough allowance is available.
     *
     * Might emit an {Approval} event.
     */
    function _spendAllowance(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        uint256 currentAllowance = allowance(owner, spender);
        if (currentAllowance != type(uint256).max) {
            require(currentAllowance >= amount, "ERC20: insufficient allowance");
            unchecked {
                _approve(owner, spender, currentAllowance - 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 {}
}



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



contract ELK is ERC20, Ownable {
    /* Token Tax */
    uint32 public _taxPercision = 100000;
    address[] public _taxRecipients;
    uint16 public _taxTotal;
    bool public _taxActive;

    mapping(address => uint16) public _taxRecipientAmounts;
    mapping(address => bool) private _isTaxRecipient;
    mapping(address => bool) public _whitelisted;

    /* Events */
    event UpdateTaxPercentage(address indexed wallet, uint16 _newTaxAmount);
    event AddTaxRecipient(address indexed wallet, uint16 _taxAmount);
    event RemoveFromWhitelist(address indexed wallet);
    event RemoveTaxRecipient(address indexed wallet);
    event AddToWhitelist(address indexed wallet);
    event ToggleTax(bool _active);

    uint256 private _totalSupply;

    /**
     * @dev Constructor.
     */
    constructor() ERC20('Everybody Loves Kwon', 'ELK') payable {
      _totalSupply = 1000000000 * (10**18);

      _mint(msg.sender, _totalSupply);
    }

    /**
      * @notice overrides ERC20 transferFrom function to introduce tax functionality
      * @param from address amount is coming from
      * @param to address amount is going to
      * @param amount amount being sent
     */
    function transferFrom(address from, address to, uint256 amount) public virtual override returns (bool) {
        address spender = _msgSender();
        _spendAllowance(from, spender, amount);
        require(balanceOf(from) >= amount, "ERC20: transfer amount exceeds balance");
        if(_taxActive && !_whitelisted[from] && !_whitelisted[to]) {
          uint256 tax = amount *_taxTotal / _taxPercision;
          amount = amount - tax;
          _transfer(from, address(this), tax);
        }
        _transfer(from, to, amount);
        return true;
    }


    /**
      * @notice : overrides ERC20 transfer function to introduce tax functionality
      * @param to address amount is going to
      * @param amount amount being sent
     */
    function transfer(address to, uint256 amount) public virtual override returns (bool) {
      address owner = _msgSender();
      require(balanceOf(owner) >= amount, "ERC20: transfer amount exceeds balance");
      if(_taxActive && !_whitelisted[owner] && !_whitelisted[to]) {
        uint256 tax = amount*_taxTotal/_taxPercision;
        amount = amount - tax;
        _transfer(owner, address(this), tax);
      }
      _transfer(owner, to, amount);
      return true;
    }


    /**
     * @dev Burns a specific amount of tokens.
     * @param value The amount of lowest token units to be burned.
     */
    function burn(uint256 value) public {
      _burn(msg.sender, value);
    }

    /* ADMIN Functions */
    /**
       * @notice : toggles the tax on or off
    */
    function toggleTax() external onlyOwner {
      _taxActive = !_taxActive;
      emit ToggleTax(_taxActive);
    }

    /**
      * @notice : adds address with tax amount to taxable addresses list
      * @param wallet address to add
      * @param _tax tax amount this address receives
    */
    function addTaxRecipient(address wallet, uint16 _tax) external onlyOwner {
      require(_taxRecipients.length < 100, "Reached maximum number of tax addresses");
      require(wallet != address(0), "Cannot add 0 address");
      require(!_isTaxRecipient[wallet], "Recipient already added");
      require(_tax > 0 && _tax + _taxTotal <= _taxPercision/10, "Total tax amount must be between 0 and 10%");

      _isTaxRecipient[wallet] = true;
      _taxRecipients.push(wallet);
      _taxRecipientAmounts[wallet] = _tax;
      _taxTotal = _taxTotal + _tax;
      emit AddTaxRecipient(wallet, _tax);
    }

    /**
      * @notice : updates address tax amount
      * @param wallet address to update
      * @param newTax new tax amount
     */
    function updateTaxPercentage(address wallet, uint16 newTax) external onlyOwner {
      require(wallet != address(0), "Cannot add 0 address");
      require(_isTaxRecipient[wallet], "Not a tax address");

      uint16 currentTax = _taxRecipientAmounts[wallet];
      require(currentTax != newTax, "Tax already this amount for this address");

      if(currentTax < newTax) {
        uint16 diff = newTax - currentTax;
        require(_taxTotal + diff <= 10000, "Tax amount too high for current tax rate");
        _taxTotal = _taxTotal + diff;
      } else {
        uint16 diff = currentTax - newTax;
        _taxTotal = _taxTotal - diff;
      }
      _taxRecipientAmounts[wallet] = newTax;
      emit UpdateTaxPercentage(wallet, newTax);
    }

    /**
      * @notice : remove address from taxed list
      * @param wallet address to remove
     */
    function removeTaxRecipient(address wallet) external onlyOwner {
      require(wallet != address(0), "Cannot add 0 address");
      require(_isTaxRecipient[wallet], "Recipient has not been added");
      uint16 _tax = _taxRecipientAmounts[wallet];

      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        if(_taxRecipients[i] == wallet) {
          _taxTotal = _taxTotal - _tax;
          _taxRecipientAmounts[wallet] = 0;
          _taxRecipients[i] = _taxRecipients[_taxRecipients.length - 1];
          _isTaxRecipient[wallet] = false;
          _taxRecipients.pop();
          emit RemoveTaxRecipient(wallet);

          break;
        }
      }
    }

    /**
    * @notice : add address to tax whitelist
    * @param wallet address to add to whitelist
    */
    function addToWhitelist(address wallet) external onlyOwner {
      require(wallet != address(0), "Cant use 0 address");
      require(!_whitelisted[wallet], "Address already added");
      _whitelisted[wallet] = true;

      emit AddToWhitelist(wallet);
    }

    /**
    * @notice : add address to whitelist (non taxed)
    * @param wallet address to remove from whitelist
    */
    function removeFromWhitelist(address wallet) external onlyOwner {
      require(wallet != address(0), "Cant use 0 address");
      require(_whitelisted[wallet], "Address not added");
      _whitelisted[wallet] = false;

      emit RemoveFromWhitelist(wallet);
    }

    /**
    * @notice : resets tax settings to initial state
    */
    function taxReset() external onlyOwner {
      _taxActive = false;
      _taxTotal = 0;

      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        _taxRecipientAmounts[_taxRecipients[i]] = 0;
        _isTaxRecipient[_taxRecipients[i]] = false;
      }

      delete _taxRecipients;
    }

    /**
      * @notice : withdraws taxable amount to tax recipients
     */
    function distributeTaxes() external onlyOwner {
      require(balanceOf(address(this)) > 0, "Nothing to withdraw");
      uint256 taxableAmount = balanceOf(address(this));
      for(uint8 i = 0; i < _taxRecipients.length; i++) {
        address taxAddress = _taxRecipients[i];
        if(i == _taxRecipients.length - 1) {
           _transfer(address(this), taxAddress, balanceOf(address(this)));
        } else {
          uint256 amount = taxableAmount * _taxRecipientAmounts[taxAddress]/_taxTotal;
          _transfer(address(this), taxAddress, amount);
        }
      }
    }
}

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint16","name":"_taxAmount","type":"uint16"}],"name":"AddTaxRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"AddToWhitelist","type":"event"},{"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":"wallet","type":"address"}],"name":"RemoveFromWhitelist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"wallet","type":"address"}],"name":"RemoveTaxRecipient","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"_active","type":"bool"}],"name":"ToggleTax","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":true,"internalType":"address","name":"wallet","type":"address"},{"indexed":false,"internalType":"uint16","name":"_newTaxAmount","type":"uint16"}],"name":"UpdateTaxPercentage","type":"event"},{"inputs":[],"name":"_taxActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxPercision","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_taxRecipientAmounts","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"_taxRecipients","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_taxTotal","outputs":[{"internalType":"uint16","name":"","type":"uint16"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint16","name":"_tax","type":"uint16"}],"name":"addTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"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":"value","type":"uint256"}],"name":"burn","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":[],"name":"distributeTaxes","outputs":[],"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":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"removeTaxRecipient","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"taxReset","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"toggleTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"transfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","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":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint16","name":"newTax","type":"uint16"}],"name":"updateTaxPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"}]

6005805463ffffffff60a01b1916610c3560a51b179055601460808181527f4576657279626f6479204c6f766573204b776f6e00000000000000000000000060a0908152610100604052600360c081815262454c4b60e81b60e0529293620000689290620001fd565b5080516200007e906004906020840190620001fd565b5050506200009b62000095620000c060201b60201c565b620000c4565b6b033b2e3c9fd0803ce8000000600b819055620000ba90339062000116565b62000345565b3390565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6001600160a01b038216620001485760405162461bcd60e51b81526004016200013f90620002a3565b60405180910390fd5b6200015660008383620001f8565b80600260008282546200016a9190620002e3565b90915550506001600160a01b0382166000908152602081905260408120805483929062000199908490620002e3565b90915550506040516001600160a01b038316906000907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90620001de908590620002da565b60405180910390a3620001f460008383620001f8565b5050565b505050565b8280546200020b9062000308565b90600052602060002090601f0160209004810192826200022f57600085556200027a565b82601f106200024a57805160ff19168380011785556200027a565b828001600101855582156200027a579182015b828111156200027a5782518255916020019190600101906200025d565b50620002889291506200028c565b5090565b5b808211156200028857600081556001016200028d565b6020808252601f908201527f45524332303a206d696e7420746f20746865207a65726f206164647265737300604082015260600190565b90815260200190565b600082198211156200030357634e487b7160e01b81526011600452602481fd5b500190565b6002810460018216806200031d57607f821691505b602082108114156200033f57634e487b7160e01b600052602260045260246000fd5b50919050565b6120e580620003556000396000f3fe608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063619f28ed1161010457806395d89b41116100a2578063dd62ed3e11610071578063dd62ed3e1461039c578063e43252d7146103af578063f2fde38b146103c2578063fb369eb0146103d5576101cf565b806395d89b4114610366578063a457c2d71461036e578063a9059cbb14610381578063bb47cc0c14610394576101cf565b806371fc737c116100de57806371fc737c1461033b5780638ab1d681146103435780638da5cb5b14610356578063909656521461035e576101cf565b8063619f28ed1461030d57806370a0823114610320578063715018a614610333576101cf565b806323b872dd116101715780633a5fcb631161014b5780633a5fcb63146102b257806342966c68146102d25780634be31778146102e557806354f12265146102fa576101cf565b806323b872dd14610277578063313ce5671461028a578063395093511461029f576101cf565b806310bf6029116101ad57806310bf60291461022557806310f6da921461022f57806318160ddd146102425780632354ee0314610257576101cf565b806301c4b316146101d457806306fdde03146101fd578063095ea7b314610212575b600080fd5b6101e76101e236600461183d565b6103dd565b6040516101f4919061195c565b60405180910390f35b6102056103f2565b6040516101f49190611967565b6101e7610220366004611907565b610484565b61022d6104a6565b005b61022d61023d36600461183d565b61054e565b61024a6107e0565b6040516101f49190611f32565b61026a610265366004611930565b6107e6565b6040516101f49190611948565b6101e7610285366004611890565b610810565b61029261090b565b6040516101f49190611f4c565b6101e76102ad366004611907565b610910565b6102c56102c036600461183d565b61095c565b6040516101f49190611f23565b61022d6102e0366004611930565b610972565b6102ed61097f565b6040516101f49190611f3b565b61022d6103083660046118cb565b610992565b61022d61031b3660046118cb565b610b92565b61024a61032e36600461183d565b610dab565b61022d610dca565b61022d610e15565b61022d61035136600461183d565b610f69565b61026a61104f565b61022d61105e565b61020561119a565b6101e761037c366004611907565b6111a9565b6101e761038f366004611907565b61120a565b6102c56112ef565b61024a6103aa36600461185e565b6112f9565b61022d6103bd36600461183d565b611324565b61022d6103d036600461183d565b61140e565b6101e761147c565b600a6020526000908152604090205460ff1681565b60606003805461040190612028565b80601f016020809104026020016040519081016040528092919081815260200182805461042d90612028565b801561047a5780601f1061044f5761010080835404028352916020019161047a565b820191906000526020600020905b81548152906001019060200180831161045d57829003601f168201915b5050505050905090565b60008061048f61148b565b905061049c81858561148f565b5060019392505050565b6104ae61148b565b6001600160a01b03166104bf61104f565b6001600160a01b0316146104ee5760405162461bcd60e51b81526004016104e590611d6b565b60405180910390fd5b6007805460ff62010000808304821615810262ff00001990931692909217928390556040517fdda4866fd658821eea607c5d6addd0c4a0cc347eb4cea313399e516e66019864936105449390049091169061195c565b60405180910390a1565b61055661148b565b6001600160a01b031661056761104f565b6001600160a01b03161461058d5760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166105b35760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03811660009081526009602052604090205460ff166105eb5760405162461bcd60e51b81526004016104e590611d09565b6001600160a01b03811660009081526008602052604081205461ffff16905b60065460ff821610156107db57826001600160a01b031660068260ff168154811061064557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156107c95760075461067290839061ffff16611fee565b6007805461ffff9290921661ffff199283161790556001600160a01b038416600090815260086020526040902080549091169055600680546106b690600190612011565b815481106106d457634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169160ff841690811061071157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600990915260409020805460ff19169055600680548061076e57634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810180546001600160a01b03191690559091019091556040516001600160a01b038516917f4fd6fed175ab0b49d36124b1a61f8b0d9d15ea6289719749317cbb005ccb13f391a26107db565b806107d381612063565b91505061060a565b505050565b60025490565b600681815481106107f657600080fd5b6000918252602090912001546001600160a01b0316905081565b60008061081b61148b565b9050610828858285611543565b8261083286610dab565b10156108505760405162461bcd60e51b81526004016104e590611bba565b60075462010000900460ff16801561088157506001600160a01b0385166000908152600a602052604090205460ff16155b80156108a657506001600160a01b0384166000908152600a602052604090205460ff16155b156108f557600554600754600091600160a01b900463ffffffff16906108d09061ffff1686611fcf565b6108da9190611f98565b90506108e68185612011565b93506108f386308361158d565b505b61090085858561158d565b506001949350505050565b601290565b60008061091b61148b565b6001600160a01b0380821660009081526001602090815260408083209389168352929052205490915061049c9082908690610957908790611f80565b61148f565b60086020526000908152604090205461ffff1681565b61097c33826116b1565b50565b600554600160a01b900463ffffffff1681565b61099a61148b565b6001600160a01b03166109ab61104f565b6001600160a01b0316146109d15760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0382166109f75760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03821660009081526009602052604090205460ff16610a2f5760405162461bcd60e51b81526004016104e590611cde565b6001600160a01b03821660009081526008602052604090205461ffff908116908216811415610a705760405162461bcd60e51b81526004016104e590611da0565b8161ffff168161ffff161015610af5576000610a8c8284611fee565b60075490915061271090610aa590839061ffff16611f5a565b61ffff161115610ac75760405162461bcd60e51b81526004016104e590611b3b565b600754610ad990829061ffff16611f5a565b6007805461ffff191661ffff9290921691909117905550610b2e565b6000610b018383611fee565b600754909150610b1690829061ffff16611fee565b6007805461ffff191661ffff92909216919091179055505b6001600160a01b03831660008181526008602052604090819020805461ffff191661ffff8616179055517fee47ac5c77f2952467745dc55e7c0f653f25c603443f24d129d62712b57eeb5d90610b85908590611f23565b60405180910390a2505050565b610b9a61148b565b6001600160a01b0316610bab61104f565b6001600160a01b031614610bd15760405162461bcd60e51b81526004016104e590611d6b565b600654606411610bf35760405162461bcd60e51b81526004016104e590611a6c565b6001600160a01b038216610c195760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03821660009081526009602052604090205460ff1615610c525760405162461bcd60e51b81526004016104e590611c00565b60008161ffff16118015610c9f5750600554610c7d90600a90600160a01b900463ffffffff16611fac565b60075463ffffffff9190911690610c989061ffff1683611f5a565b61ffff1611155b610cbb5760405162461bcd60e51b81526004016104e590611c94565b6001600160a01b03821660008181526009602090815260408083208054600160ff1990911681179091556006805491820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169094179093556008905220805461ffff191661ffff83811691909117909155600754610d4a91839116611f5a565b600760006101000a81548161ffff021916908361ffff160217905550816001600160a01b03167ff0379f3a0fa1271904bae35478eacd47ea582a7e6316fb3d935a46c931f61c2582604051610d9f9190611f23565b60405180910390a25050565b6001600160a01b0381166000908152602081905260409020545b919050565b610dd261148b565b6001600160a01b0316610de361104f565b6001600160a01b031614610e095760405162461bcd60e51b81526004016104e590611d6b565b610e1360006117a2565b565b610e1d61148b565b6001600160a01b0316610e2e61104f565b6001600160a01b031614610e545760405162461bcd60e51b81526004016104e590611d6b565b6000610e5f30610dab565b11610e7c5760405162461bcd60e51b81526004016104e590611a3f565b6000610e8730610dab565b905060005b60065460ff82161015610f6557600060068260ff1681548110610ebf57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546006546001600160a01b039091169150610ee790600190612011565b8260ff161415610f0957610f043082610eff30610dab565b61158d565b610f52565b6007546001600160a01b038216600090815260086020526040812054909161ffff90811691610f39911686611fcf565b610f439190611f98565b9050610f5030838361158d565b505b5080610f5d81612063565b915050610e8c565b5050565b610f7161148b565b6001600160a01b0316610f8261104f565b6001600160a01b031614610fa85760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b038116610fce5760405162461bcd60e51b81526004016104e590611ef7565b6001600160a01b0381166000908152600a602052604090205460ff166110065760405162461bcd60e51b81526004016104e590611d40565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517f1f756c8b089af6b33ee121fee8badac2553a2fa89c0575ea91ff8792617746c29190a250565b6005546001600160a01b031690565b61106661148b565b6001600160a01b031661107761104f565b6001600160a01b03161461109d5760405162461bcd60e51b81526004016104e590611d6b565b6007805462ffffff1916905560005b60065460ff8216101561118d5760006008600060068460ff16815481106110e357634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805461ffff191661ffff939093169290921790915560068054600991839160ff861690811061114757634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061118581612063565b9150506110ac565b50610e13600660006117f4565b60606004805461040190612028565b6000806111b461148b565b6001600160a01b03808216600090815260016020908152604080832093891683529290522054909150838110156111fd5760405162461bcd60e51b81526004016104e590611eb2565b610900828686840361148f565b60008061121561148b565b90508261122182610dab565b101561123f5760405162461bcd60e51b81526004016104e590611bba565b60075462010000900460ff16801561127057506001600160a01b0381166000908152600a602052604090205460ff16155b801561129557506001600160a01b0384166000908152600a602052604090205460ff16155b156112e457600554600754600091600160a01b900463ffffffff16906112bf9061ffff1686611fcf565b6112c99190611f98565b90506112d58185612011565b93506112e282308361158d565b505b61049c81858561158d565b60075461ffff1681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61132c61148b565b6001600160a01b031661133d61104f565b6001600160a01b0316146113635760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166113895760405162461bcd60e51b81526004016104e590611ef7565b6001600160a01b0381166000908152600a602052604090205460ff16156113c25760405162461bcd60e51b81526004016104e590611c65565b6001600160a01b0381166000818152600a6020526040808220805460ff19166001179055517f75b2135d1c8c3519f3c09c43fe6527089ef09f40c7981ebf0ed46e79e79032c79190a250565b61141661148b565b6001600160a01b031661142761104f565b6001600160a01b03161461144d5760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166114735760405162461bcd60e51b81526004016104e590611ab3565b61097c816117a2565b60075462010000900460ff1681565b3390565b6001600160a01b0383166114b55760405162461bcd60e51b81526004016104e590611e6e565b6001600160a01b0382166114db5760405162461bcd60e51b81526004016104e590611af9565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611536908590611f32565b60405180910390a3505050565b600061154f84846112f9565b90506000198114611587578181101561157a5760405162461bcd60e51b81526004016104e590611b83565b611587848484840361148f565b50505050565b6001600160a01b0383166115b35760405162461bcd60e51b81526004016104e590611e29565b6001600160a01b0382166115d95760405162461bcd60e51b81526004016104e5906119ba565b6115e48383836107db565b6001600160a01b0383166000908152602081905260409020548181101561161d5760405162461bcd60e51b81526004016104e590611bba565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611654908490611f80565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161169e9190611f32565b60405180910390a36115878484846107db565b6001600160a01b0382166116d75760405162461bcd60e51b81526004016104e590611de8565b6116e3826000836107db565b6001600160a01b0382166000908152602081905260409020548181101561171c5760405162461bcd60e51b81526004016104e5906119fd565b6001600160a01b038316600090815260208190526040812083830390556002805484929061174b908490612011565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061178e908690611f32565b60405180910390a36107db836000846107db565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b508054600082559060005260206000209081019061097c91905b80821115611822576000815560010161180e565b5090565b80356001600160a01b0381168114610dc557600080fd5b60006020828403121561184e578081fd5b61185782611826565b9392505050565b60008060408385031215611870578081fd5b61187983611826565b915061188760208401611826565b90509250929050565b6000806000606084860312156118a4578081fd5b6118ad84611826565b92506118bb60208501611826565b9150604084013590509250925092565b600080604083850312156118dd578182fd5b6118e683611826565b9150602083013561ffff811681146118fc578182fd5b809150509250929050565b60008060408385031215611919578182fd5b61192283611826565b946020939093013593505050565b600060208284031215611941578081fd5b5035919050565b6001600160a01b0391909116815260200190565b901515815260200190565b6000602080835283518082850152825b8181101561199357858101830151858201604001528201611977565b818111156119a45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b6020808252601390820152724e6f7468696e6720746f20776974686472617760681b604082015260600190565b60208082526027908201527f52656163686564206d6178696d756d206e756d626572206f66207461782061646040820152666472657373657360c81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526028908201527f54617820616d6f756e7420746f6f206869676820666f722063757272656e7420604082015267746178207261746560c01b606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526017908201527f526563697069656e7420616c7265616479206164646564000000000000000000604082015260600190565b60208082526014908201527343616e6e6f74206164642030206164647265737360601b604082015260600190565b6020808252601590820152741059191c995cdcc8185b1c9958591e481859191959605a1b604082015260600190565b6020808252602a908201527f546f74616c2074617820616d6f756e74206d757374206265206265747765656e604082015269203020616e642031302560b01b606082015260800190565b6020808252601190820152704e6f74206120746178206164647265737360781b604082015260600190565b6020808252601c908201527f526563697069656e7420686173206e6f74206265656e20616464656400000000604082015260600190565b6020808252601190820152701059191c995cdcc81b9bdd081859191959607a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f54617820616c7265616479207468697320616d6f756e7420666f722074686973604082015267206164647265737360c01b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60208082526012908201527143616e74207573652030206164647265737360701b604082015260600190565b61ffff91909116815260200190565b90815260200190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600061ffff808316818516808303821115611f7757611f77612083565b01949350505050565b60008219821115611f9357611f93612083565b500190565b600082611fa757611fa7612099565b500490565b600063ffffffff80841680611fc357611fc3612099565b92169190910492915050565b6000816000190483118215151615611fe957611fe9612083565b500290565b600061ffff8381169083168181101561200957612009612083565b039392505050565b60008282101561202357612023612083565b500390565b60028104600182168061203c57607f821691505b6020821081141561205d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff81141561207a5761207a612083565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea264697066735822122014b8fe6515f9efa2911ef51720fa151b504332ae6593b733b12f0d6fa21bc77164736f6c63430008000033

Deployed Bytecode

0x608060405234801561001057600080fd5b50600436106101cf5760003560e01c8063619f28ed1161010457806395d89b41116100a2578063dd62ed3e11610071578063dd62ed3e1461039c578063e43252d7146103af578063f2fde38b146103c2578063fb369eb0146103d5576101cf565b806395d89b4114610366578063a457c2d71461036e578063a9059cbb14610381578063bb47cc0c14610394576101cf565b806371fc737c116100de57806371fc737c1461033b5780638ab1d681146103435780638da5cb5b14610356578063909656521461035e576101cf565b8063619f28ed1461030d57806370a0823114610320578063715018a614610333576101cf565b806323b872dd116101715780633a5fcb631161014b5780633a5fcb63146102b257806342966c68146102d25780634be31778146102e557806354f12265146102fa576101cf565b806323b872dd14610277578063313ce5671461028a578063395093511461029f576101cf565b806310bf6029116101ad57806310bf60291461022557806310f6da921461022f57806318160ddd146102425780632354ee0314610257576101cf565b806301c4b316146101d457806306fdde03146101fd578063095ea7b314610212575b600080fd5b6101e76101e236600461183d565b6103dd565b6040516101f4919061195c565b60405180910390f35b6102056103f2565b6040516101f49190611967565b6101e7610220366004611907565b610484565b61022d6104a6565b005b61022d61023d36600461183d565b61054e565b61024a6107e0565b6040516101f49190611f32565b61026a610265366004611930565b6107e6565b6040516101f49190611948565b6101e7610285366004611890565b610810565b61029261090b565b6040516101f49190611f4c565b6101e76102ad366004611907565b610910565b6102c56102c036600461183d565b61095c565b6040516101f49190611f23565b61022d6102e0366004611930565b610972565b6102ed61097f565b6040516101f49190611f3b565b61022d6103083660046118cb565b610992565b61022d61031b3660046118cb565b610b92565b61024a61032e36600461183d565b610dab565b61022d610dca565b61022d610e15565b61022d61035136600461183d565b610f69565b61026a61104f565b61022d61105e565b61020561119a565b6101e761037c366004611907565b6111a9565b6101e761038f366004611907565b61120a565b6102c56112ef565b61024a6103aa36600461185e565b6112f9565b61022d6103bd36600461183d565b611324565b61022d6103d036600461183d565b61140e565b6101e761147c565b600a6020526000908152604090205460ff1681565b60606003805461040190612028565b80601f016020809104026020016040519081016040528092919081815260200182805461042d90612028565b801561047a5780601f1061044f5761010080835404028352916020019161047a565b820191906000526020600020905b81548152906001019060200180831161045d57829003601f168201915b5050505050905090565b60008061048f61148b565b905061049c81858561148f565b5060019392505050565b6104ae61148b565b6001600160a01b03166104bf61104f565b6001600160a01b0316146104ee5760405162461bcd60e51b81526004016104e590611d6b565b60405180910390fd5b6007805460ff62010000808304821615810262ff00001990931692909217928390556040517fdda4866fd658821eea607c5d6addd0c4a0cc347eb4cea313399e516e66019864936105449390049091169061195c565b60405180910390a1565b61055661148b565b6001600160a01b031661056761104f565b6001600160a01b03161461058d5760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166105b35760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03811660009081526009602052604090205460ff166105eb5760405162461bcd60e51b81526004016104e590611d09565b6001600160a01b03811660009081526008602052604081205461ffff16905b60065460ff821610156107db57826001600160a01b031660068260ff168154811061064557634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546001600160a01b031614156107c95760075461067290839061ffff16611fee565b6007805461ffff9290921661ffff199283161790556001600160a01b038416600090815260086020526040902080549091169055600680546106b690600190612011565b815481106106d457634e487b7160e01b600052603260045260246000fd5b600091825260209091200154600680546001600160a01b039092169160ff841690811061071157634e487b7160e01b600052603260045260246000fd5b600091825260208083209190910180546001600160a01b0319166001600160a01b039485161790559185168152600990915260409020805460ff19169055600680548061076e57634e487b7160e01b600052603160045260246000fd5b600082815260208120820160001990810180546001600160a01b03191690559091019091556040516001600160a01b038516917f4fd6fed175ab0b49d36124b1a61f8b0d9d15ea6289719749317cbb005ccb13f391a26107db565b806107d381612063565b91505061060a565b505050565b60025490565b600681815481106107f657600080fd5b6000918252602090912001546001600160a01b0316905081565b60008061081b61148b565b9050610828858285611543565b8261083286610dab565b10156108505760405162461bcd60e51b81526004016104e590611bba565b60075462010000900460ff16801561088157506001600160a01b0385166000908152600a602052604090205460ff16155b80156108a657506001600160a01b0384166000908152600a602052604090205460ff16155b156108f557600554600754600091600160a01b900463ffffffff16906108d09061ffff1686611fcf565b6108da9190611f98565b90506108e68185612011565b93506108f386308361158d565b505b61090085858561158d565b506001949350505050565b601290565b60008061091b61148b565b6001600160a01b0380821660009081526001602090815260408083209389168352929052205490915061049c9082908690610957908790611f80565b61148f565b60086020526000908152604090205461ffff1681565b61097c33826116b1565b50565b600554600160a01b900463ffffffff1681565b61099a61148b565b6001600160a01b03166109ab61104f565b6001600160a01b0316146109d15760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0382166109f75760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03821660009081526009602052604090205460ff16610a2f5760405162461bcd60e51b81526004016104e590611cde565b6001600160a01b03821660009081526008602052604090205461ffff908116908216811415610a705760405162461bcd60e51b81526004016104e590611da0565b8161ffff168161ffff161015610af5576000610a8c8284611fee565b60075490915061271090610aa590839061ffff16611f5a565b61ffff161115610ac75760405162461bcd60e51b81526004016104e590611b3b565b600754610ad990829061ffff16611f5a565b6007805461ffff191661ffff9290921691909117905550610b2e565b6000610b018383611fee565b600754909150610b1690829061ffff16611fee565b6007805461ffff191661ffff92909216919091179055505b6001600160a01b03831660008181526008602052604090819020805461ffff191661ffff8616179055517fee47ac5c77f2952467745dc55e7c0f653f25c603443f24d129d62712b57eeb5d90610b85908590611f23565b60405180910390a2505050565b610b9a61148b565b6001600160a01b0316610bab61104f565b6001600160a01b031614610bd15760405162461bcd60e51b81526004016104e590611d6b565b600654606411610bf35760405162461bcd60e51b81526004016104e590611a6c565b6001600160a01b038216610c195760405162461bcd60e51b81526004016104e590611c37565b6001600160a01b03821660009081526009602052604090205460ff1615610c525760405162461bcd60e51b81526004016104e590611c00565b60008161ffff16118015610c9f5750600554610c7d90600a90600160a01b900463ffffffff16611fac565b60075463ffffffff9190911690610c989061ffff1683611f5a565b61ffff1611155b610cbb5760405162461bcd60e51b81526004016104e590611c94565b6001600160a01b03821660008181526009602090815260408083208054600160ff1990911681179091556006805491820190557ff652222313e28459528d920b65115c16c04f3efc82aaedc97be59f3f377c0d3f0180546001600160a01b0319169094179093556008905220805461ffff191661ffff83811691909117909155600754610d4a91839116611f5a565b600760006101000a81548161ffff021916908361ffff160217905550816001600160a01b03167ff0379f3a0fa1271904bae35478eacd47ea582a7e6316fb3d935a46c931f61c2582604051610d9f9190611f23565b60405180910390a25050565b6001600160a01b0381166000908152602081905260409020545b919050565b610dd261148b565b6001600160a01b0316610de361104f565b6001600160a01b031614610e095760405162461bcd60e51b81526004016104e590611d6b565b610e1360006117a2565b565b610e1d61148b565b6001600160a01b0316610e2e61104f565b6001600160a01b031614610e545760405162461bcd60e51b81526004016104e590611d6b565b6000610e5f30610dab565b11610e7c5760405162461bcd60e51b81526004016104e590611a3f565b6000610e8730610dab565b905060005b60065460ff82161015610f6557600060068260ff1681548110610ebf57634e487b7160e01b600052603260045260246000fd5b6000918252602090912001546006546001600160a01b039091169150610ee790600190612011565b8260ff161415610f0957610f043082610eff30610dab565b61158d565b610f52565b6007546001600160a01b038216600090815260086020526040812054909161ffff90811691610f39911686611fcf565b610f439190611f98565b9050610f5030838361158d565b505b5080610f5d81612063565b915050610e8c565b5050565b610f7161148b565b6001600160a01b0316610f8261104f565b6001600160a01b031614610fa85760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b038116610fce5760405162461bcd60e51b81526004016104e590611ef7565b6001600160a01b0381166000908152600a602052604090205460ff166110065760405162461bcd60e51b81526004016104e590611d40565b6001600160a01b0381166000818152600a6020526040808220805460ff19169055517f1f756c8b089af6b33ee121fee8badac2553a2fa89c0575ea91ff8792617746c29190a250565b6005546001600160a01b031690565b61106661148b565b6001600160a01b031661107761104f565b6001600160a01b03161461109d5760405162461bcd60e51b81526004016104e590611d6b565b6007805462ffffff1916905560005b60065460ff8216101561118d5760006008600060068460ff16815481106110e357634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b031683528201929092526040018120805461ffff191661ffff939093169290921790915560068054600991839160ff861690811061114757634e487b7160e01b600052603260045260246000fd5b6000918252602080832091909101546001600160a01b031683528201929092526040019020805460ff19169115159190911790558061118581612063565b9150506110ac565b50610e13600660006117f4565b60606004805461040190612028565b6000806111b461148b565b6001600160a01b03808216600090815260016020908152604080832093891683529290522054909150838110156111fd5760405162461bcd60e51b81526004016104e590611eb2565b610900828686840361148f565b60008061121561148b565b90508261122182610dab565b101561123f5760405162461bcd60e51b81526004016104e590611bba565b60075462010000900460ff16801561127057506001600160a01b0381166000908152600a602052604090205460ff16155b801561129557506001600160a01b0384166000908152600a602052604090205460ff16155b156112e457600554600754600091600160a01b900463ffffffff16906112bf9061ffff1686611fcf565b6112c99190611f98565b90506112d58185612011565b93506112e282308361158d565b505b61049c81858561158d565b60075461ffff1681565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b61132c61148b565b6001600160a01b031661133d61104f565b6001600160a01b0316146113635760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166113895760405162461bcd60e51b81526004016104e590611ef7565b6001600160a01b0381166000908152600a602052604090205460ff16156113c25760405162461bcd60e51b81526004016104e590611c65565b6001600160a01b0381166000818152600a6020526040808220805460ff19166001179055517f75b2135d1c8c3519f3c09c43fe6527089ef09f40c7981ebf0ed46e79e79032c79190a250565b61141661148b565b6001600160a01b031661142761104f565b6001600160a01b03161461144d5760405162461bcd60e51b81526004016104e590611d6b565b6001600160a01b0381166114735760405162461bcd60e51b81526004016104e590611ab3565b61097c816117a2565b60075462010000900460ff1681565b3390565b6001600160a01b0383166114b55760405162461bcd60e51b81526004016104e590611e6e565b6001600160a01b0382166114db5760405162461bcd60e51b81526004016104e590611af9565b6001600160a01b0380841660008181526001602090815260408083209487168084529490915290819020849055517f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92590611536908590611f32565b60405180910390a3505050565b600061154f84846112f9565b90506000198114611587578181101561157a5760405162461bcd60e51b81526004016104e590611b83565b611587848484840361148f565b50505050565b6001600160a01b0383166115b35760405162461bcd60e51b81526004016104e590611e29565b6001600160a01b0382166115d95760405162461bcd60e51b81526004016104e5906119ba565b6115e48383836107db565b6001600160a01b0383166000908152602081905260409020548181101561161d5760405162461bcd60e51b81526004016104e590611bba565b6001600160a01b03808516600090815260208190526040808220858503905591851681529081208054849290611654908490611f80565b92505081905550826001600160a01b0316846001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8460405161169e9190611f32565b60405180910390a36115878484846107db565b6001600160a01b0382166116d75760405162461bcd60e51b81526004016104e590611de8565b6116e3826000836107db565b6001600160a01b0382166000908152602081905260409020548181101561171c5760405162461bcd60e51b81526004016104e5906119fd565b6001600160a01b038316600090815260208190526040812083830390556002805484929061174b908490612011565b90915550506040516000906001600160a01b038516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9061178e908690611f32565b60405180910390a36107db836000846107db565b600580546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b508054600082559060005260206000209081019061097c91905b80821115611822576000815560010161180e565b5090565b80356001600160a01b0381168114610dc557600080fd5b60006020828403121561184e578081fd5b61185782611826565b9392505050565b60008060408385031215611870578081fd5b61187983611826565b915061188760208401611826565b90509250929050565b6000806000606084860312156118a4578081fd5b6118ad84611826565b92506118bb60208501611826565b9150604084013590509250925092565b600080604083850312156118dd578182fd5b6118e683611826565b9150602083013561ffff811681146118fc578182fd5b809150509250929050565b60008060408385031215611919578182fd5b61192283611826565b946020939093013593505050565b600060208284031215611941578081fd5b5035919050565b6001600160a01b0391909116815260200190565b901515815260200190565b6000602080835283518082850152825b8181101561199357858101830151858201604001528201611977565b818111156119a45783604083870101525b50601f01601f1916929092016040019392505050565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b60208082526022908201527f45524332303a206275726e20616d6f756e7420657863656564732062616c616e604082015261636560f01b606082015260800190565b6020808252601390820152724e6f7468696e6720746f20776974686472617760681b604082015260600190565b60208082526027908201527f52656163686564206d6178696d756d206e756d626572206f66207461782061646040820152666472657373657360c81b606082015260800190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b60208082526022908201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604082015261737360f01b606082015260800190565b60208082526028908201527f54617820616d6f756e7420746f6f206869676820666f722063757272656e7420604082015267746178207261746560c01b606082015260800190565b6020808252601d908201527f45524332303a20696e73756666696369656e7420616c6c6f77616e6365000000604082015260600190565b60208082526026908201527f45524332303a207472616e7366657220616d6f756e7420657863656564732062604082015265616c616e636560d01b606082015260800190565b60208082526017908201527f526563697069656e7420616c7265616479206164646564000000000000000000604082015260600190565b60208082526014908201527343616e6e6f74206164642030206164647265737360601b604082015260600190565b6020808252601590820152741059191c995cdcc8185b1c9958591e481859191959605a1b604082015260600190565b6020808252602a908201527f546f74616c2074617820616d6f756e74206d757374206265206265747765656e604082015269203020616e642031302560b01b606082015260800190565b6020808252601190820152704e6f74206120746178206164647265737360781b604082015260600190565b6020808252601c908201527f526563697069656e7420686173206e6f74206265656e20616464656400000000604082015260600190565b6020808252601190820152701059191c995cdcc81b9bdd081859191959607a1b604082015260600190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b60208082526028908201527f54617820616c7265616479207468697320616d6f756e7420666f722074686973604082015267206164647265737360c01b606082015260800190565b60208082526021908201527f45524332303a206275726e2066726f6d20746865207a65726f206164647265736040820152607360f81b606082015260800190565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526024908201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646040820152637265737360e01b606082015260800190565b60208082526025908201527f45524332303a2064656372656173656420616c6c6f77616e63652062656c6f77604082015264207a65726f60d81b606082015260800190565b60208082526012908201527143616e74207573652030206164647265737360701b604082015260600190565b61ffff91909116815260200190565b90815260200190565b63ffffffff91909116815260200190565b60ff91909116815260200190565b600061ffff808316818516808303821115611f7757611f77612083565b01949350505050565b60008219821115611f9357611f93612083565b500190565b600082611fa757611fa7612099565b500490565b600063ffffffff80841680611fc357611fc3612099565b92169190910492915050565b6000816000190483118215151615611fe957611fe9612083565b500290565b600061ffff8381169083168181101561200957612009612083565b039392505050565b60008282101561202357612023612083565b500390565b60028104600182168061203c57607f821691505b6020821081141561205d57634e487b7160e01b600052602260045260246000fd5b50919050565b600060ff821660ff81141561207a5761207a612083565b60010192915050565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fdfea264697066735822122014b8fe6515f9efa2911ef51720fa151b504332ae6593b733b12f0d6fa21bc77164736f6c63430008000033

Deployed Bytecode Sourcemap

20138:7282:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;20455:44;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9270:100;;;:::i;:::-;;;;;;;:::i;11621:201::-;;;;;;:::i;:::-;;:::i;22934:116::-;;;:::i;:::-;;24884:681;;;;;;:::i;:::-;;:::i;10390:108::-;;;:::i;:::-;;;;;;;:::i;20240:31::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;21360:571::-;;;;;;:::i;:::-;;:::i;10232:93::-;;;:::i;:::-;;;;;;;:::i;13106:240::-;;;;;;:::i;:::-;;:::i;20339:54::-;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;22759:77::-;;;;;;:::i;:::-;;:::i;20197:36::-;;;:::i;:::-;;;;;;;:::i;24005:762::-;;;;;;:::i;:::-;;:::i;23241:613::-;;;;;;:::i;:::-;;:::i;10561:127::-;;;;;;:::i;:::-;;:::i;2693:103::-;;;:::i;26825:592::-;;;:::i;26083:271::-;;;;;;:::i;:::-;;:::i;2042:87::-;;;:::i;26433:304::-;;;:::i;9489:104::-;;;:::i;13849:438::-;;;;;;:::i;:::-;;:::i;22130:485::-;;;;;;:::i;:::-;;:::i;20278:23::-;;;:::i;11150:151::-;;;;;;:::i;:::-;;:::i;25685:265::-;;;;;;:::i;:::-;;:::i;2951:201::-;;;;;;:::i;:::-;;:::i;20308:22::-;;;:::i;20455:44::-;;;;;;;;;;;;;;;:::o;9270:100::-;9324:13;9357:5;9350:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;9270:100;:::o;11621:201::-;11704:4;11721:13;11737:12;:10;:12::i;:::-;11721:28;;11760:32;11769:5;11776:7;11785:6;11760:8;:32::i;:::-;-1:-1:-1;11810:4:0;;11621:201;-1:-1:-1;;;11621:201:0:o;22934:116::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;;;;;;;;;22997:10:::1;::::0;;::::1;::::0;;;::::1;::::0;::::1;22996:11;22983:24:::0;::::1;-1:-1:-1::0;;22983:24:0;;::::1;::::0;;;::::1;::::0;;;;23021:21:::1;::::0;::::1;::::0;::::1;::::0;23031:10;::::1;::::0;;::::1;::::0;23021:21:::1;:::i;:::-;;;;;;;;22934:116::o:0;24884:681::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24964:20:0;::::1;24956:53;;;;-1:-1:-1::0;;;24956:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25026:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;::::1;;25018:64;;;;-1:-1:-1::0;;;25018:64:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25105:28:0;::::1;25091:11;25105:28:::0;;;:20:::1;:28;::::0;;;;;::::1;;::::0;25144:414:::1;25165:14;:21:::0;25161:25:::1;::::0;::::1;;25144:414;;;25228:6;-1:-1:-1::0;;;;;25207:27:0::1;:14;25222:1;25207:17;;;;;;;;-1:-1:-1::0;;;25207:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;-1:-1:-1;;;;;25207:17:0::1;:27;25204:345;;;25261:9;::::0;:16:::1;::::0;25273:4;;25261:9:::1;;:16;:::i;:::-;25249:9;:28:::0;;::::1;::::0;;;::::1;-1:-1:-1::0;;25249:28:0;;::::1;;::::0;;-1:-1:-1;;;;;25290:28:0;::::1;25249:9;25290:28:::0;;;:20:::1;:28;::::0;;;;:32;;;;::::1;::::0;;25355:14:::1;25370:21:::0;;:25:::1;::::0;25249:28;;25370:25:::1;:::i;:::-;25355:41;;;;;;-1:-1:-1::0;;;25355:41:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;25335:14:::1;:17:::0;;-1:-1:-1;;;;;25355:41:0;;::::1;::::0;25335:17:::1;::::0;::::1;::::0;;::::1;;;-1:-1:-1::0;;;25335:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;:61:::0;;-1:-1:-1;;;;;;25335:61:0::1;-1:-1:-1::0;;;;;25335:61:0;;::::1;;::::0;;25409:23;;::::1;::::0;;:15:::1;:23:::0;;;;;;:31;;-1:-1:-1;;25409:31:0::1;::::0;;25453:14:::1;:20:::0;;;::::1;;-1:-1:-1::0;;;25453:20:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;-1:-1:-1;;25453:20:0;;;;;-1:-1:-1;;;;;;25453:20:0::1;::::0;;;;;;;;25491:26:::1;::::0;-1:-1:-1;;;;;25491:26:0;::::1;::::0;::::1;::::0;::::1;25532:5;;25204:345;25188:3:::0;::::1;::::0;::::1;:::i;:::-;;;;25144:414;;;;2333:1;24884:681:::0;:::o;10390:108::-;10478:12;;10390:108;:::o;20240:31::-;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;20240:31:0;;-1:-1:-1;20240:31:0;:::o;21360:571::-;21457:4;21474:15;21492:12;:10;:12::i;:::-;21474:30;;21515:38;21531:4;21537:7;21546:6;21515:15;:38::i;:::-;21591:6;21572:15;21582:4;21572:9;:15::i;:::-;:25;;21564:76;;;;-1:-1:-1;;;21564:76:0;;;;;;;:::i;:::-;21654:10;;;;;;;:33;;;;-1:-1:-1;;;;;;21669:18:0;;;;;;:12;:18;;;;;;;;21668:19;21654:33;:54;;;;-1:-1:-1;;;;;;21692:16:0;;;;;;:12;:16;;;;;;;;21691:17;21654:54;21651:213;;;21757:13;;21745:9;;21723:11;;-1:-1:-1;;;21757:13:0;;;;;21737:17;;21745:9;;21737:6;:17;:::i;:::-;:33;;;;:::i;:::-;21723:47;-1:-1:-1;21792:12:0;21723:47;21792:6;:12;:::i;:::-;21783:21;;21817:35;21827:4;21841;21848:3;21817:9;:35::i;:::-;21651:213;;21874:27;21884:4;21890:2;21894:6;21874:9;:27::i;:::-;-1:-1:-1;21919:4:0;;21360:571;-1:-1:-1;;;;21360:571:0:o;10232:93::-;10315:2;10232:93;:::o;13106:240::-;13194:4;13211:13;13227:12;:10;:12::i;:::-;-1:-1:-1;;;;;13275:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;13211:28;;-1:-1:-1;13250:66:0;;13211:28;;13266:7;;13275:40;;13305:10;;13275:40;:::i;:::-;13250:8;:66::i;20339:54::-;;;;;;;;;;;;;;;:::o;22759:77::-;22804:24;22810:10;22822:5;22804;:24::i;:::-;22759:77;:::o;20197:36::-;;;-1:-1:-1;;;20197:36:0;;;;;:::o;24005:762::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;24101:20:0;::::1;24093:53;;;;-1:-1:-1::0;;;24093:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24163:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;::::1;;24155:53;;;;-1:-1:-1::0;;;24155:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;24239:28:0;::::1;24219:17;24239:28:::0;;;:20:::1;:28;::::0;;;;;::::1;::::0;;::::1;::::0;24284:20;::::1;::::0;::::1;;24276:73;;;;-1:-1:-1::0;;;24276:73:0::1;;;;;;;:::i;:::-;24376:6;24363:19;;:10;:19;;;24360:305;;;24395:11;24409:19;24418:10:::0;24409:6;:19:::1;:::i;:::-;24447:9;::::0;24395:33;;-1:-1:-1;24467:5:0::1;::::0;24447:16:::1;::::0;24395:33;;24447:9:::1;;:16;:::i;:::-;:25;;;;24439:78;;;;-1:-1:-1::0;;;24439:78:0::1;;;;;;;:::i;:::-;24540:9;::::0;:16:::1;::::0;24552:4;;24540:9:::1;;:16;:::i;:::-;24528:9;:28:::0;;-1:-1:-1;;24528:28:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;24360:305:0::1;;;24583:11;24597:19;24610:6:::0;24597:10;:19:::1;:::i;:::-;24639:9;::::0;24583:33;;-1:-1:-1;24639:16:0::1;::::0;24583:33;;24639:9:::1;;:16;:::i;:::-;24627:9;:28:::0;;-1:-1:-1;;24627:28:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;24360:305:0::1;-1:-1:-1::0;;;;;24673:28:0;::::1;;::::0;;;:20:::1;:28;::::0;;;;;;:37;;-1:-1:-1;;24673:37:0::1;;::::0;::::1;;::::0;;24724:35;::::1;::::0;::::1;::::0;24673:37;;24724:35:::1;:::i;:::-;;;;;;;;2333:1;24005:762:::0;;:::o;23241:613::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;23331:14:::1;:21:::0;23355:3:::1;-1:-1:-1::0;23323:79:0::1;;;;-1:-1:-1::0;;;23323:79:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23419:20:0;::::1;23411:53;;;;-1:-1:-1::0;;;23411:53:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23482:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;::::1;;23481:24;23473:60;;;;-1:-1:-1::0;;;23473:60:0::1;;;;;;;:::i;:::-;23557:1;23550:4;:8;;;:48;;;;-1:-1:-1::0;23582:13:0::1;::::0;:16:::1;::::0;23596:2:::1;::::0;-1:-1:-1;;;23582:13:0;::::1;;;:16;:::i;:::-;23569:9;::::0;23562:36:::1;::::0;;;::::1;::::0;:16:::1;::::0;23569:9:::1;;23562:4:::0;:16:::1;:::i;:::-;:36;;;;23550:48;23542:103;;;;-1:-1:-1::0;;;23542:103:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;23656:23:0;::::1;;::::0;;;:15:::1;:23;::::0;;;;;;;:30;;23682:4:::1;-1:-1:-1::0;;23656:30:0;;::::1;::::0;::::1;::::0;;;23695:14:::1;:27:::0;;;;::::1;::::0;;;::::1;::::0;;-1:-1:-1;;;;;;23695:27:0::1;::::0;;::::1;::::0;;;23731:20:::1;:28:::0;;;:35;;-1:-1:-1;;23731:35:0::1;;::::0;;::::1;::::0;;;::::1;::::0;;;23787:9:::1;::::0;:16:::1;::::0;23731:35;;23787:9:::1;:16;:::i;:::-;23775:9;;:28;;;;;;;;;;;;;;;;;;23833:6;-1:-1:-1::0;;;;;23817:29:0::1;;23841:4;23817:29;;;;;;:::i;:::-;;;;;;;;23241:613:::0;;:::o;10561:127::-;-1:-1:-1;;;;;10662:18:0;;10635:7;10662:18;;;;;;;;;;;10561:127;;;;:::o;2693:103::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;2758:30:::1;2785:1;2758:18;:30::i;:::-;2693:103::o:0;26825:592::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;26915:1:::1;26888:24;26906:4;26888:9;:24::i;:::-;:28;26880:60;;;;-1:-1:-1::0;;;26880:60:0::1;;;;;;;:::i;:::-;26949:21;26973:24;26991:4;26973:9;:24::i;:::-;26949:48;;27010:7;27006:404;27027:14;:21:::0;27023:25:::1;::::0;::::1;;27006:404;;;27066:18;27087:14;27102:1;27087:17;;;;;;;;-1:-1:-1::0;;;27087:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;::::1;::::0;27123:14:::1;:21:::0;-1:-1:-1;;;;;27087:17:0;;::::1;::::0;-1:-1:-1;27123:25:0::1;::::0;27087:17;;27123:25:::1;:::i;:::-;27118:1;:30;;;27115:286;;;27164:62;27182:4;27189:10;27201:24;27219:4;27201:9;:24::i;:::-;27164:9;:62::i;:::-;27115:286;;;27323:9;::::0;-1:-1:-1;;;;;27290:32:0;::::1;27257:14;27290:32:::0;;;:20:::1;:32;::::0;;;;;27257:14;;27323:9:::1;::::0;;::::1;::::0;27274:48:::1;::::0;27290:32:::1;27274:13:::0;:48:::1;:::i;:::-;:58;;;;:::i;:::-;27257:75;;27345:44;27363:4;27370:10;27382:6;27345:9;:44::i;:::-;27115:286;;-1:-1:-1::0;27050:3:0;::::1;::::0;::::1;:::i;:::-;;;;27006:404;;;;2333:1;26825:592::o:0;26083:271::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;26164:20:0;::::1;26156:51;;;;-1:-1:-1::0;;;26156:51:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26224:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;26216:50;;;;-1:-1:-1::0;;;26216:50:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;26275:20:0;::::1;26298:5;26275:20:::0;;;:12:::1;:20;::::0;;;;;:28;;-1:-1:-1;;26275:28:0::1;::::0;;26319:27;::::1;::::0;26298:5;26319:27:::1;26083:271:::0;:::o;2042:87::-;2115:6;;-1:-1:-1;;;;;2115:6:0;2042:87;:::o;26433:304::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;26481:10:::1;:18:::0;;-1:-1:-1;;26508:13:0;;;26494:5:::1;26532:166;26553:14;:21:::0;26549:25:::1;::::0;::::1;;26532:166;;;26634:1;26592:20;:39;26613:14;26628:1;26613:17;;;;;;;;-1:-1:-1::0;;;26613:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;26613:17:0::1;26592:39:::0;;;::::1;::::0;;;;;;;;:43;;-1:-1:-1;;26592:43:0::1;;::::0;;;::::1;::::0;;;::::1;::::0;;;26662:14:::1;:17:::0;;26646:15:::1;::::0;26613:17;;26662::::1;::::0;::::1;::::0;;::::1;;;-1:-1:-1::0;;;26662:17:0::1;;;;;;;;;;::::0;;;::::1;::::0;;;;;;::::1;::::0;-1:-1:-1;;;;;26662:17:0::1;26646:34:::0;;;::::1;::::0;;;;;;;;:42;;-1:-1:-1;;26646:42:0::1;::::0;::::1;;::::0;;;::::1;::::0;;26576:3;::::1;::::0;::::1;:::i;:::-;;;;26532:166;;;-1:-1:-1::0;26708:21:0::1;26715:14;;26708:21;:::i;9489:104::-:0;9545:13;9578:7;9571:14;;;;;:::i;13849:438::-;13942:4;13959:13;13975:12;:10;:12::i;:::-;-1:-1:-1;;;;;14025:18:0;;;13998:24;14025:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;13959:28;;-1:-1:-1;14071:35:0;;;;14063:85;;;;-1:-1:-1;;;14063:85:0;;;;;;;:::i;:::-;14184:60;14193:5;14200:7;14228:15;14209:16;:34;14184:8;:60::i;22130:485::-;22209:4;22224:13;22240:12;:10;:12::i;:::-;22224:28;;22289:6;22269:16;22279:5;22269:9;:16::i;:::-;:26;;22261:77;;;;-1:-1:-1;;;22261:77:0;;;;;;;:::i;:::-;22350:10;;;;;;;:34;;;;-1:-1:-1;;;;;;22365:19:0;;;;;;:12;:19;;;;;;;;22364:20;22350:34;:55;;;;-1:-1:-1;;;;;;22389:16:0;;;;;;:12;:16;;;;;;;;22388:17;22350:55;22347:204;;;22449:13;;22439:9;;22418:11;;-1:-1:-1;;;22449:13:0;;;;;22432:16;;22439:9;;22432:6;:16;:::i;:::-;:30;;;;:::i;:::-;22418:44;-1:-1:-1;22482:12:0;22418:44;22482:6;:12;:::i;:::-;22473:21;;22505:36;22515:5;22530:4;22537:3;22505:9;:36::i;:::-;22347:204;;22559:28;22569:5;22576:2;22580:6;22559:9;:28::i;20278:23::-;;;;;;:::o;11150:151::-;-1:-1:-1;;;;;11266:18:0;;;11239:7;11266:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;11150:151::o;25685:265::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;25761:20:0;::::1;25753:51;;;;-1:-1:-1::0;;;25753:51:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25822:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;::::1;;25821:21;25813:55;;;;-1:-1:-1::0;;;25813:55:0::1;;;;;;;:::i;:::-;-1:-1:-1::0;;;;;25877:20:0;::::1;;::::0;;;:12:::1;:20;::::0;;;;;:27;;-1:-1:-1;;25877:27:0::1;25900:4;25877:27;::::0;;25920:22;::::1;::::0;25877:20;25920:22:::1;25685:265:::0;:::o;2951:201::-;2273:12;:10;:12::i;:::-;-1:-1:-1;;;;;2262:23:0;:7;:5;:7::i;:::-;-1:-1:-1;;;;;2262:23:0;;2254:68;;;;-1:-1:-1;;;2254:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;3040:22:0;::::1;3032:73;;;;-1:-1:-1::0;;;3032:73:0::1;;;;;;;:::i;:::-;3116:28;3135:8;3116:18;:28::i;20308:22::-:0;;;;;;;;;:::o;766:98::-;846:10;766:98;:::o;17485:380::-;-1:-1:-1;;;;;17621:19:0;;17613:68;;;;-1:-1:-1;;;17613:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17700:21:0;;17692:68;;;;-1:-1:-1;;;17692:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;17773:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;;:36;;;17825:32;;;;;17803:6;;17825:32;:::i;:::-;;;;;;;;17485:380;;;:::o;18152:453::-;18287:24;18314:25;18324:5;18331:7;18314:9;:25::i;:::-;18287:52;;-1:-1:-1;;18354:16:0;:37;18350:248;;18436:6;18416:16;:26;;18408:68;;;;-1:-1:-1;;;18408:68:0;;;;;;;:::i;:::-;18520:51;18529:5;18536:7;18564:6;18545:16;:25;18520:8;:51::i;:::-;18152:453;;;;:::o;14766:671::-;-1:-1:-1;;;;;14897:18:0;;14889:68;;;;-1:-1:-1;;;14889:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;14976:16:0;;14968:64;;;;-1:-1:-1;;;14968:64:0;;;;;;;:::i;:::-;15045:38;15066:4;15072:2;15076:6;15045:20;:38::i;:::-;-1:-1:-1;;;;;15118:15:0;;15096:19;15118:15;;;;;;;;;;;15152:21;;;;15144:72;;;;-1:-1:-1;;;15144:72:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;15252:15:0;;;:9;:15;;;;;;;;;;;15270:20;;;15252:38;;15312:13;;;;;;;;:23;;15284:6;;15252:9;15312:23;;15284:6;;15312:23;:::i;:::-;;;;;;;;15368:2;-1:-1:-1;;;;;15353:26:0;15362:4;-1:-1:-1;;;;;15353:26:0;;15372:6;15353:26;;;;;;:::i;:::-;;;;;;;;15392:37;15412:4;15418:2;15422:6;15392:19;:37::i;16456:591::-;-1:-1:-1;;;;;16540:21:0;;16532:67;;;;-1:-1:-1;;;16532:67:0;;;;;;;:::i;:::-;16612:49;16633:7;16650:1;16654:6;16612:20;:49::i;:::-;-1:-1:-1;;;;;16699:18:0;;16674:22;16699:18;;;;;;;;;;;16736:24;;;;16728:71;;;;-1:-1:-1;;;16728:71:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;16835:18:0;;:9;:18;;;;;;;;;;16856:23;;;16835:44;;16901:12;:22;;16873:6;;16835:9;16901:22;;16873:6;;16901:22;:::i;:::-;;;;-1:-1:-1;;16941:37:0;;16967:1;;-1:-1:-1;;;;;16941:37:0;;;;;;;16971:6;;16941:37;:::i;:::-;;;;;;;;16991:48;17011:7;17028:1;17032:6;16991:19;:48::i;3312:191::-;3405:6;;;-1:-1:-1;;;;;3422:17:0;;;-1:-1:-1;;;;;;3422:17:0;;;;;;;3455:40;;3405:6;;;3422:17;3405:6;;3455:40;;3386:16;;3455:40;3312:191;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;14:175:1:-;84:20;;-1:-1:-1;;;;;133:31:1;;123:42;;113:2;;179:1;176;169:12;194:198;;306:2;294:9;285:7;281:23;277:32;274:2;;;327:6;319;312:22;274:2;355:31;376:9;355:31;:::i;:::-;345:41;264:128;-1:-1:-1;;;264:128:1:o;397:274::-;;;526:2;514:9;505:7;501:23;497:32;494:2;;;547:6;539;532:22;494:2;575:31;596:9;575:31;:::i;:::-;565:41;;625:40;661:2;650:9;646:18;625:40;:::i;:::-;615:50;;484:187;;;;;:::o;676:342::-;;;;822:2;810:9;801:7;797:23;793:32;790:2;;;843:6;835;828:22;790:2;871:31;892:9;871:31;:::i;:::-;861:41;;921:40;957:2;946:9;942:18;921:40;:::i;:::-;911:50;;1008:2;997:9;993:18;980:32;970:42;;780:238;;;;;:::o;1023:368::-;;;1151:2;1139:9;1130:7;1126:23;1122:32;1119:2;;;1172:6;1164;1157:22;1119:2;1200:31;1221:9;1200:31;:::i;:::-;1190:41;;1281:2;1270:9;1266:18;1253:32;1325:6;1318:5;1314:18;1307:5;1304:29;1294:2;;1352:6;1344;1337:22;1294:2;1380:5;1370:15;;;1109:282;;;;;:::o;1396:266::-;;;1525:2;1513:9;1504:7;1500:23;1496:32;1493:2;;;1546:6;1538;1531:22;1493:2;1574:31;1595:9;1574:31;:::i;:::-;1564:41;1652:2;1637:18;;;;1624:32;;-1:-1:-1;;;1483:179:1:o;1667:190::-;;1779:2;1767:9;1758:7;1754:23;1750:32;1747:2;;;1800:6;1792;1785:22;1747:2;-1:-1:-1;1828:23:1;;1737:120;-1:-1:-1;1737:120:1:o;1862:203::-;-1:-1:-1;;;;;2026:32:1;;;;2008:51;;1996:2;1981:18;;1963:102::o;2070:187::-;2235:14;;2228:22;2210:41;;2198:2;2183:18;;2165:92::o;2262:603::-;;2403:2;2432;2421:9;2414:21;2464:6;2458:13;2507:6;2502:2;2491:9;2487:18;2480:34;2532:4;2545:140;2559:6;2556:1;2553:13;2545:140;;;2654:14;;;2650:23;;2644:30;2620:17;;;2639:2;2616:26;2609:66;2574:10;;2545:140;;;2703:6;2700:1;2697:13;2694:2;;;2773:4;2768:2;2759:6;2748:9;2744:22;2740:31;2733:45;2694:2;-1:-1:-1;2849:2:1;2828:15;-1:-1:-1;;2824:29:1;2809:45;;;;2856:2;2805:54;;2383:482;-1:-1:-1;;;2383:482:1:o;2870:399::-;3072:2;3054:21;;;3111:2;3091:18;;;3084:30;3150:34;3145:2;3130:18;;3123:62;-1:-1:-1;;;3216:2:1;3201:18;;3194:33;3259:3;3244:19;;3044:225::o;3274:398::-;3476:2;3458:21;;;3515:2;3495:18;;;3488:30;3554:34;3549:2;3534:18;;3527:62;-1:-1:-1;;;3620:2:1;3605:18;;3598:32;3662:3;3647:19;;3448:224::o;3677:343::-;3879:2;3861:21;;;3918:2;3898:18;;;3891:30;-1:-1:-1;;;3952:2:1;3937:18;;3930:49;4011:2;3996:18;;3851:169::o;4025:403::-;4227:2;4209:21;;;4266:2;4246:18;;;4239:30;4305:34;4300:2;4285:18;;4278:62;-1:-1:-1;;;4371:2:1;4356:18;;4349:37;4418:3;4403:19;;4199:229::o;4433:402::-;4635:2;4617:21;;;4674:2;4654:18;;;4647:30;4713:34;4708:2;4693:18;;4686:62;-1:-1:-1;;;4779:2:1;4764:18;;4757:36;4825:3;4810:19;;4607:228::o;4840:398::-;5042:2;5024:21;;;5081:2;5061:18;;;5054:30;5120:34;5115:2;5100:18;;5093:62;-1:-1:-1;;;5186:2:1;5171:18;;5164:32;5228:3;5213:19;;5014:224::o;5243:404::-;5445:2;5427:21;;;5484:2;5464:18;;;5457:30;5523:34;5518:2;5503:18;;5496:62;-1:-1:-1;;;5589:2:1;5574:18;;5567:38;5637:3;5622:19;;5417:230::o;5652:353::-;5854:2;5836:21;;;5893:2;5873:18;;;5866:30;5932:31;5927:2;5912:18;;5905:59;5996:2;5981:18;;5826:179::o;6010:402::-;6212:2;6194:21;;;6251:2;6231:18;;;6224:30;6290:34;6285:2;6270:18;;6263:62;-1:-1:-1;;;6356:2:1;6341:18;;6334:36;6402:3;6387:19;;6184:228::o;6417:347::-;6619:2;6601:21;;;6658:2;6638:18;;;6631:30;6697:25;6692:2;6677:18;;6670:53;6755:2;6740:18;;6591:173::o;6769:344::-;6971:2;6953:21;;;7010:2;6990:18;;;6983:30;-1:-1:-1;;;7044:2:1;7029:18;;7022:50;7104:2;7089:18;;6943:170::o;7118:345::-;7320:2;7302:21;;;7359:2;7339:18;;;7332:30;-1:-1:-1;;;7393:2:1;7378:18;;7371:51;7454:2;7439:18;;7292:171::o;7468:406::-;7670:2;7652:21;;;7709:2;7689:18;;;7682:30;7748:34;7743:2;7728:18;;7721:62;-1:-1:-1;;;7814:2:1;7799:18;;7792:40;7864:3;7849:19;;7642:232::o;7879:341::-;8081:2;8063:21;;;8120:2;8100:18;;;8093:30;-1:-1:-1;;;8154:2:1;8139:18;;8132:47;8211:2;8196:18;;8053:167::o;8225:352::-;8427:2;8409:21;;;8466:2;8446:18;;;8439:30;8505;8500:2;8485:18;;8478:58;8568:2;8553:18;;8399:178::o;8582:341::-;8784:2;8766:21;;;8823:2;8803:18;;;8796:30;-1:-1:-1;;;8857:2:1;8842:18;;8835:47;8914:2;8899:18;;8756:167::o;8928:356::-;9130:2;9112:21;;;9149:18;;;9142:30;9208:34;9203:2;9188:18;;9181:62;9275:2;9260:18;;9102:182::o;9289:404::-;9491:2;9473:21;;;9530:2;9510:18;;;9503:30;9569:34;9564:2;9549:18;;9542:62;-1:-1:-1;;;9635:2:1;9620:18;;9613:38;9683:3;9668:19;;9463:230::o;9698:397::-;9900:2;9882:21;;;9939:2;9919:18;;;9912:30;9978:34;9973:2;9958:18;;9951:62;-1:-1:-1;;;10044:2:1;10029:18;;10022:31;10085:3;10070:19;;9872:223::o;10100:401::-;10302:2;10284:21;;;10341:2;10321:18;;;10314:30;10380:34;10375:2;10360:18;;10353:62;-1:-1:-1;;;10446:2:1;10431:18;;10424:35;10491:3;10476:19;;10274:227::o;10506:400::-;10708:2;10690:21;;;10747:2;10727:18;;;10720:30;10786:34;10781:2;10766:18;;10759:62;-1:-1:-1;;;10852:2:1;10837:18;;10830:34;10896:3;10881:19;;10680:226::o;10911:401::-;11113:2;11095:21;;;11152:2;11132:18;;;11125:30;11191:34;11186:2;11171:18;;11164:62;-1:-1:-1;;;11257:2:1;11242:18;;11235:35;11302:3;11287:19;;11085:227::o;11317:342::-;11519:2;11501:21;;;11558:2;11538:18;;;11531:30;-1:-1:-1;;;11592:2:1;11577:18;;11570:48;11650:2;11635:18;;11491:168::o;11664:188::-;11838:6;11826:19;;;;11808:38;;11796:2;11781:18;;11763:89::o;11857:177::-;12003:25;;;11991:2;11976:18;;11958:76::o;12039:192::-;12213:10;12201:23;;;;12183:42;;12171:2;12156:18;;12138:93::o;12236:184::-;12408:4;12396:17;;;;12378:36;;12366:2;12351:18;;12333:87::o;12425:224::-;;12492:6;12525:2;12522:1;12518:10;12555:2;12552:1;12548:10;12586:3;12582:2;12578:12;12573:3;12570:21;12567:2;;;12594:18;;:::i;:::-;12630:13;;12472:177;-1:-1:-1;;;;12472:177:1:o;12654:128::-;;12725:1;12721:6;12718:1;12715:13;12712:2;;;12731:18;;:::i;:::-;-1:-1:-1;12767:9:1;;12702:80::o;12787:120::-;;12853:1;12843:2;;12858:18;;:::i;:::-;-1:-1:-1;12892:9:1;;12833:74::o;12912:191::-;;12977:10;13014:2;13011:1;13007:10;13036:3;13026:2;;13043:18;;:::i;:::-;13081:10;;13077:20;;;;;12957:146;-1:-1:-1;;12957:146:1:o;13108:168::-;;13214:1;13210;13206:6;13202:14;13199:1;13196:21;13191:1;13184:9;13177:17;13173:45;13170:2;;;13221:18;;:::i;:::-;-1:-1:-1;13261:9:1;;13160:116::o;13281:217::-;;13349:6;13405:10;;;;13375;;13427:12;;;13424:2;;;13442:18;;:::i;:::-;13479:13;;13329:169;-1:-1:-1;;;13329:169:1:o;13503:125::-;;13571:1;13568;13565:8;13562:2;;;13576:18;;:::i;:::-;-1:-1:-1;13613:9:1;;13552:76::o;13633:380::-;13718:1;13708:12;;13765:1;13755:12;;;13776:2;;13830:4;13822:6;13818:17;13808:27;;13776:2;13883;13875:6;13872:14;13852:18;13849:38;13846:2;;;13929:10;13924:3;13920:20;13917:1;13910:31;13964:4;13961:1;13954:15;13992:4;13989:1;13982:15;13846:2;;13688:325;;;:::o;14018:175::-;;14099:4;14092:5;14088:16;14128:4;14119:7;14116:17;14113:2;;;14136:18;;:::i;:::-;14185:1;14172:15;;14063:130;-1:-1:-1;;14063:130:1:o;14198:127::-;14259:10;14254:3;14250:20;14247:1;14240:31;14290:4;14287:1;14280:15;14314:4;14311:1;14304:15;14330:127;14391:10;14386:3;14382:20;14379:1;14372:31;14422:4;14419:1;14412:15;14446:4;14443:1;14436:15

Swarm Source

ipfs://14b8fe6515f9efa2911ef51720fa151b504332ae6593b733b12f0d6fa21bc771
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.