ETH Price: $2,755.24 (+4.96%)

Token

Micron (MICRO)
 

Overview

Max Total Supply

10,000,000,000 MICRO

Holders

96

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
7,263,256.922080563193586785 MICRO

Value
$0.00
0x79c07A60fe15494Cd3e3D919b2b5b09b735204D1
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:
MICRO

Compiler Version
v0.8.9+commit.e5eed63a

Optimization Enabled:
No with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-08-30
*/

// SPDX-License-Identifier: Unlicensed

pragma solidity 0.8.9;

abstract contract Context {
    function _msgSender() internal view virtual returns (address) {
        return msg.sender;
    }
 
    function _msgData() internal view virtual returns (bytes calldata) {
        this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691
        return msg.data;
    }
}
 
interface IUniswapV2Pair {
    event Approval(address indexed owner, address indexed spender, uint value);
    event Transfer(address indexed from, address indexed to, uint value);
 
    function name() external pure returns (string memory);
    function symbol() external pure returns (string memory);
    function decimals() external pure returns (uint8);
    function totalSupply() external view returns (uint);
    function balanceOf(address owner) external view returns (uint);
    function allowance(address owner, address spender) external view returns (uint);
 
    function approve(address spender, uint value) external returns (bool);
    function transfer(address to, uint value) external returns (bool);
    function transferFrom(address from, address to, uint value) external returns (bool);
 
    function DOMAIN_SEPARATOR() external view returns (bytes32);
    function PERMIT_TYPEHASH() external pure returns (bytes32);
    function nonces(address owner) external view returns (uint);
 
    function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
 
    event Mint(address indexed sender, uint amount0, uint amount1);
    event Burn(address indexed sender, uint amount0, uint amount1, address indexed to);
    event Swap(
        address indexed sender,
        uint amount0In,
        uint amount1In,
        uint amount0Out,
        uint amount1Out,
        address indexed to
    );
    event Sync(uint112 reserve0, uint112 reserve1);
 
    function MINIMUM_LIQUIDITY() external pure returns (uint);
    function factory() external view returns (address);
    function token0() external view returns (address);
    function token1() external view returns (address);
    function getReserves() external view returns (uint112 reserve0, uint112 reserve1, uint32 blockTimestampLast);
    function price0CumulativeLast() external view returns (uint);
    function price1CumulativeLast() external view returns (uint);
    function kLast() external view returns (uint);
 
    function mint(address to) external returns (uint liquidity);
    function burn(address to) external returns (uint amount0, uint amount1);
    function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
    function skim(address to) external;
    function sync() external;
 
    function initialize(address, address) external;
}
 
interface IUniswapV2Factory {
    event PairCreated(address indexed token0, address indexed token1, address pair, uint);
 
    function feeTo() external view returns (address);
    function feeToSetter() external view returns (address);
 
    function getPair(address tokenA, address tokenB) external view returns (address pair);
    function allPairs(uint) external view returns (address pair);
    function allPairsLength() external view returns (uint);
 
    function createPair(address tokenA, address tokenB) external returns (address pair);
 
    function setFeeTo(address) external;
    function setFeeToSetter(address) external;
}
 
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);
}
 
 
contract ERC20 is Context, IERC20, IERC20Metadata {
    using SafeMath for uint256;
 
    mapping(address => uint256) private _balances;
 
    mapping(address => mapping(address => uint256)) private _allowances;
 
    uint256 private _totalSupply;
 
    string private _name;
    string private _symbol;
 
    /**
     * @dev Sets the values for {name} and {symbol}.
     *
     * The default value of {decimals} is 18. To select a different value for
     * {decimals} you should overload it.
     *
     * All two of these values are immutable: they can only be set once during
     * construction.
     */
    constructor(string memory name_, string memory symbol_) {
        _name = name_;
        _symbol = symbol_;
    }
 
    /**
     * @dev Returns the name of the token.
     */
    function name() public view virtual override returns (string memory) {
        return _name;
    }
 
    /**
     * @dev Returns the symbol of the token, usually a shorter version of the
     * name.
     */
    function symbol() public view virtual override returns (string memory) {
        return _symbol;
    }
 
    /**
     * @dev Returns the number of decimals used to get its user representation.
     * For example, if `decimals` equals `2`, a balance of `505` tokens should
     * be displayed to a user as `5,05` (`505 / 10 ** 2`).
     *
     * Tokens usually opt for a value of 18, imitating the relationship between
     * Ether and Wei. This is the value {ERC20} uses, unless this function is
     * overridden;
     *
     * NOTE: This information is only used for _display_ purposes: it in
     * no way affects any of the arithmetic of the contract, including
     * {IERC20-balanceOf} and {IERC20-transfer}.
     */
    function decimals() public view virtual override returns (uint8) {
        return 18;
    }
 
    /**
     * @dev See {IERC20-totalSupply}.
     */
    function totalSupply() public view virtual override returns (uint256) {
        return _totalSupply;
    }
 
    /**
     * @dev See {IERC20-balanceOf}.
     */
    function balanceOf(address account) public view virtual override returns (uint256) {
        return _balances[account];
    }
 
    /**
     * @dev See {IERC20-transfer}.
     *
     * Requirements:
     *
     * - `recipient` cannot be the zero address.
     * - the caller must have a balance of at least `amount`.
     */
    function transfer(address recipient, uint256 amount) public virtual override returns (bool) {
        _transfer(_msgSender(), recipient, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-allowance}.
     */
    function allowance(address owner, address spender) public view virtual override returns (uint256) {
        return _allowances[owner][spender];
    }
 
    /**
     * @dev See {IERC20-approve}.
     *
     * Requirements:
     *
     * - `spender` cannot be the zero address.
     */
    function approve(address spender, uint256 amount) public virtual override returns (bool) {
        _approve(_msgSender(), spender, amount);
        return true;
    }
 
    /**
     * @dev See {IERC20-transferFrom}.
     *
     * Emits an {Approval} event indicating the updated allowance. This is not
     * required by the EIP. See the note at the beginning of {ERC20}.
     *
     * Requirements:
     *
     * - `sender` and `recipient` cannot be the zero address.
     * - `sender` must have a balance of at least `amount`.
     * - the caller must have allowance for ``sender``'s tokens of at least
     * `amount`.
     */
    function transferFrom(
        address sender,
        address recipient,
        uint256 amount
    ) public virtual override returns (bool) {
        _transfer(sender, recipient, amount);
        _approve(sender, _msgSender(), _allowances[sender][_msgSender()].sub(amount, "ERC20: transfer amount exceeds allowance"));
        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].add(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) {
        _approve(_msgSender(), spender, _allowances[_msgSender()][spender].sub(subtractedValue, "ERC20: decreased allowance below zero"));
        return true;
    }
 
    /**
     * @dev Moves tokens `amount` from `sender` to `recipient`.
     *
     * This is 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);
 
        _balances[sender] = _balances[sender].sub(amount, "ERC20: transfer amount exceeds balance");
        _balances[recipient] = _balances[recipient].add(amount);
        emit Transfer(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 = _totalSupply.add(amount);
        _balances[account] = _balances[account].add(amount);
        emit Transfer(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);
 
        _balances[account] = _balances[account].sub(amount, "ERC20: burn amount exceeds balance");
        _totalSupply = _totalSupply.sub(amount);
        emit Transfer(account, address(0), amount);
    }
 
    /**
     * @dev Sets `amount` as the allowance of `spender` over the `owner` s tokens.
     *
     * This internal function is equivalent to `approve`, and can be used to
     * e.g. set automatic allowances for certain subsystems, etc.
     *
     * Emits an {Approval} event.
     *
     * Requirements:
     *
     * - `owner` cannot be the zero address.
     * - `spender` cannot be the zero address.
     */
    function _approve(
        address owner,
        address spender,
        uint256 amount
    ) internal virtual {
        require(owner != address(0), "ERC20: approve from the zero address");
        require(spender != address(0), "ERC20: approve to the zero address");
 
        _allowances[owner][spender] = amount;
        emit Approval(owner, spender, amount);
    }
 
    /**
     * @dev Hook that is called before any transfer of tokens. This includes
     * minting and burning.
     *
     * Calling conditions:
     *
     * - when `from` and `to` are both non-zero, `amount` of ``from``'s tokens
     * will be to 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 {}
}
 
library SafeMath {
    /**
     * @dev Returns the addition of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `+` operator.
     *
     * Requirements:
     *
     * - Addition cannot overflow.
     */
    function add(uint256 a, uint256 b) internal pure returns (uint256) {
        uint256 c = a + b;
        require(c >= a, "SafeMath: addition overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b) internal pure returns (uint256) {
        return sub(a, b, "SafeMath: subtraction overflow");
    }
 
    /**
     * @dev Returns the subtraction of two unsigned integers, reverting with custom message on
     * overflow (when the result is negative).
     *
     * Counterpart to Solidity's `-` operator.
     *
     * Requirements:
     *
     * - Subtraction cannot overflow.
     */
    function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b <= a, errorMessage);
        uint256 c = a - b;
 
        return c;
    }
 
    /**
     * @dev Returns the multiplication of two unsigned integers, reverting on
     * overflow.
     *
     * Counterpart to Solidity's `*` operator.
     *
     * Requirements:
     *
     * - Multiplication cannot overflow.
     */
    function mul(uint256 a, uint256 b) internal pure returns (uint256) {
        // Gas optimization: this is cheaper than requiring 'a' not being zero, but the
        // benefit is lost if 'b' is also tested.
        // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522
        if (a == 0) {
            return 0;
        }
 
        uint256 c = a * b;
        require(c / a == b, "SafeMath: multiplication overflow");
 
        return c;
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b) internal pure returns (uint256) {
        return div(a, b, "SafeMath: division by zero");
    }
 
    /**
     * @dev Returns the integer division of two unsigned integers. Reverts with custom message on
     * division by zero. The result is rounded towards zero.
     *
     * Counterpart to Solidity's `/` operator. Note: this function uses a
     * `revert` opcode (which leaves remaining gas untouched) while Solidity
     * uses an invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b > 0, errorMessage);
        uint256 c = a / b;
        // assert(a == b * c + a % b); // There is no case in which this doesn't hold
 
        return c;
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b) internal pure returns (uint256) {
        return mod(a, b, "SafeMath: modulo by zero");
    }
 
    /**
     * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo),
     * Reverts with custom message when dividing by zero.
     *
     * Counterpart to Solidity's `%` operator. This function uses a `revert`
     * opcode (which leaves remaining gas untouched) while Solidity uses an
     * invalid opcode to revert (consuming all remaining gas).
     *
     * Requirements:
     *
     * - The divisor cannot be zero.
     */
    function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
        require(b != 0, errorMessage);
        return a % b;
    }
}
 
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 () {
        address msgSender = _msgSender();
        _owner = msgSender;
        emit OwnershipTransferred(address(0), msgSender);
    }
 
    /**
     * @dev Returns the address of the current owner.
     */
    function owner() public view 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 {
        emit OwnershipTransferred(_owner, address(0));
        _owner = 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");
        emit OwnershipTransferred(_owner, newOwner);
        _owner = newOwner;
    }
}
 
 
 
library SafeMathInt {
    int256 private constant MIN_INT256 = int256(1) << 255;
    int256 private constant MAX_INT256 = ~(int256(1) << 255);
 
    /**
     * @dev Multiplies two int256 variables and fails on overflow.
     */
    function mul(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a * b;
 
        // Detect overflow when multiplying MIN_INT256 with -1
        require(c != MIN_INT256 || (a & MIN_INT256) != (b & MIN_INT256));
        require((b == 0) || (c / b == a));
        return c;
    }
 
    /**
     * @dev Division of two int256 variables and fails on overflow.
     */
    function div(int256 a, int256 b) internal pure returns (int256) {
        // Prevent overflow when dividing MIN_INT256 by -1
        require(b != -1 || a != MIN_INT256);
 
        // Solidity already throws when dividing by 0.
        return a / b;
    }
 
    /**
     * @dev Subtracts two int256 variables and fails on overflow.
     */
    function sub(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a - b;
        require((b >= 0 && c <= a) || (b < 0 && c > a));
        return c;
    }
 
    /**
     * @dev Adds two int256 variables and fails on overflow.
     */
    function add(int256 a, int256 b) internal pure returns (int256) {
        int256 c = a + b;
        require((b >= 0 && c >= a) || (b < 0 && c < a));
        return c;
    }
 
    /**
     * @dev Converts to absolute value, and fails on overflow.
     */
    function abs(int256 a) internal pure returns (int256) {
        require(a != MIN_INT256);
        return a < 0 ? -a : a;
    }
 
 
    function toUint256Safe(int256 a) internal pure returns (uint256) {
        require(a >= 0);
        return uint256(a);
    }
}
 
library SafeMathUint {
  function toInt256Safe(uint256 a) internal pure returns (int256) {
    int256 b = int256(a);
    require(b >= 0);
    return b;
  }
}
 
 
interface IUniswapV2Router01 {
    function factory() external pure returns (address);
    function WETH() external pure returns (address);
 
    function addLiquidity(
        address tokenA,
        address tokenB,
        uint amountADesired,
        uint amountBDesired,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB, uint liquidity);
    function addLiquidityETH(
        address token,
        uint amountTokenDesired,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external payable returns (uint amountToken, uint amountETH, uint liquidity);
    function removeLiquidity(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETH(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountToken, uint amountETH);
    function removeLiquidityWithPermit(
        address tokenA,
        address tokenB,
        uint liquidity,
        uint amountAMin,
        uint amountBMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountA, uint amountB);
    function removeLiquidityETHWithPermit(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountToken, uint amountETH);
    function swapExactTokensForTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapTokensForExactTokens(
        uint amountOut,
        uint amountInMax,
        address[] calldata path,
        address to,
        uint deadline
    ) external returns (uint[] memory amounts);
    function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
    function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
        external
        returns (uint[] memory amounts);
    function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
        external
        payable
        returns (uint[] memory amounts);
 
    function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
    function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
    function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
    function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
    function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
 
interface IUniswapV2Router02 is IUniswapV2Router01 {
    function removeLiquidityETHSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline
    ) external returns (uint amountETH);
    function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
        address token,
        uint liquidity,
        uint amountTokenMin,
        uint amountETHMin,
        address to,
        uint deadline,
        bool approveMax, uint8 v, bytes32 r, bytes32 s
    ) external returns (uint amountETH);
 
    function swapExactTokensForTokensSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
    function swapExactETHForTokensSupportingFeeOnTransferTokens(
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external payable;
    function swapExactTokensForETHSupportingFeeOnTransferTokens(
        uint amountIn,
        uint amountOutMin,
        address[] calldata path,
        address to,
        uint deadline
    ) external;
}
 
contract MICRO is ERC20, Ownable {
    using SafeMath for uint256;
 
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
 
    uint256 public maxTransactionAmount;
    uint256 public maxWallet;
 
 
    /******************/
 
    // exclude from max transaction amount
    mapping (address => bool) public _isExcludedMaxTransactionAmount;
 
    // store addresses that a automatic market maker pairs. Any transfer *to* these addresses
    // could be subject to a maximum transfer amount
    mapping (address => bool) public automatedMarketMakerPairs;
 
    event UpdateUniswapV2Router(address indexed newAddress, address indexed oldAddress);

    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 

 
    constructor() ERC20("Micron", "MICRO") {
 
        IUniswapV2Router02 _uniswapV2Router = IUniswapV2Router02(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D);
 
        excludeFromMaxTransaction(address(_uniswapV2Router), true);
        uniswapV2Router = _uniswapV2Router;
 
        uniswapV2Pair = IUniswapV2Factory(_uniswapV2Router.factory()).createPair(address(this), _uniswapV2Router.WETH());
        excludeFromMaxTransaction(address(uniswapV2Pair), true);
        _setAutomatedMarketMakerPair(address(uniswapV2Pair), true);
 
 
        uint256 totalSupply = 10000000000 * 1e18;
 
        maxTransactionAmount = totalSupply * 5 / 1000; // 0.5% maxTransactionAmountTxn
        maxWallet = totalSupply * 20 / 1000; // 2% maxWallet
  
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(address(this), true);
        excludeFromMaxTransaction(address(0xdead), true);
 
        /*
            _mint is an internal function in ERC20.sol that is only called here,
            and CANNOT be called ever again
        */
        _mint(msg.sender, totalSupply);
    }
 
    receive() external payable {
 
  	}
  
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 1 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.1%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxWallet lower than 0.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
  
    function setAutomatedMarketMakerPair(address pair, bool value) public onlyOwner {
        require(pair != uniswapV2Pair, "The pair cannot be removed from automatedMarketMakerPairs");
 
        _setAutomatedMarketMakerPair(pair, value);
    }
 
    function _setAutomatedMarketMakerPair(address pair, bool value) private {
        automatedMarketMakerPairs[pair] = value;
 
        emit SetAutomatedMarketMakerPair(pair, value);
    }
	
    function _transfer(
        address from,
        address to,
        uint256 amount
    ) internal override {
        require(from != address(0), "ERC20: transfer from the zero address");
        require(to != address(0), "ERC20: transfer to the zero address");
         if(amount == 0) {
            super._transfer(from, to, 0);
            return;
        }
 
       
		if (
			from != owner() &&
			to != owner() &&
			to != address(0) &&
			to != address(0xdead)
		){
		
			//when buy
			if (automatedMarketMakerPairs[from] && !_isExcludedMaxTransactionAmount[to]) {
					require(amount <= maxTransactionAmount, "Buy transfer amount exceeds the maxTransactionAmount.");
					require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
			}

			//when sell
			else if (automatedMarketMakerPairs[to] && !_isExcludedMaxTransactionAmount[from]) {
					require(amount <= maxTransactionAmount, "Sell transfer amount exceeds the maxTransactionAmount.");
			}
			else if(!_isExcludedMaxTransactionAmount[to]){
				require(amount + balanceOf(to) <= maxWallet, "Max wallet exceeded");
			}
		}
        
 
        super._transfer(from, to, amount);
    }
}

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":"pair","type":"address"},{"indexed":true,"internalType":"bool","name":"value","type":"bool"}],"name":"SetAutomatedMarketMakerPair","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":"newAddress","type":"address"},{"indexed":true,"internalType":"address","name":"oldAddress","type":"address"}],"name":"UpdateUniswapV2Router","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"","type":"address"}],"name":"automatedMarketMakerPairs","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":"updAds","type":"address"},{"internalType":"bool","name":"isEx","type":"bool"}],"name":"excludeFromMaxTransaction","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":"maxTransactionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"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":"uniswapV2Pair","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uniswapV2Router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxTxnAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newNum","type":"uint256"}],"name":"updateMaxWalletAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c06040523480156200001157600080fd5b506040518060400160405280600681526020017f4d6963726f6e00000000000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f4d4943524f00000000000000000000000000000000000000000000000000000081525081600390805190602001906200009692919062000859565b508060049080519060200190620000af92919062000859565b5050506000620000c46200047260201b60201c565b905080600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3506000737a250d5630b4cf539739df2c5dacb4c659f2488d90506200018f8160016200047a60201b60201c565b8073ffffffffffffffffffffffffffffffffffffffff1660808173ffffffffffffffffffffffffffffffffffffffff16815250508073ffffffffffffffffffffffffffffffffffffffff1663c45a01556040518163ffffffff1660e01b815260040160206040518083038186803b1580156200020a57600080fd5b505afa1580156200021f573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000245919062000973565b73ffffffffffffffffffffffffffffffffffffffff1663c9c65396308373ffffffffffffffffffffffffffffffffffffffff1663ad5c46486040518163ffffffff1660e01b815260040160206040518083038186803b158015620002a857600080fd5b505afa158015620002bd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002e3919062000973565b6040518363ffffffff1660e01b815260040162000302929190620009b6565b602060405180830381600087803b1580156200031d57600080fd5b505af115801562000332573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019062000358919062000973565b73ffffffffffffffffffffffffffffffffffffffff1660a08173ffffffffffffffffffffffffffffffffffffffff1681525050620003a060a05160016200047a60201b60201c565b620003b560a05160016200057760201b60201c565b60006b204fce5e3e2502611000000090506103e8600582620003d8919062000a1c565b620003e4919062000aac565b6006819055506103e8601482620003fc919062000a1c565b62000408919062000aac565b60078190555062000430620004226200061860201b60201c565b60016200047a60201b60201c565b620004433060016200047a60201b60201c565b6200045861dead60016200047a60201b60201c565b6200046a33826200064260201b60201c565b505062000d3b565b600033905090565b6200048a6200047260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146200051c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620005139062000b45565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620006b5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620006ac9062000bb7565b60405180910390fd5b620006c960008383620007f160201b60201c565b620006e581600254620007f660201b620012d91790919060201c565b60028190555062000743816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054620007f660201b620012d91790919060201c565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051620007e5919062000bea565b60405180910390a35050565b505050565b600080828462000807919062000c07565b9050838110156200084f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620008469062000cb4565b60405180910390fd5b8091505092915050565b828054620008679062000d05565b90600052602060002090601f0160209004810192826200088b5760008555620008d7565b82601f10620008a657805160ff1916838001178555620008d7565b82800160010185558215620008d7579182015b82811115620008d6578251825591602001919060010190620008b9565b5b509050620008e69190620008ea565b5090565b5b8082111562000905576000816000905550600101620008eb565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200093b826200090e565b9050919050565b6200094d816200092e565b81146200095957600080fd5b50565b6000815190506200096d8162000942565b92915050565b6000602082840312156200098c576200098b62000909565b5b60006200099c848285016200095c565b91505092915050565b620009b0816200092e565b82525050565b6000604082019050620009cd6000830185620009a5565b620009dc6020830184620009a5565b9392505050565b6000819050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600062000a2982620009e3565b915062000a3683620009e3565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161562000a725762000a71620009ed565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600062000ab982620009e3565b915062000ac683620009e3565b92508262000ad95762000ad862000a7d565b5b828204905092915050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600062000b2d60208362000ae4565b915062000b3a8262000af5565b602082019050919050565b6000602082019050818103600083015262000b608162000b1e565b9050919050565b7f45524332303a206d696e7420746f20746865207a65726f206164647265737300600082015250565b600062000b9f601f8362000ae4565b915062000bac8262000b67565b602082019050919050565b6000602082019050818103600083015262000bd28162000b90565b9050919050565b62000be481620009e3565b82525050565b600060208201905062000c01600083018462000bd9565b92915050565b600062000c1482620009e3565b915062000c2183620009e3565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111562000c595762000c58620009ed565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600062000c9c601b8362000ae4565b915062000ca98262000c64565b602082019050919050565b6000602082019050818103600083015262000ccf8162000c8d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168062000d1e57607f821691505b6020821081141562000d355762000d3462000cd6565b5b50919050565b60805160a051612b2862000d68600039600081816109a60152610daf015260006106b90152612b286000f3fe60806040526004361061014f5760003560e01c80637571336a116100b6578063b62496f51161006f578063b62496f5146104c5578063c18bc19514610502578063c8c8ebe41461052b578063dd62ed3e14610556578063f2fde38b14610593578063f8b45b05146105bc57610156565b80637571336a146103a35780638da5cb5b146103cc57806395d89b41146103f75780639a7a23d614610422578063a457c2d71461044b578063a9059cbb1461048857610156565b806323b872dd1161010857806323b872dd1461027f578063313ce567146102bc57806339509351146102e757806349bd5a5e1461032457806370a082311461034f578063715018a61461038c57610156565b806306fdde031461015b578063095ea7b31461018657806310d5de53146101c35780631694505e1461020057806318160ddd1461022b578063203e727e1461025657610156565b3661015657005b600080fd5b34801561016757600080fd5b506101706105e7565b60405161017d9190611e24565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611edf565b610679565b6040516101ba9190611f3a565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190611f55565b610697565b6040516101f79190611f3a565b60405180910390f35b34801561020c57600080fd5b506102156106b7565b6040516102229190611fe1565b60405180910390f35b34801561023757600080fd5b506102406106db565b60405161024d919061200b565b60405180910390f35b34801561026257600080fd5b5061027d60048036038101906102789190612026565b6106e5565b005b34801561028b57600080fd5b506102a660048036038101906102a19190612053565b61080f565b6040516102b39190611f3a565b60405180910390f35b3480156102c857600080fd5b506102d16108e8565b6040516102de91906120c2565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190611edf565b6108f1565b60405161031b9190611f3a565b60405180910390f35b34801561033057600080fd5b506103396109a4565b60405161034691906120ec565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190611f55565b6109c8565b604051610383919061200b565b60405180910390f35b34801561039857600080fd5b506103a1610a10565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190612133565b610b68565b005b3480156103d857600080fd5b506103e1610c5a565b6040516103ee91906120ec565b60405180910390f35b34801561040357600080fd5b5061040c610c84565b6040516104199190611e24565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190612133565b610d16565b005b34801561045757600080fd5b50610472600480360381019061046d9190611edf565b610e4a565b60405161047f9190611f3a565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190611edf565b610f17565b6040516104bc9190611f3a565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190611f55565b610f35565b6040516104f99190611f3a565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190612026565b610f55565b005b34801561053757600080fd5b5061054061107f565b60405161054d919061200b565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612173565b611085565b60405161058a919061200b565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190611f55565b61110c565b005b3480156105c857600080fd5b506105d16112d3565b6040516105de919061200b565b60405180910390f35b6060600380546105f6906121e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610622906121e2565b801561066f5780601f106106445761010080835404028352916020019161066f565b820191906000526020600020905b81548152906001019060200180831161065257829003601f168201915b5050505050905090565b600061068d610686611337565b848461133f565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b7f000000000000000000000000000000000000000000000000000000000000000081565b6000600254905090565b6106ed611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077390612260565b60405180910390fd5b670de0b6b3a76400006103e860016107926106db565b61079c91906122af565b6107a69190612338565b6107b09190612338565b8110156107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e9906123db565b60405180910390fd5b670de0b6b3a76400008161080691906122af565b60068190555050565b600061081c84848461150a565b6108dd84610828611337565b6108d885604051806060016040528060288152602001612aa660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061088e611337565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ec9092919063ffffffff16565b61133f565b600190509392505050565b60006012905090565b600061099a6108fe611337565b84610995856001600061090f611337565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112d990919063ffffffff16565b61133f565b6001905092915050565b7f000000000000000000000000000000000000000000000000000000000000000081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a18611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90612260565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b70611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690612260565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c93906121e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbf906121e2565b8015610d0c5780601f10610ce157610100808354040283529160200191610d0c565b820191906000526020600020905b815481529060010190602001808311610cef57829003601f168201915b5050505050905090565b610d1e611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490612260565b60405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e339061246d565b60405180910390fd5b610e468282611a50565b5050565b6000610f0d610e57611337565b84610f0885604051806060016040528060258152602001612ace6025913960016000610e81611337565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ec9092919063ffffffff16565b61133f565b6001905092915050565b6000610f2b610f24611337565b848461150a565b6001905092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b610f5d611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612260565b60405180910390fd5b670de0b6b3a76400006103e860056110026106db565b61100c91906122af565b6110169190612338565b6110209190612338565b811015611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906124ff565b60405180910390fd5b670de0b6b3a76400008161107691906122af565b60078190555050565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611114611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90612260565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a90612591565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b60008082846112e891906125b1565b90508381101561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490612653565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a6906126e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690612777565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114fd919061200b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190612809565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19061289b565b60405180910390fd5b6000811415611604576115ff83836000611af1565b6119e7565b61160c610c5a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561167a575061164a610c5a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116b35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116ed575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156119db57600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156117955750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561183c576006548111156117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d69061292d565b60405180910390fd5b6007546117eb836109c8565b826117f691906125b1565b1115611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90612999565b60405180910390fd5b6119da565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156118df5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561192e57600654811115611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090612a2b565b60405180910390fd5b6119d9565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119d85760075461198b836109c8565b8261199691906125b1565b11156119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90612999565b60405180910390fd5b5b5b5b5b6119e6838383611af1565b5b505050565b6000838311158290611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b9190611e24565b60405180910390fd5b5060008385611a439190612a4b565b9050809150509392505050565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890612809565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc89061289b565b60405180910390fd5b611bdc838383611d86565b611c4781604051806060016040528060268152602001612a80602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ec9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cda816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112d990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d79919061200b565b60405180910390a3505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611dc5578082015181840152602081019050611daa565b83811115611dd4576000848401525b50505050565b6000601f19601f8301169050919050565b6000611df682611d8b565b611e008185611d96565b9350611e10818560208601611da7565b611e1981611dda565b840191505092915050565b60006020820190508181036000830152611e3e8184611deb565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e7682611e4b565b9050919050565b611e8681611e6b565b8114611e9157600080fd5b50565b600081359050611ea381611e7d565b92915050565b6000819050919050565b611ebc81611ea9565b8114611ec757600080fd5b50565b600081359050611ed981611eb3565b92915050565b60008060408385031215611ef657611ef5611e46565b5b6000611f0485828601611e94565b9250506020611f1585828601611eca565b9150509250929050565b60008115159050919050565b611f3481611f1f565b82525050565b6000602082019050611f4f6000830184611f2b565b92915050565b600060208284031215611f6b57611f6a611e46565b5b6000611f7984828501611e94565b91505092915050565b6000819050919050565b6000611fa7611fa2611f9d84611e4b565b611f82565b611e4b565b9050919050565b6000611fb982611f8c565b9050919050565b6000611fcb82611fae565b9050919050565b611fdb81611fc0565b82525050565b6000602082019050611ff66000830184611fd2565b92915050565b61200581611ea9565b82525050565b60006020820190506120206000830184611ffc565b92915050565b60006020828403121561203c5761203b611e46565b5b600061204a84828501611eca565b91505092915050565b60008060006060848603121561206c5761206b611e46565b5b600061207a86828701611e94565b935050602061208b86828701611e94565b925050604061209c86828701611eca565b9150509250925092565b600060ff82169050919050565b6120bc816120a6565b82525050565b60006020820190506120d760008301846120b3565b92915050565b6120e681611e6b565b82525050565b600060208201905061210160008301846120dd565b92915050565b61211081611f1f565b811461211b57600080fd5b50565b60008135905061212d81612107565b92915050565b6000806040838503121561214a57612149611e46565b5b600061215885828601611e94565b92505060206121698582860161211e565b9150509250929050565b6000806040838503121561218a57612189611e46565b5b600061219885828601611e94565b92505060206121a985828601611e94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121fa57607f821691505b6020821081141561220e5761220d6121b3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061224a602083611d96565b915061225582612214565b602082019050919050565b600060208201905081810360008301526122798161223d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122ba82611ea9565b91506122c583611ea9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156122fe576122fd612280565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061234382611ea9565b915061234e83611ea9565b92508261235e5761235d612309565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006123c5602f83611d96565b91506123d082612369565b604082019050919050565b600060208201905081810360008301526123f4816123b8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612457603983611d96565b9150612462826123fb565b604082019050919050565b600060208201905081810360008301526124868161244a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006124e9602483611d96565b91506124f48261248d565b604082019050919050565b60006020820190508181036000830152612518816124dc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061257b602683611d96565b91506125868261251f565b604082019050919050565b600060208201905081810360008301526125aa8161256e565b9050919050565b60006125bc82611ea9565b91506125c783611ea9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125fc576125fb612280565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061263d601b83611d96565b915061264882612607565b602082019050919050565b6000602082019050818103600083015261266c81612630565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006126cf602483611d96565b91506126da82612673565b604082019050919050565b600060208201905081810360008301526126fe816126c2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612761602283611d96565b915061276c82612705565b604082019050919050565b6000602082019050818103600083015261279081612754565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127f3602583611d96565b91506127fe82612797565b604082019050919050565b60006020820190508181036000830152612822816127e6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612885602383611d96565b915061289082612829565b604082019050919050565b600060208201905081810360008301526128b481612878565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000612917603583611d96565b9150612922826128bb565b604082019050919050565b600060208201905081810360008301526129468161290a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000612983601383611d96565b915061298e8261294d565b602082019050919050565b600060208201905081810360008301526129b281612976565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000612a15603683611d96565b9150612a20826129b9565b604082019050919050565b60006020820190508181036000830152612a4481612a08565b9050919050565b6000612a5682611ea9565b9150612a6183611ea9565b925082821015612a7457612a73612280565b5b82820390509291505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220288ae6ab8ccfc1890ff885c0f48958bb6f814cbcc4ae335f9bc801c5ba359cf864736f6c63430008090033

Deployed Bytecode

0x60806040526004361061014f5760003560e01c80637571336a116100b6578063b62496f51161006f578063b62496f5146104c5578063c18bc19514610502578063c8c8ebe41461052b578063dd62ed3e14610556578063f2fde38b14610593578063f8b45b05146105bc57610156565b80637571336a146103a35780638da5cb5b146103cc57806395d89b41146103f75780639a7a23d614610422578063a457c2d71461044b578063a9059cbb1461048857610156565b806323b872dd1161010857806323b872dd1461027f578063313ce567146102bc57806339509351146102e757806349bd5a5e1461032457806370a082311461034f578063715018a61461038c57610156565b806306fdde031461015b578063095ea7b31461018657806310d5de53146101c35780631694505e1461020057806318160ddd1461022b578063203e727e1461025657610156565b3661015657005b600080fd5b34801561016757600080fd5b506101706105e7565b60405161017d9190611e24565b60405180910390f35b34801561019257600080fd5b506101ad60048036038101906101a89190611edf565b610679565b6040516101ba9190611f3a565b60405180910390f35b3480156101cf57600080fd5b506101ea60048036038101906101e59190611f55565b610697565b6040516101f79190611f3a565b60405180910390f35b34801561020c57600080fd5b506102156106b7565b6040516102229190611fe1565b60405180910390f35b34801561023757600080fd5b506102406106db565b60405161024d919061200b565b60405180910390f35b34801561026257600080fd5b5061027d60048036038101906102789190612026565b6106e5565b005b34801561028b57600080fd5b506102a660048036038101906102a19190612053565b61080f565b6040516102b39190611f3a565b60405180910390f35b3480156102c857600080fd5b506102d16108e8565b6040516102de91906120c2565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190611edf565b6108f1565b60405161031b9190611f3a565b60405180910390f35b34801561033057600080fd5b506103396109a4565b60405161034691906120ec565b60405180910390f35b34801561035b57600080fd5b5061037660048036038101906103719190611f55565b6109c8565b604051610383919061200b565b60405180910390f35b34801561039857600080fd5b506103a1610a10565b005b3480156103af57600080fd5b506103ca60048036038101906103c59190612133565b610b68565b005b3480156103d857600080fd5b506103e1610c5a565b6040516103ee91906120ec565b60405180910390f35b34801561040357600080fd5b5061040c610c84565b6040516104199190611e24565b60405180910390f35b34801561042e57600080fd5b5061044960048036038101906104449190612133565b610d16565b005b34801561045757600080fd5b50610472600480360381019061046d9190611edf565b610e4a565b60405161047f9190611f3a565b60405180910390f35b34801561049457600080fd5b506104af60048036038101906104aa9190611edf565b610f17565b6040516104bc9190611f3a565b60405180910390f35b3480156104d157600080fd5b506104ec60048036038101906104e79190611f55565b610f35565b6040516104f99190611f3a565b60405180910390f35b34801561050e57600080fd5b5061052960048036038101906105249190612026565b610f55565b005b34801561053757600080fd5b5061054061107f565b60405161054d919061200b565b60405180910390f35b34801561056257600080fd5b5061057d60048036038101906105789190612173565b611085565b60405161058a919061200b565b60405180910390f35b34801561059f57600080fd5b506105ba60048036038101906105b59190611f55565b61110c565b005b3480156105c857600080fd5b506105d16112d3565b6040516105de919061200b565b60405180910390f35b6060600380546105f6906121e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610622906121e2565b801561066f5780601f106106445761010080835404028352916020019161066f565b820191906000526020600020905b81548152906001019060200180831161065257829003601f168201915b5050505050905090565b600061068d610686611337565b848461133f565b6001905092915050565b60086020528060005260406000206000915054906101000a900460ff1681565b7f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6000600254905090565b6106ed611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461077c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077390612260565b60405180910390fd5b670de0b6b3a76400006103e860016107926106db565b61079c91906122af565b6107a69190612338565b6107b09190612338565b8110156107f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107e9906123db565b60405180910390fd5b670de0b6b3a76400008161080691906122af565b60068190555050565b600061081c84848461150a565b6108dd84610828611337565b6108d885604051806060016040528060288152602001612aa660289139600160008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600061088e611337565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ec9092919063ffffffff16565b61133f565b600190509392505050565b60006012905090565b600061099a6108fe611337565b84610995856001600061090f611337565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112d990919063ffffffff16565b61133f565b6001905092915050565b7f000000000000000000000000e3ea49ec6282cace70d3a48ce9158804770ba2f081565b60008060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610a18611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610aa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a9e90612260565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b610b70611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610bff576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf690612260565b60405180910390fd5b80600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b6000600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054610c93906121e2565b80601f0160208091040260200160405190810160405280929190818152602001828054610cbf906121e2565b8015610d0c5780601f10610ce157610100808354040283529160200191610d0c565b820191906000526020600020905b815481529060010190602001808311610cef57829003601f168201915b5050505050905090565b610d1e611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610dad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da490612260565b60405180910390fd5b7f000000000000000000000000e3ea49ec6282cace70d3a48ce9158804770ba2f073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610e3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e339061246d565b60405180910390fd5b610e468282611a50565b5050565b6000610f0d610e57611337565b84610f0885604051806060016040528060258152602001612ace6025913960016000610e81611337565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ec9092919063ffffffff16565b61133f565b6001905092915050565b6000610f2b610f24611337565b848461150a565b6001905092915050565b60096020528060005260406000206000915054906101000a900460ff1681565b610f5d611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614610fec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe390612260565b60405180910390fd5b670de0b6b3a76400006103e860056110026106db565b61100c91906122af565b6110169190612338565b6110209190612338565b811015611062576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611059906124ff565b60405180910390fd5b670de0b6b3a76400008161107691906122af565b60078190555050565b60065481565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b611114611337565b73ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119a90612260565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611213576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120a90612591565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600560006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b60075481565b60008082846112e891906125b1565b90508381101561132d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132490612653565b60405180910390fd5b8091505092915050565b600033905090565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156113af576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a6906126e5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561141f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141690612777565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b925836040516114fd919061200b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561157a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157190612809565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156115ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e19061289b565b60405180910390fd5b6000811415611604576115ff83836000611af1565b6119e7565b61160c610c5a565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415801561167a575061164a610c5a565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116b35750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b80156116ed575061dead73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b156119db57600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156117955750600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561183c576006548111156117df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d69061292d565b60405180910390fd5b6007546117eb836109c8565b826117f691906125b1565b1115611837576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182e90612999565b60405180910390fd5b6119da565b600960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1680156118df5750600860008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16155b1561192e57600654811115611929576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192090612a2b565b60405180910390fd5b6119d9565b600860008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166119d85760075461198b836109c8565b8261199691906125b1565b11156119d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ce90612999565b60405180910390fd5b5b5b5b5b6119e6838383611af1565b5b505050565b6000838311158290611a34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a2b9190611e24565b60405180910390fd5b5060008385611a439190612a4b565b9050809150509392505050565b80600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508015158273ffffffffffffffffffffffffffffffffffffffff167fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab60405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611b61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b5890612809565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611bd1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc89061289b565b60405180910390fd5b611bdc838383611d86565b611c4781604051806060016040528060268152602001612a80602691396000808773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546119ec9092919063ffffffff16565b6000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550611cda816000808573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112d990919063ffffffff16565b6000808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef83604051611d79919061200b565b60405180910390a3505050565b505050565b600081519050919050565b600082825260208201905092915050565b60005b83811015611dc5578082015181840152602081019050611daa565b83811115611dd4576000848401525b50505050565b6000601f19601f8301169050919050565b6000611df682611d8b565b611e008185611d96565b9350611e10818560208601611da7565b611e1981611dda565b840191505092915050565b60006020820190508181036000830152611e3e8184611deb565b905092915050565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e7682611e4b565b9050919050565b611e8681611e6b565b8114611e9157600080fd5b50565b600081359050611ea381611e7d565b92915050565b6000819050919050565b611ebc81611ea9565b8114611ec757600080fd5b50565b600081359050611ed981611eb3565b92915050565b60008060408385031215611ef657611ef5611e46565b5b6000611f0485828601611e94565b9250506020611f1585828601611eca565b9150509250929050565b60008115159050919050565b611f3481611f1f565b82525050565b6000602082019050611f4f6000830184611f2b565b92915050565b600060208284031215611f6b57611f6a611e46565b5b6000611f7984828501611e94565b91505092915050565b6000819050919050565b6000611fa7611fa2611f9d84611e4b565b611f82565b611e4b565b9050919050565b6000611fb982611f8c565b9050919050565b6000611fcb82611fae565b9050919050565b611fdb81611fc0565b82525050565b6000602082019050611ff66000830184611fd2565b92915050565b61200581611ea9565b82525050565b60006020820190506120206000830184611ffc565b92915050565b60006020828403121561203c5761203b611e46565b5b600061204a84828501611eca565b91505092915050565b60008060006060848603121561206c5761206b611e46565b5b600061207a86828701611e94565b935050602061208b86828701611e94565b925050604061209c86828701611eca565b9150509250925092565b600060ff82169050919050565b6120bc816120a6565b82525050565b60006020820190506120d760008301846120b3565b92915050565b6120e681611e6b565b82525050565b600060208201905061210160008301846120dd565b92915050565b61211081611f1f565b811461211b57600080fd5b50565b60008135905061212d81612107565b92915050565b6000806040838503121561214a57612149611e46565b5b600061215885828601611e94565b92505060206121698582860161211e565b9150509250929050565b6000806040838503121561218a57612189611e46565b5b600061219885828601611e94565b92505060206121a985828601611e94565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806121fa57607f821691505b6020821081141561220e5761220d6121b3565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061224a602083611d96565b915061225582612214565b602082019050919050565b600060208201905081810360008301526122798161223d565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b60006122ba82611ea9565b91506122c583611ea9565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156122fe576122fd612280565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b600061234382611ea9565b915061234e83611ea9565b92508261235e5761235d612309565b5b828204905092915050565b7f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060008201527f6c6f776572207468616e20302e31250000000000000000000000000000000000602082015250565b60006123c5602f83611d96565b91506123d082612369565b604082019050919050565b600060208201905081810360008301526123f4816123b8565b9050919050565b7f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060008201527f6175746f6d617465644d61726b65744d616b6572506169727300000000000000602082015250565b6000612457603983611d96565b9150612462826123fb565b604082019050919050565b600060208201905081810360008301526124868161244a565b9050919050565b7f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e2060008201527f302e352500000000000000000000000000000000000000000000000000000000602082015250565b60006124e9602483611d96565b91506124f48261248d565b604082019050919050565b60006020820190508181036000830152612518816124dc565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061257b602683611d96565b91506125868261251f565b604082019050919050565b600060208201905081810360008301526125aa8161256e565b9050919050565b60006125bc82611ea9565b91506125c783611ea9565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156125fc576125fb612280565b5b828201905092915050565b7f536166654d6174683a206164646974696f6e206f766572666c6f770000000000600082015250565b600061263d601b83611d96565b915061264882612607565b602082019050919050565b6000602082019050818103600083015261266c81612630565b9050919050565b7f45524332303a20617070726f76652066726f6d20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b60006126cf602483611d96565b91506126da82612673565b604082019050919050565b600060208201905081810360008301526126fe816126c2565b9050919050565b7f45524332303a20617070726f766520746f20746865207a65726f20616464726560008201527f7373000000000000000000000000000000000000000000000000000000000000602082015250565b6000612761602283611d96565b915061276c82612705565b604082019050919050565b6000602082019050818103600083015261279081612754565b9050919050565b7f45524332303a207472616e736665722066726f6d20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006127f3602583611d96565b91506127fe82612797565b604082019050919050565b60006020820190508181036000830152612822816127e6565b9050919050565b7f45524332303a207472616e7366657220746f20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b6000612885602383611d96565b915061289082612829565b604082019050919050565b600060208201905081810360008301526128b481612878565b9050919050565b7f427579207472616e7366657220616d6f756e742065786365656473207468652060008201527f6d61785472616e73616374696f6e416d6f756e742e0000000000000000000000602082015250565b6000612917603583611d96565b9150612922826128bb565b604082019050919050565b600060208201905081810360008301526129468161290a565b9050919050565b7f4d61782077616c6c657420657863656564656400000000000000000000000000600082015250565b6000612983601383611d96565b915061298e8261294d565b602082019050919050565b600060208201905081810360008301526129b281612976565b9050919050565b7f53656c6c207472616e7366657220616d6f756e7420657863656564732074686560008201527f206d61785472616e73616374696f6e416d6f756e742e00000000000000000000602082015250565b6000612a15603683611d96565b9150612a20826129b9565b604082019050919050565b60006020820190508181036000830152612a4481612a08565b9050919050565b6000612a5682611ea9565b9150612a6183611ea9565b925082821015612a7457612a73612280565b5b82820390509291505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa2646970667358221220288ae6ab8ccfc1890ff885c0f48958bb6f814cbcc4ae335f9bc801c5ba359cf864736f6c63430008090033

Deployed Bytecode Sourcemap

29401:4249:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7499:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9673:169;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29735:64;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29477:51;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8622:108;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31379:234;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10325:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8463:93;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11090:218;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29535:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8794:127;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22001:148;;;;;;;;;;;;;:::i;:::-;;31846:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;21357:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7719:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32000:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11812:269;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9135:175;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29958:58;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31622:215;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29583:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;9374:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22305:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29625:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7499:100;7553:13;7586:5;7579:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7499:100;:::o;9673:169::-;9756:4;9773:39;9782:12;:10;:12::i;:::-;9796:7;9805:6;9773:8;:39::i;:::-;9830:4;9823:11;;9673:169;;;;:::o;29735:64::-;;;;;;;;;;;;;;;;;;;;;;:::o;29477:51::-;;;:::o;8622:108::-;8683:7;8710:12;;8703:19;;8622:108;:::o;31379:234::-;21580:12;:10;:12::i;:::-;21570:22;;:6;;;;;;;;;;;:22;;;21562:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31498:4:::1;31492;31488:1;31472:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;31471:31;;;;:::i;:::-;31461:6;:41;;31453:101;;;;;;;;;;;;:::i;:::-;;;;;;;;;31598:6;31588;:17;;;;:::i;:::-;31565:20;:40;;;;31379:234:::0;:::o;10325:355::-;10465:4;10482:36;10492:6;10500:9;10511:6;10482:9;:36::i;:::-;10529:121;10538:6;10546:12;:10;:12::i;:::-;10560:89;10598:6;10560:89;;;;;;;;;;;;;;;;;:11;:19;10572:6;10560:19;;;;;;;;;;;;;;;:33;10580:12;:10;:12::i;:::-;10560:33;;;;;;;;;;;;;;;;:37;;:89;;;;;:::i;:::-;10529:8;:121::i;:::-;10668:4;10661:11;;10325:355;;;;;:::o;8463:93::-;8521:5;8546:2;8539:9;;8463:93;:::o;11090:218::-;11178:4;11195:83;11204:12;:10;:12::i;:::-;11218:7;11227:50;11266:10;11227:11;:25;11239:12;:10;:12::i;:::-;11227:25;;;;;;;;;;;;;;;:34;11253:7;11227:34;;;;;;;;;;;;;;;;:38;;:50;;;;:::i;:::-;11195:8;:83::i;:::-;11296:4;11289:11;;11090:218;;;;:::o;29535:38::-;;;:::o;8794:127::-;8868:7;8895:9;:18;8905:7;8895:18;;;;;;;;;;;;;;;;8888:25;;8794:127;;;:::o;22001:148::-;21580:12;:10;:12::i;:::-;21570:22;;:6;;;;;;;;;;;:22;;;21562:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22108:1:::1;22071:40;;22092:6;;;;;;;;;;;22071:40;;;;;;;;;;;;22139:1;22122:6;;:19;;;;;;;;;;;;;;;;;;22001:148::o:0;31846:144::-;21580:12;:10;:12::i;:::-;21570:22;;:6;;;;;;;;;;;:22;;;21562:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31978:4:::1;31936:31;:39;31968:6;31936:39;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;31846:144:::0;;:::o;21357:79::-;21395:7;21422:6;;;;;;;;;;;21415:13;;21357:79;:::o;7719:104::-;7775:13;7808:7;7801:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7719:104;:::o;32000:245::-;21580:12;:10;:12::i;:::-;21570:22;;:6;;;;;;;;;;;:22;;;21562:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32107:13:::1;32099:21;;:4;:21;;;;32091:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;32196:41;32225:4;32231:5;32196:28;:41::i;:::-;32000:245:::0;;:::o;11812:269::-;11905:4;11922:129;11931:12;:10;:12::i;:::-;11945:7;11954:96;11993:15;11954:96;;;;;;;;;;;;;;;;;:11;:25;11966:12;:10;:12::i;:::-;11954:25;;;;;;;;;;;;;;;:34;11980:7;11954:34;;;;;;;;;;;;;;;;:38;;:96;;;;;:::i;:::-;11922:8;:129::i;:::-;12069:4;12062:11;;11812:269;;;;:::o;9135:175::-;9221:4;9238:42;9248:12;:10;:12::i;:::-;9262:9;9273:6;9238:9;:42::i;:::-;9298:4;9291:11;;9135:175;;;;:::o;29958:58::-;;;;;;;;;;;;;;;;;;;;;;:::o;31622:215::-;21580:12;:10;:12::i;:::-;21570:22;;:6;;;;;;;;;;;:22;;;21562:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;31744:4:::1;31738;31734:1;31718:13;:11;:13::i;:::-;:17;;;;:::i;:::-;:24;;;;:::i;:::-;31717:31;;;;:::i;:::-;31707:6;:41;;31699:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;31822:6;31812;:17;;;;:::i;:::-;31800:9;:29;;;;31622:215:::0;:::o;29583:35::-;;;;:::o;9374:151::-;9463:7;9490:11;:18;9502:5;9490:18;;;;;;;;;;;;;;;:27;9509:7;9490:27;;;;;;;;;;;;;;;;9483:34;;9374:151;;;;:::o;22305:244::-;21580:12;:10;:12::i;:::-;21570:22;;:6;;;;;;;;;;;:22;;;21562:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;22414:1:::1;22394:22;;:8;:22;;;;22386:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22504:8;22475:38;;22496:6;;;;;;;;;;;22475:38;;;;;;;;;;;;22533:8;22524:6;;:17;;;;;;;;;;;;;;;;;;22305:244:::0;:::o;29625:24::-;;;;:::o;16389:182::-;16447:7;16467:9;16483:1;16479;:5;;;;:::i;:::-;16467:17;;16508:1;16503;:6;;16495:46;;;;;;;;;;;;:::i;:::-;;;;;;;;;16562:1;16555:8;;;16389:182;;;;:::o;101:98::-;154:7;181:10;174:17;;101:98;:::o;15008:381::-;15161:1;15144:19;;:5;:19;;;;15136:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15242:1;15223:21;;:7;:21;;;;15215:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;15327:6;15297:11;:18;15309:5;15297:18;;;;;;;;;;;;;;;:27;15316:7;15297:27;;;;;;;;;;;;;;;:36;;;;15365:7;15349:32;;15358:5;15349:32;;;15374:6;15349:32;;;;;;:::i;:::-;;;;;;;;15008:381;;;:::o;32452:1195::-;32600:1;32584:18;;:4;:18;;;;32576:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;32677:1;32663:16;;:2;:16;;;;32655:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;32744:1;32734:6;:11;32731:92;;;32762:28;32778:4;32784:2;32788:1;32762:15;:28::i;:::-;32805:7;;32731:92;32856:7;:5;:7::i;:::-;32848:15;;:4;:15;;;;:36;;;;;32877:7;:5;:7::i;:::-;32871:13;;:2;:13;;;;32848:36;:60;;;;;32906:1;32892:16;;:2;:16;;;;32848:60;:89;;;;;32930:6;32916:21;;:2;:21;;;;32848:89;32839:744;;;32971:25;:31;32997:4;32971:31;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;33007:31;:35;33039:2;33007:35;;;;;;;;;;;;;;;;;;;;;;;;;33006:36;32971:71;32967:611;;;33070:20;;33060:6;:30;;33052:96;;;;;;;;;;;;:::i;:::-;;;;;;;;;33190:9;;33173:13;33183:2;33173:9;:13::i;:::-;33164:6;:22;;;;:::i;:::-;:35;;33156:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;32967:611;;;33262:25;:29;33288:2;33262:29;;;;;;;;;;;;;;;;;;;;;;;;;:71;;;;;33296:31;:37;33328:4;33296:37;;;;;;;;;;;;;;;;;;;;;;;;;33295:38;33262:71;33258:320;;;33361:20;;33351:6;:30;;33343:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;33258:320;;;33461:31;:35;33493:2;33461:35;;;;;;;;;;;;;;;;;;;;;;;;;33457:121;;33538:9;;33521:13;33531:2;33521:9;:13::i;:::-;33512:6;:22;;;;:::i;:::-;:35;;33504:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;33457:121;33258:320;32967:611;32839:744;33606:33;33622:4;33628:2;33632:6;33606:15;:33::i;:::-;32452:1195;;;;:::o;17295:193::-;17381:7;17414:1;17409;:6;;17417:12;17401:29;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;17441:9;17457:1;17453;:5;;;;:::i;:::-;17441:17;;17479:1;17472:8;;;17295:193;;;;;:::o;32254:189::-;32371:5;32337:25;:31;32363:4;32337:31;;;;;;;;;;;;;;;;:39;;;;;;;;;;;;;;;;;;32429:5;32395:40;;32423:4;32395:40;;;;;;;;;;;;32254:189;;:::o;12572:575::-;12730:1;12712:20;;:6;:20;;;;12704:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;12814:1;12793:23;;:9;:23;;;;12785:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;12870:47;12891:6;12899:9;12910:6;12870:20;:47::i;:::-;12951:71;12973:6;12951:71;;;;;;;;;;;;;;;;;:9;:17;12961:6;12951:17;;;;;;;;;;;;;;;;:21;;:71;;;;;:::i;:::-;12931:9;:17;12941:6;12931:17;;;;;;;;;;;;;;;:91;;;;13056:32;13081:6;13056:9;:20;13066:9;13056:20;;;;;;;;;;;;;;;;:24;;:32;;;;:::i;:::-;13033:9;:20;13043:9;13033:20;;;;;;;;;;;;;;;:55;;;;13121:9;13104:35;;13113:6;13104:35;;;13132:6;13104:35;;;;;;:::i;:::-;;;;;;;;12572:575;;;:::o;15993:125::-;;;;:::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:122::-;2031:24;2049:5;2031:24;:::i;:::-;2024:5;2021:35;2011:63;;2070:1;2067;2060:12;2011:63;1958:122;:::o;2086:139::-;2132:5;2170:6;2157:20;2148:29;;2186:33;2213:5;2186:33;:::i;:::-;2086:139;;;;:::o;2231:77::-;2268:7;2297:5;2286:16;;2231:77;;;:::o;2314:122::-;2387:24;2405:5;2387:24;:::i;:::-;2380:5;2377:35;2367:63;;2426:1;2423;2416:12;2367:63;2314:122;:::o;2442:139::-;2488:5;2526:6;2513:20;2504:29;;2542:33;2569:5;2542:33;:::i;:::-;2442:139;;;;:::o;2587:474::-;2655:6;2663;2712:2;2700:9;2691:7;2687:23;2683:32;2680:119;;;2718:79;;:::i;:::-;2680:119;2838:1;2863:53;2908:7;2899:6;2888:9;2884:22;2863:53;:::i;:::-;2853:63;;2809:117;2965:2;2991:53;3036:7;3027:6;3016:9;3012:22;2991:53;:::i;:::-;2981:63;;2936:118;2587:474;;;;;:::o;3067:90::-;3101:7;3144:5;3137:13;3130:21;3119:32;;3067:90;;;:::o;3163:109::-;3244:21;3259:5;3244:21;:::i;:::-;3239:3;3232:34;3163:109;;:::o;3278:210::-;3365:4;3403:2;3392:9;3388:18;3380:26;;3416:65;3478:1;3467:9;3463:17;3454:6;3416:65;:::i;:::-;3278:210;;;;:::o;3494:329::-;3553:6;3602:2;3590:9;3581:7;3577:23;3573:32;3570:119;;;3608:79;;:::i;:::-;3570:119;3728:1;3753:53;3798:7;3789:6;3778:9;3774:22;3753:53;:::i;:::-;3743:63;;3699:117;3494:329;;;;:::o;3829:60::-;3857:3;3878:5;3871:12;;3829:60;;;:::o;3895:142::-;3945:9;3978:53;3996:34;4005:24;4023:5;4005:24;:::i;:::-;3996:34;:::i;:::-;3978:53;:::i;:::-;3965:66;;3895:142;;;:::o;4043:126::-;4093:9;4126:37;4157:5;4126:37;:::i;:::-;4113:50;;4043:126;;;:::o;4175:153::-;4252:9;4285:37;4316:5;4285:37;:::i;:::-;4272:50;;4175:153;;;:::o;4334:185::-;4448:64;4506:5;4448:64;:::i;:::-;4443:3;4436:77;4334:185;;:::o;4525:276::-;4645:4;4683:2;4672:9;4668:18;4660:26;;4696:98;4791:1;4780:9;4776:17;4767:6;4696:98;:::i;:::-;4525:276;;;;:::o;4807:118::-;4894:24;4912:5;4894:24;:::i;:::-;4889:3;4882:37;4807:118;;:::o;4931:222::-;5024:4;5062:2;5051:9;5047:18;5039:26;;5075:71;5143:1;5132:9;5128:17;5119:6;5075:71;:::i;:::-;4931:222;;;;:::o;5159:329::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:119;;;5273:79;;:::i;:::-;5235:119;5393:1;5418:53;5463:7;5454:6;5443:9;5439:22;5418:53;:::i;:::-;5408:63;;5364:117;5159:329;;;;:::o;5494:619::-;5571:6;5579;5587;5636:2;5624:9;5615:7;5611:23;5607:32;5604:119;;;5642:79;;:::i;:::-;5604:119;5762:1;5787:53;5832:7;5823:6;5812:9;5808:22;5787:53;:::i;:::-;5777:63;;5733:117;5889:2;5915:53;5960:7;5951:6;5940:9;5936:22;5915:53;:::i;:::-;5905:63;;5860:118;6017:2;6043:53;6088:7;6079:6;6068:9;6064:22;6043:53;:::i;:::-;6033:63;;5988:118;5494:619;;;;;:::o;6119:86::-;6154:7;6194:4;6187:5;6183:16;6172:27;;6119:86;;;:::o;6211:112::-;6294:22;6310:5;6294:22;:::i;:::-;6289:3;6282:35;6211:112;;:::o;6329:214::-;6418:4;6456:2;6445:9;6441:18;6433:26;;6469:67;6533:1;6522:9;6518:17;6509:6;6469:67;:::i;:::-;6329:214;;;;:::o;6549:118::-;6636:24;6654:5;6636:24;:::i;:::-;6631:3;6624:37;6549:118;;:::o;6673:222::-;6766:4;6804:2;6793:9;6789:18;6781:26;;6817:71;6885:1;6874:9;6870:17;6861:6;6817:71;:::i;:::-;6673:222;;;;:::o;6901:116::-;6971:21;6986:5;6971:21;:::i;:::-;6964:5;6961:32;6951:60;;7007:1;7004;6997:12;6951:60;6901:116;:::o;7023:133::-;7066:5;7104:6;7091:20;7082:29;;7120:30;7144:5;7120:30;:::i;:::-;7023:133;;;;:::o;7162:468::-;7227:6;7235;7284:2;7272:9;7263:7;7259:23;7255:32;7252:119;;;7290:79;;:::i;:::-;7252:119;7410:1;7435:53;7480:7;7471:6;7460:9;7456:22;7435:53;:::i;:::-;7425:63;;7381:117;7537:2;7563:50;7605:7;7596:6;7585:9;7581:22;7563:50;:::i;:::-;7553:60;;7508:115;7162:468;;;;;:::o;7636:474::-;7704:6;7712;7761:2;7749:9;7740:7;7736:23;7732:32;7729:119;;;7767:79;;:::i;:::-;7729:119;7887:1;7912:53;7957:7;7948:6;7937:9;7933:22;7912:53;:::i;:::-;7902:63;;7858:117;8014:2;8040:53;8085:7;8076:6;8065:9;8061:22;8040:53;:::i;:::-;8030:63;;7985:118;7636:474;;;;;:::o;8116:180::-;8164:77;8161:1;8154:88;8261:4;8258:1;8251:15;8285:4;8282:1;8275:15;8302:320;8346:6;8383:1;8377:4;8373:12;8363:22;;8430:1;8424:4;8420:12;8451:18;8441:81;;8507:4;8499:6;8495:17;8485:27;;8441:81;8569:2;8561:6;8558:14;8538:18;8535:38;8532:84;;;8588:18;;:::i;:::-;8532:84;8353:269;8302:320;;;:::o;8628:182::-;8768:34;8764:1;8756:6;8752:14;8745:58;8628:182;:::o;8816:366::-;8958:3;8979:67;9043:2;9038:3;8979:67;:::i;:::-;8972:74;;9055:93;9144:3;9055:93;:::i;:::-;9173:2;9168:3;9164:12;9157:19;;8816:366;;;:::o;9188:419::-;9354:4;9392:2;9381:9;9377:18;9369:26;;9441:9;9435:4;9431:20;9427:1;9416:9;9412:17;9405:47;9469:131;9595:4;9469:131;:::i;:::-;9461:139;;9188:419;;;:::o;9613:180::-;9661:77;9658:1;9651:88;9758:4;9755:1;9748:15;9782:4;9779:1;9772:15;9799:348;9839:7;9862:20;9880:1;9862:20;:::i;:::-;9857:25;;9896:20;9914:1;9896:20;:::i;:::-;9891:25;;10084:1;10016:66;10012:74;10009:1;10006:81;10001:1;9994:9;9987:17;9983:105;9980:131;;;10091:18;;:::i;:::-;9980:131;10139:1;10136;10132:9;10121:20;;9799:348;;;;:::o;10153:180::-;10201:77;10198:1;10191:88;10298:4;10295:1;10288:15;10322:4;10319:1;10312:15;10339:185;10379:1;10396:20;10414:1;10396:20;:::i;:::-;10391:25;;10430:20;10448:1;10430:20;:::i;:::-;10425:25;;10469:1;10459:35;;10474:18;;:::i;:::-;10459:35;10516:1;10513;10509:9;10504:14;;10339:185;;;;:::o;10530:234::-;10670:34;10666:1;10658:6;10654:14;10647:58;10739:17;10734:2;10726:6;10722:15;10715:42;10530:234;:::o;10770:366::-;10912:3;10933:67;10997:2;10992:3;10933:67;:::i;:::-;10926:74;;11009:93;11098:3;11009:93;:::i;:::-;11127:2;11122:3;11118:12;11111:19;;10770:366;;;:::o;11142:419::-;11308:4;11346:2;11335:9;11331:18;11323:26;;11395:9;11389:4;11385:20;11381:1;11370:9;11366:17;11359:47;11423:131;11549:4;11423:131;:::i;:::-;11415:139;;11142:419;;;:::o;11567:244::-;11707:34;11703:1;11695:6;11691:14;11684:58;11776:27;11771:2;11763:6;11759:15;11752:52;11567:244;:::o;11817:366::-;11959:3;11980:67;12044:2;12039:3;11980:67;:::i;:::-;11973:74;;12056:93;12145:3;12056:93;:::i;:::-;12174:2;12169:3;12165:12;12158:19;;11817:366;;;:::o;12189:419::-;12355:4;12393:2;12382:9;12378:18;12370:26;;12442:9;12436:4;12432:20;12428:1;12417:9;12413:17;12406:47;12470:131;12596:4;12470:131;:::i;:::-;12462:139;;12189:419;;;:::o;12614:223::-;12754:34;12750:1;12742:6;12738:14;12731:58;12823:6;12818:2;12810:6;12806:15;12799:31;12614:223;:::o;12843:366::-;12985:3;13006:67;13070:2;13065:3;13006:67;:::i;:::-;12999:74;;13082:93;13171:3;13082:93;:::i;:::-;13200:2;13195:3;13191:12;13184:19;;12843:366;;;:::o;13215:419::-;13381:4;13419:2;13408:9;13404:18;13396:26;;13468:9;13462:4;13458:20;13454:1;13443:9;13439:17;13432:47;13496:131;13622:4;13496:131;:::i;:::-;13488:139;;13215:419;;;:::o;13640:225::-;13780:34;13776:1;13768:6;13764:14;13757:58;13849:8;13844:2;13836:6;13832:15;13825:33;13640:225;:::o;13871:366::-;14013:3;14034:67;14098:2;14093:3;14034:67;:::i;:::-;14027:74;;14110:93;14199:3;14110:93;:::i;:::-;14228:2;14223:3;14219:12;14212:19;;13871:366;;;:::o;14243:419::-;14409:4;14447:2;14436:9;14432:18;14424:26;;14496:9;14490:4;14486:20;14482:1;14471:9;14467:17;14460:47;14524:131;14650:4;14524:131;:::i;:::-;14516:139;;14243:419;;;:::o;14668:305::-;14708:3;14727:20;14745:1;14727:20;:::i;:::-;14722:25;;14761:20;14779:1;14761:20;:::i;:::-;14756:25;;14915:1;14847:66;14843:74;14840:1;14837:81;14834:107;;;14921:18;;:::i;:::-;14834:107;14965:1;14962;14958:9;14951:16;;14668:305;;;;:::o;14979:177::-;15119:29;15115:1;15107:6;15103:14;15096:53;14979:177;:::o;15162:366::-;15304:3;15325:67;15389:2;15384:3;15325:67;:::i;:::-;15318:74;;15401:93;15490:3;15401:93;:::i;:::-;15519:2;15514:3;15510:12;15503:19;;15162:366;;;:::o;15534:419::-;15700:4;15738:2;15727:9;15723:18;15715:26;;15787:9;15781:4;15777:20;15773:1;15762:9;15758:17;15751:47;15815:131;15941:4;15815:131;:::i;:::-;15807:139;;15534:419;;;:::o;15959:223::-;16099:34;16095:1;16087:6;16083:14;16076:58;16168:6;16163:2;16155:6;16151:15;16144:31;15959:223;:::o;16188:366::-;16330:3;16351:67;16415:2;16410:3;16351:67;:::i;:::-;16344:74;;16427:93;16516:3;16427:93;:::i;:::-;16545:2;16540:3;16536:12;16529:19;;16188:366;;;:::o;16560:419::-;16726:4;16764:2;16753:9;16749:18;16741:26;;16813:9;16807:4;16803:20;16799:1;16788:9;16784:17;16777:47;16841:131;16967:4;16841:131;:::i;:::-;16833:139;;16560:419;;;:::o;16985:221::-;17125:34;17121:1;17113:6;17109:14;17102:58;17194:4;17189:2;17181:6;17177:15;17170:29;16985:221;:::o;17212:366::-;17354:3;17375:67;17439:2;17434:3;17375:67;:::i;:::-;17368:74;;17451:93;17540:3;17451:93;:::i;:::-;17569:2;17564:3;17560:12;17553:19;;17212:366;;;:::o;17584:419::-;17750:4;17788:2;17777:9;17773:18;17765:26;;17837:9;17831:4;17827:20;17823:1;17812:9;17808:17;17801:47;17865:131;17991:4;17865:131;:::i;:::-;17857:139;;17584:419;;;:::o;18009:224::-;18149:34;18145:1;18137:6;18133:14;18126:58;18218:7;18213:2;18205:6;18201:15;18194:32;18009:224;:::o;18239:366::-;18381:3;18402:67;18466:2;18461:3;18402:67;:::i;:::-;18395:74;;18478:93;18567:3;18478:93;:::i;:::-;18596:2;18591:3;18587:12;18580:19;;18239:366;;;:::o;18611:419::-;18777:4;18815:2;18804:9;18800:18;18792:26;;18864:9;18858:4;18854:20;18850:1;18839:9;18835:17;18828:47;18892:131;19018:4;18892:131;:::i;:::-;18884:139;;18611:419;;;:::o;19036:222::-;19176:34;19172:1;19164:6;19160:14;19153:58;19245:5;19240:2;19232:6;19228:15;19221:30;19036:222;:::o;19264:366::-;19406:3;19427:67;19491:2;19486:3;19427:67;:::i;:::-;19420:74;;19503:93;19592:3;19503:93;:::i;:::-;19621:2;19616:3;19612:12;19605:19;;19264:366;;;:::o;19636:419::-;19802:4;19840:2;19829:9;19825:18;19817:26;;19889:9;19883:4;19879:20;19875:1;19864:9;19860:17;19853:47;19917:131;20043:4;19917:131;:::i;:::-;19909:139;;19636:419;;;:::o;20061:240::-;20201:34;20197:1;20189:6;20185:14;20178:58;20270:23;20265:2;20257:6;20253:15;20246:48;20061:240;:::o;20307:366::-;20449:3;20470:67;20534:2;20529:3;20470:67;:::i;:::-;20463:74;;20546:93;20635:3;20546:93;:::i;:::-;20664:2;20659:3;20655:12;20648:19;;20307:366;;;:::o;20679:419::-;20845:4;20883:2;20872:9;20868:18;20860:26;;20932:9;20926:4;20922:20;20918:1;20907:9;20903:17;20896:47;20960:131;21086:4;20960:131;:::i;:::-;20952:139;;20679:419;;;:::o;21104:169::-;21244:21;21240:1;21232:6;21228:14;21221:45;21104:169;:::o;21279:366::-;21421:3;21442:67;21506:2;21501:3;21442:67;:::i;:::-;21435:74;;21518:93;21607:3;21518:93;:::i;:::-;21636:2;21631:3;21627:12;21620:19;;21279:366;;;:::o;21651:419::-;21817:4;21855:2;21844:9;21840:18;21832:26;;21904:9;21898:4;21894:20;21890:1;21879:9;21875:17;21868:47;21932:131;22058:4;21932:131;:::i;:::-;21924:139;;21651:419;;;:::o;22076:241::-;22216:34;22212:1;22204:6;22200:14;22193:58;22285:24;22280:2;22272:6;22268:15;22261:49;22076:241;:::o;22323:366::-;22465:3;22486:67;22550:2;22545:3;22486:67;:::i;:::-;22479:74;;22562:93;22651:3;22562:93;:::i;:::-;22680:2;22675:3;22671:12;22664:19;;22323:366;;;:::o;22695:419::-;22861:4;22899:2;22888:9;22884:18;22876:26;;22948:9;22942:4;22938:20;22934:1;22923:9;22919:17;22912:47;22976:131;23102:4;22976:131;:::i;:::-;22968:139;;22695:419;;;:::o;23120:191::-;23160:4;23180:20;23198:1;23180:20;:::i;:::-;23175:25;;23214:20;23232:1;23214:20;:::i;:::-;23209:25;;23253:1;23250;23247:8;23244:34;;;23258:18;;:::i;:::-;23244:34;23303:1;23300;23296:9;23288:17;;23120:191;;;;:::o

Swarm Source

ipfs://288ae6ab8ccfc1890ff885c0f48958bb6f814cbcc4ae335f9bc801c5ba359cf8
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.