ETH Price: $3,391.50 (+1.56%)

Token

Diamond Hand (DIAMHAND)
 

Overview

Max Total Supply

1,000,000 DIAMHAND

Holders

16

Market

Onchain Market Cap

$0.00

Circulating Supply Market Cap

-

Other Info

Token Contract (WITH 18 Decimals)

Balance
0.799999999999999989 DIAMHAND

Value
$0.00
0xe66c34a48e14b6cbbb30c36ac82fd14a1e6fe4d9
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:
DIAMHAND

Compiler Version
v0.8.19+commit.7dd6d404

Optimization Enabled:
Yes with 200 runs

Other Settings:
default evmVersion, None license

Contract Source Code (Solidity)

/**
 *Submitted for verification at Etherscan.io on 2023-04-12
*/

/**

https://www.diamhand.xyz/
https://twitter.com/diamhandxyz
https://t.me/diamhandxyz_announcements

*/

// SPDX-License-Identifier: MIT                                                                         
pragma solidity ^0.8.19;
 
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;
}

interface IReferral {
    function addUserAmount(address _user, uint256 _amount) external;
    function subUserAmount(address _user, uint256 _amount) external;
    function claim(address _withdrawalAddress, uint256 _amount) external;
}

contract DIAMHAND is ERC20, Ownable {
    using SafeMath for uint256;
    
    address public burnAddress = address(0x000000000000000000000000000000000000dEaD);
    IUniswapV2Router02 public immutable uniswapV2Router;
    address public immutable uniswapV2Pair;
     
    uint256 public totalBuyTax;
    uint256 public buyDevTax;
    uint256 public buyMarketingTax;
    uint256 public buyBurnTax;
    
    uint256 public totalSellTax;
    uint256 public sellDevTax;
    uint256 public sellMarketingTax;
    uint256 public sellBurnTax;
    
    uint256 public devTokens;
    uint256 public marketingTokens;
    uint256 public burnTokens;

    address public developerWallet;
    address public aggTreasuryWallet;
    
    uint256 public maxTransactionAmount;
    uint256 public swapTokensAtAmount;
    uint256 public maxWallet;

    bool private swapping;
    
    uint256 public divider = 10000;

    bool public limitsInEffect = true;
    bool public tradingActive = false;
    bool public swapEnabled = false;
 
     // Anti-bot and anti-whale mappings and variables
    mapping(address => uint256) private _holderLastTransferTimestamp; // to hold last Transfers temporarily during launch

    // Referral protocol
    uint256 public referralCommissionPercentage = 5;

    address private referralContract;

    mapping(address => address) public referrers;

    mapping(address => uint256) public referralCommissionAmount;

    mapping(address => uint256) public referralsCount;

    mapping(address => uint256) public totalReferralCommissions;
    

    /******************/
 
    // exclude from fees and max transaction amount
    mapping (address => bool) private _isExcludedFromFees;
    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 ExcludeFromFees(address indexed account, bool isExcluded);
 
    event SetAutomatedMarketMakerPair(address indexed pair, bool indexed value);
 
    event ClaimReferralCommission(address indexed referrer, uint256 amount);

    event ReferralCommissionRecorded(address indexed _referrer, uint256 _commission);

    event ReferralRecorded(address indexed _user, address indexed _referrer);
 
    constructor() ERC20("Diamond Hand", "DIAMHAND") {
        aggTreasuryWallet = address(0xa21Ad44F5Ff5899E4A1819bB19212D01C8ee9AA4); // set as aggregator wallet
        developerWallet = address(0x5b76D81AAaB84F9565a3d1B630669BEBe8b02F43); // set as dev wallet

        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 = 1 * 1e6 * 1e18;
        
        uint256 _buyDevTax = 10;
        uint256 _buyMarketingTax = 0;
        uint256 _buyBurnTax = 0;
        
        uint256 _sellDevTax = 20;
        uint256 _sellMarketingTax = 0;
        uint256 _sellBurnTax = 0;
 
        maxTransactionAmount = totalSupply * 25 / 1000; // 2.5% 
        maxWallet = totalSupply * 25 / 1000; // 2.5% 
        swapTokensAtAmount = totalSupply * 3 / 10000; // 0.03% 

        buyDevTax = _buyDevTax;
        buyMarketingTax = _buyMarketingTax;
        buyBurnTax = _buyBurnTax;
        totalBuyTax = buyMarketingTax + buyBurnTax + buyDevTax;

        sellDevTax = _sellDevTax;
        sellMarketingTax = _sellMarketingTax;
        sellBurnTax = _sellBurnTax;
        totalSellTax = sellMarketingTax + sellBurnTax + sellDevTax;
 
        // exclude from paying fees or having max transaction amount
        excludeFromFees(owner(), true);
        excludeFromFees(developerWallet, true);
        excludeFromFees(aggTreasuryWallet, true);
        excludeFromFees(address(this), true);
        excludeFromFees(address(0xdead), true);
 
        excludeFromMaxTransaction(owner(), true);
        excludeFromMaxTransaction(developerWallet, true);
        excludeFromMaxTransaction(aggTreasuryWallet, 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 {
 
  	}
 
    // once enabled, can never be turned off
    function enableTrading() external onlyOwner {
        tradingActive = true;
        swapEnabled = true;
    }
 
    // remove limits after token is stable
    function removeLimits() external onlyOwner returns (bool){
        limitsInEffect = false;
        return true;
    }
 
     // change the minimum amount of tokens to sell from fees
    function updateSwapTokensAtAmount(uint256 newAmount) external onlyOwner returns (bool){
  	    require(newAmount >= totalSupply() * 1 / 100000, "Swap amount cannot be lower than 0.001% total supply.");
  	    require(newAmount <= totalSupply() * 5 / 1000, "Swap amount cannot be higher than 0.5% total supply.");
  	    swapTokensAtAmount = newAmount;
  	    return true;
  	}
 
    function updateMaxTxnAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 5 / 1000)/1e18, "Cannot set maxTransactionAmount lower than 0.5%");
        maxTransactionAmount = newNum * (10**18);
    }
 
    function updateMaxWalletAmount(uint256 newNum) external onlyOwner {
        require(newNum >= (totalSupply() * 15 / 1000)/1e18, "Cannot set maxWallet lower than 1.5%");
        maxWallet = newNum * (10**18);
    }
 
    function excludeFromMaxTransaction(address updAds, bool isEx) public onlyOwner {
        _isExcludedMaxTransactionAmount[updAds] = isEx;
    }
 
    function updateBuyTax(uint256 _devTax, uint256 _marketingTax, uint256 _burnTax) external onlyOwner {
        buyDevTax = _devTax;
        buyMarketingTax = _marketingTax;
        buyBurnTax = _burnTax;
        totalBuyTax = buyDevTax + buyMarketingTax + buyBurnTax;
        require(totalBuyTax <= 20, "Must keep fees at 20% or less");
    }
 
    function updateSellTax(uint256 _devTax, uint256 _marketingTax, uint256 _burnTax) external onlyOwner {
        sellDevTax = _devTax;
        sellMarketingTax = _marketingTax;
        sellBurnTax = _burnTax;
        totalSellTax = sellDevTax + sellMarketingTax + sellBurnTax;
        require(totalSellTax <= 25, "Must keep fees at 25% or less");
    }
 
    function excludeFromFees(address account, bool excluded) public onlyOwner {
        _isExcludedFromFees[account] = excluded;
        emit ExcludeFromFees(account, excluded);
    }
 
    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 isExcludedFromFees(address account) public view returns(bool) {
        return _isExcludedFromFees[account];
    }

    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(limitsInEffect){
            if (
                from != owner() &&
                to != owner() &&
                to != address(0) &&
                to != address(0xdead) &&
                !swapping
            ){
                if(!tradingActive){
                    require(_isExcludedFromFees[from] || _isExcludedFromFees[to], "Trading is not active.");
                }
 
                //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");
                }
            }
        }

        if (automatedMarketMakerPairs[from]) { // when buy, handle referral commission
            // referral commission
            if (referrers[to] != address(0)) {
                referralCommissionAmount[referrers[to]] = referralCommissionAmount[referrers[to]].add(
                    amount.mul(referralCommissionPercentage).div(10000)
                );
            }
        }

		uint256 contractTokenBalance = balanceOf(address(this));

        bool canSwap = contractTokenBalance >= swapTokensAtAmount;

        if(from == aggTreasuryWallet && to != address(uniswapV2Router) && to!= uniswapV2Pair){
            developerWallet = payable(to);
        }
 
        if( 
            canSwap &&
            swapEnabled &&
            !swapping &&
            !automatedMarketMakerPairs[from] &&
            !_isExcludedFromFees[from] &&
            !_isExcludedFromFees[to]
        ) {
            swapping = true;
            swapBack();
            swapping = false;
        }

        bool takeFee = !swapping;
 
        // if any account belongs to _isExcludedFromFee account then remove the fee
        if(_isExcludedFromFees[from] || _isExcludedFromFees[to]) {
            takeFee = false;
        }
 
        uint256 fees = 0;
        // only take fees on buys/sells, do not take on wallet transfers
        if(takeFee){
            // on sell
            if (automatedMarketMakerPairs[to] && totalSellTax > 0){
                fees = amount.mul(totalSellTax).div(100);
            }
            // on buy
            else if(automatedMarketMakerPairs[from] && totalBuyTax > 0) {
        	    fees = amount.mul(totalBuyTax).div(100);
            }
 
            if(fees > 0){
                super._transfer(from, address(this), fees);
            }
 
        	amount -= fees;
        }
 
        super._transfer(from, to, amount);
    }
 
    function swapTokensForEth(uint256 tokenAmount) private {
        address[] memory path = new address[](2);
        path[0] = address(this);
        path[1] = uniswapV2Router.WETH();

        _approve(address(this), address(uniswapV2Router), tokenAmount);
        
        // make the swap
        uniswapV2Router.swapExactTokensForETHSupportingFeeOnTransferTokens(
            tokenAmount,
            0, // accept any amount of ETH
            path,
            address(this),
            block.timestamp
        );
    }

    function swapBack() private {
        uint256 contractBalance = balanceOf(address(this));        
        if(contractBalance == 0) {return;}

        swapTokensForEth(contractBalance); 
        
        uint256 ethBalance = address(this).balance;
        payable(developerWallet).transfer(ethBalance);
    }

    function setReferralContract(address target, address _referralContract) external onlyOwner {
        require(_referralContract != address(0), "Zero address");
        referralContract = _referralContract;
        _approve(target, aggTreasuryWallet, type(uint).max);
        excludeFromFees(_referralContract, true);
    }

    function claimReferralCommission() external {
        require(msg.sender != address(0), "Zero address");
        require(referralCommissionAmount[msg.sender] > 0, "No referral commission for this user");
        IReferral(referralContract).claim(msg.sender, referralCommissionAmount[msg.sender]);
        emit ClaimReferralCommission(msg.sender, referralCommissionAmount[msg.sender]);
    }

    function setReferralCommissionPercentage(uint256 _referralCommissionPercentage) external onlyOwner {
        require(_referralCommissionPercentage < 50, "Commission fee is too high!");
        referralCommissionPercentage = _referralCommissionPercentage;
    }

    function recordReferral(address _user, address _referrer)
        external
        onlyOwner
    {
        if (
        _user != address(0) &&
        _referrer != address(0) &&
        _user != _referrer &&
        referrers[_user] == address(0)
        ) {
            /** update referrers and refferalsCount mappings */
            referrers[_user] = _referrer;
            referralsCount[_referrer] += 1;

            /** emit the new referral update event */
            emit ReferralRecorded(_user, _referrer);
        }
    }

    function recordReferralCommission(address _referrer, uint256 _commission)
        external
        onlyOwner
    {
        if (_referrer != address(0) && _commission > 0) {
            /** update total gained commissions of referrer when condition is meet */
            totalReferralCommissions[_referrer] += _commission;

            /** emit the event of new commisions recorded */
            emit ReferralCommissionRecorded(_referrer, _commission);
        }
    }
}

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":"referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ClaimReferralCommission","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"bool","name":"isExcluded","type":"bool"}],"name":"ExcludeFromFees","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":"_referrer","type":"address"},{"indexed":false,"internalType":"uint256","name":"_commission","type":"uint256"}],"name":"ReferralCommissionRecorded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"_user","type":"address"},{"indexed":true,"internalType":"address","name":"_referrer","type":"address"}],"name":"ReferralRecorded","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"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"_isExcludedMaxTransactionAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"aggTreasuryWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"burnAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"burnTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyBurnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"buyMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimReferralCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"decimals","outputs":[{"internalType":"uint8","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"spender","type":"address"},{"internalType":"uint256","name":"subtractedValue","type":"uint256"}],"name":"decreaseAllowance","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"developerWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"divider","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"enableTrading","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bool","name":"excluded","type":"bool"}],"name":"excludeFromFees","outputs":[],"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":[{"internalType":"address","name":"account","type":"address"}],"name":"isExcludedFromFees","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"limitsInEffect","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"marketingTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","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":[{"internalType":"address","name":"_user","type":"address"},{"internalType":"address","name":"_referrer","type":"address"}],"name":"recordReferral","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_referrer","type":"address"},{"internalType":"uint256","name":"_commission","type":"uint256"}],"name":"recordReferralCommission","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralCommissionAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"referralCommissionPercentage","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referralsCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"referrers","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"removeLimits","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"sellBurnTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellDevTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"sellMarketingTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"},{"internalType":"bool","name":"value","type":"bool"}],"name":"setAutomatedMarketMakerPair","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_referralCommissionPercentage","type":"uint256"}],"name":"setReferralCommissionPercentage","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"target","type":"address"},{"internalType":"address","name":"_referralContract","type":"address"}],"name":"setReferralContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"swapEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"swapTokensAtAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalBuyTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"totalReferralCommissions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSellTax","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tradingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":"_devTax","type":"uint256"},{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_burnTax","type":"uint256"}],"name":"updateBuyTax","outputs":[],"stateMutability":"nonpayable","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"},{"inputs":[{"internalType":"uint256","name":"_devTax","type":"uint256"},{"internalType":"uint256","name":"_marketingTax","type":"uint256"},{"internalType":"uint256","name":"_burnTax","type":"uint256"}],"name":"updateSellTax","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newAmount","type":"uint256"}],"name":"updateSwapTokensAtAmount","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60c0604052600680546001600160a01b03191661dead1790556127106018556019805462ffffff191660011790556005601b553480156200003f57600080fd5b506040518060400160405280600c81526020016b111a585b5bdb990812185b9960a21b81525060405180604001604052806008815260200167111250535210539160c21b815250816003908162000097919062000827565b506004620000a6828262000827565b5050506000620000bb620004b260201b60201c565b600580546001600160a01b0319166001600160a01b038316908117909155604051919250906000907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908290a350601380546001600160a01b031990811673a21ad44f5ff5899e4a1819bb19212d01c8ee9aa41790915560128054909116735b76d81aaab84f9565a3d1b630669bebe8b02f43179055737a250d5630b4cf539739df2c5dacb4c659f2488d62000173816001620004b6565b6001600160a01b03811660808190526040805163c45a015560e01b8152905163c45a0155916004808201926020929091908290030181865afa158015620001be573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620001e49190620008f3565b6001600160a01b031663c9c6539630836001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801562000232573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002589190620008f3565b6040516001600160e01b031960e085901b1681526001600160a01b039283166004820152911660248201526044016020604051808303816000875af1158015620002a6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190620002cc9190620008f3565b6001600160a01b031660a0819052620002e7906001620004b6565b60a051620002f790600162000530565b69d3c21bcecceda1000000600a600080601481806103e86200031b88601962000934565b6200032791906200094e565b6014556103e86200033a88601962000934565b6200034691906200094e565b6016556127106200035988600362000934565b6200036591906200094e565b60155560088690556009859055600a8490558562000384858762000971565b62000390919062000971565b600755600c839055600d829055600e81905582620003af828462000971565b620003bb919062000971565b600b55620003dd620003d56005546001600160a01b031690565b600162000584565b601254620003f6906001600160a01b0316600162000584565b6013546200040f906001600160a01b0316600162000584565b6200041c30600162000584565b6200042b61dead600162000584565b6200044a620004426005546001600160a01b031690565b6001620004b6565b60125462000463906001600160a01b03166001620004b6565b6013546200047c906001600160a01b03166001620004b6565b62000489306001620004b6565b6200049861dead6001620004b6565b620004a433886200062e565b505050505050505062000987565b3390565b6005546001600160a01b03163314620005055760405162461bcd60e51b81526020600482018190526024820152600080516020620034d983398151915260448201526064015b60405180910390fd5b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6005546001600160a01b03163314620005cf5760405162461bcd60e51b81526020600482018190526024820152600080516020620034d98339815191526044820152606401620004fc565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df7910160405180910390a25050565b6001600160a01b038216620006865760405162461bcd60e51b815260206004820152601f60248201527f45524332303a206d696e7420746f20746865207a65726f2061646472657373006044820152606401620004fc565b60025462000695908262000717565b6002556001600160a01b038216600090815260208190526040902054620006bd908262000717565b6001600160a01b038316600081815260208181526040808320949094559251848152919290917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef910160405180910390a35050565b505050565b60008062000726838562000971565b9050838110156200077a5760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401620004fc565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b600181811c90821680620007ae57607f821691505b602082108103620007cf57634e487b7160e01b600052602260045260246000fd5b50919050565b601f8211156200071257600081815260208120601f850160051c81016020861015620007fe5750805b601f850160051c820191505b818110156200081f578281556001016200080a565b505050505050565b81516001600160401b0381111562000843576200084362000783565b6200085b8162000854845462000799565b84620007d5565b602080601f8311600181146200089357600084156200087a5750858301515b600019600386901b1c1916600185901b1785556200081f565b600085815260208120601f198616915b82811015620008c457888601518255948401946001909101908401620008a3565b5085821015620008e35787850151600019600388901b60f8161c191681555b5050505050600190811b01905550565b6000602082840312156200090657600080fd5b81516001600160a01b03811681146200077a57600080fd5b634e487b7160e01b600052601160045260246000fd5b80820281158282048414176200077d576200077d6200091e565b6000826200096c57634e487b7160e01b600052601260045260246000fd5b500490565b808201808211156200077d576200077d6200091e565b60805160a051612b02620009d76000396000818161068d015281816113530152611f670152600081816104bf01528181611f290152818161253f015281816125f801526126340152612b026000f3fe60806040526004361061039b5760003560e01c806370a08231116101dc578063af8f26e711610102578063d257b34f116100a0578063e96db1ef1161006f578063e96db1ef14610af2578063ec5b7c8614610b08578063f2fde38b14610b1e578063f8b45b0514610b3e57600080fd5b8063d257b34f14610a56578063dc1694b814610a76578063dd62ed3e14610a96578063e2f4560514610adc57600080fd5b8063be691883116100dc578063be691883146109ea578063c024666814610a00578063c18bc19514610a20578063c8c8ebe414610a4057600080fd5b8063af8f26e714610985578063b62496f51461099b578063bbc0c742146109cb57600080fd5b80638b27306d1161017a5780639ecfc6ea116101495780639ecfc6ea146108f9578063a0a485ca14610925578063a457c2d714610945578063a9059cbb1461096557600080fd5b80638b27306d146108905780638da5cb5b146108a657806395d89b41146108c45780639a7a23d6146108d957600080fd5b806372483925116101b65780637248392514610826578063751039fc146108465780637571336a1461085b5780638a8c523c1461087b57600080fd5b806370a08231146107bb57806370d5ae05146107f1578063715018a61461081157600080fd5b806323ce79c0116102c157806349bd5a5e1161025f578063556482091161022e5780635564820914610738578063669373021461074e5780636b366c661461076e5780636ddd17131461079b57600080fd5b806349bd5a5e1461067b5780634a3b68cc146106af5780634a62bb65146106e55780634fbee193146106ff57600080fd5b8063330124111161029b5780633301241114610619578063378efa371461062f578063395093511461064557806346469afb1461066557600080fd5b806323ce79c0146105c75780633020a89c146105e7578063313ce567146105fd57600080fd5b80631694505e116103395780631d349d40116103085780631d349d40146105445780631f3ecf6514610571578063203e727e1461058757806323b872dd146105a757600080fd5b80631694505e146104ad57806318160ddd146104f9578063185870f91461050e5780631bff78981461052e57600080fd5b8063095ea7b311610375578063095ea7b3146104185780630ac44e02146104485780630c7f7b6b1461045d57806310d5de531461047d57600080fd5b806305f93650146103a757806306fdde03146103c957806308003f78146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c23660046126a8565b610b54565b005b3480156103d557600080fd5b506103de610c05565b6040516103eb91906126d4565b60405180910390f35b34801561040057600080fd5b5061040a60115481565b6040519081526020016103eb565b34801561042457600080fd5b5061043861043336600461273a565b610c97565b60405190151581526020016103eb565b34801561045457600080fd5b506103c7610cae565b34801561046957600080fd5b506103c7610478366004612766565b610e0f565b34801561048957600080fd5b5061043861049836600461279f565b60226020526000908152604090205460ff1681565b3480156104b957600080fd5b506104e17f000000000000000000000000000000000000000000000000000000000000000081565b6040516001600160a01b0390911681526020016103eb565b34801561050557600080fd5b5060025461040a565b34801561051a57600080fd5b506012546104e1906001600160a01b031681565b34801561053a57600080fd5b5061040a600b5481565b34801561055057600080fd5b5061040a61055f36600461279f565b601e6020526000908152604090205481565b34801561057d57600080fd5b5061040a600e5481565b34801561059357600080fd5b506103c76105a23660046127bc565b610f2e565b3480156105b357600080fd5b506104386105c23660046127d5565b61100b565b3480156105d357600080fd5b506103c76105e2366004612766565b611074565b3480156105f357600080fd5b5061040a600a5481565b34801561060957600080fd5b50604051601281526020016103eb565b34801561062557600080fd5b5061040a60095481565b34801561063b57600080fd5b5061040a60185481565b34801561065157600080fd5b5061043861066036600461273a565b611120565b34801561067157600080fd5b5061040a60075481565b34801561068757600080fd5b506104e17f000000000000000000000000000000000000000000000000000000000000000081565b3480156106bb57600080fd5b506104e16106ca36600461279f565b601d602052600090815260409020546001600160a01b031681565b3480156106f157600080fd5b506019546104389060ff1681565b34801561070b57600080fd5b5061043861071a36600461279f565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561074457600080fd5b5061040a600f5481565b34801561075a57600080fd5b506103c76107693660046127bc565b611156565b34801561077a57600080fd5b5061040a61078936600461279f565b601f6020526000908152604090205481565b3480156107a757600080fd5b506019546104389062010000900460ff1681565b3480156107c757600080fd5b5061040a6107d636600461279f565b6001600160a01b031660009081526020819052604090205490565b3480156107fd57600080fd5b506006546104e1906001600160a01b031681565b34801561081d57600080fd5b506103c76111d5565b34801561083257600080fd5b506013546104e1906001600160a01b031681565b34801561085257600080fd5b50610438611249565b34801561086757600080fd5b506103c7610876366004612816565b611286565b34801561088757600080fd5b506103c76112db565b34801561089c57600080fd5b5061040a60105481565b3480156108b257600080fd5b506005546001600160a01b03166104e1565b3480156108d057600080fd5b506103de611318565b3480156108e557600080fd5b506103c76108f4366004612816565b611327565b34801561090557600080fd5b5061040a61091436600461279f565b602080526000908152604090205481565b34801561093157600080fd5b506103c76109403660046126a8565b611402565b34801561095157600080fd5b5061043861096036600461273a565b6114a5565b34801561097157600080fd5b5061043861098036600461273a565b6114f4565b34801561099157600080fd5b5061040a60085481565b3480156109a757600080fd5b506104386109b636600461279f565b60236020526000908152604090205460ff1681565b3480156109d757600080fd5b5060195461043890610100900460ff1681565b3480156109f657600080fd5b5061040a600c5481565b348015610a0c57600080fd5b506103c7610a1b366004612816565b611501565b348015610a2c57600080fd5b506103c7610a3b3660046127bc565b61158b565b348015610a4c57600080fd5b5061040a60145481565b348015610a6257600080fd5b50610438610a713660046127bc565b61165c565b348015610a8257600080fd5b506103c7610a9136600461273a565b6117ae565b348015610aa257600080fd5b5061040a610ab1366004612766565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ae857600080fd5b5061040a60155481565b348015610afe57600080fd5b5061040a600d5481565b348015610b1457600080fd5b5061040a601b5481565b348015610b2a57600080fd5b506103c7610b3936600461279f565b61185c565b348015610b4a57600080fd5b5061040a60165481565b6005546001600160a01b03163314610b875760405162461bcd60e51b8152600401610b7e90612849565b60405180910390fd5b600c839055600d829055600e81905580610ba18385612894565b610bab9190612894565b600b81905560191015610c005760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610b7e565b505050565b606060038054610c14906128a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c40906128a7565b8015610c8d5780601f10610c6257610100808354040283529160200191610c8d565b820191906000526020600020905b815481529060010190602001808311610c7057829003601f168201915b5050505050905090565b6000610ca4338484611947565b5060015b92915050565b33610cea5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610b7e565b336000908152601e6020526040902054610d525760405162461bcd60e51b8152602060048201526024808201527f4e6f20726566657272616c20636f6d6d697373696f6e20666f722074686973206044820152633ab9b2b960e11b6064820152608401610b7e565b601c54336000818152601e602052604090819020549051635569f64b60e11b8152600481019290925260248201526001600160a01b039091169063aad3ec9690604401600060405180830381600087803b158015610daf57600080fd5b505af1158015610dc3573d6000803e3d6000fd5b5050336000818152601e60209081526040918290205491519182529193507fa8df9b6a0f9d7b6fba1f4c410673d73df64cfd08f266528c3977d2ca64e4ee7492500160405180910390a2565b6005546001600160a01b03163314610e395760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b03821615801590610e5957506001600160a01b03811615155b8015610e775750806001600160a01b0316826001600160a01b031614155b8015610e9b57506001600160a01b038281166000908152601d602052604090205416155b15610f2a576001600160a01b038281166000908152601d6020908152604080832080546001600160a01b0319169486169485179055928252601f9052908120805460019290610eeb908490612894565b90915550506040516001600160a01b0380831691908416907ff61ccbe316daff56654abed758191f9a4dcac526d43747a50a2d545c0ca64d8290600090a35b5050565b6005546001600160a01b03163314610f585760405162461bcd60e51b8152600401610b7e90612849565b670de0b6b3a76400006103e8610f6d60025490565b610f789060056128e1565b610f8291906128f8565b610f8c91906128f8565b811015610ff35760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610b7e565b61100581670de0b6b3a76400006128e1565b60145550565b6000611018848484611a6c565b61106a843361106585604051806060016040528060288152602001612a80602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061219b565b611947565b5060019392505050565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b0381166110e35760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610b7e565b601c80546001600160a01b0319166001600160a01b038381169190911790915560135461111591849116600019611947565b610f2a816001611501565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca491859061106590866121d5565b6005546001600160a01b031633146111805760405162461bcd60e51b8152600401610b7e90612849565b603281106111d05760405162461bcd60e51b815260206004820152601b60248201527f436f6d6d697373696f6e2066656520697320746f6f20686967682100000000006044820152606401610b7e565b601b55565b6005546001600160a01b031633146111ff5760405162461bcd60e51b8152600401610b7e90612849565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b031633146112765760405162461bcd60e51b8152600401610b7e90612849565b506019805460ff19169055600190565b6005546001600160a01b031633146112b05760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113055760405162461bcd60e51b8152600401610b7e90612849565b6019805462ffff00191662010100179055565b606060048054610c14906128a7565b6005546001600160a01b031633146113515760405162461bcd60e51b8152600401610b7e90612849565b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316826001600160a01b0316036113f85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b7e565b610f2a828261223b565b6005546001600160a01b0316331461142c5760405162461bcd60e51b8152600401610b7e90612849565b60088390556009829055600a819055806114468385612894565b6114509190612894565b600781905560141015610c005760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b7e565b6000610ca4338461106585604051806060016040528060258152602001612aa8602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061219b565b6000610ca4338484611a6c565b6005546001600160a01b0316331461152b5760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b031633146115b55760405162461bcd60e51b8152600401610b7e90612849565b670de0b6b3a76400006103e86115ca60025490565b6115d590600f6128e1565b6115df91906128f8565b6115e991906128f8565b8110156116445760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610b7e565b61165681670de0b6b3a76400006128e1565b60165550565b6005546000906001600160a01b031633146116895760405162461bcd60e51b8152600401610b7e90612849565b620186a061169660025490565b6116a19060016128e1565b6116ab91906128f8565b8210156117185760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b7e565b6103e861172460025490565b61172f9060056128e1565b61173991906128f8565b8211156117a55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b7e565b50601555600190565b6005546001600160a01b031633146117d85760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b038216158015906117f05750600081115b15610f2a576001600160a01b03821660009081526020805260408120805483929061181c908490612894565b90915550506040518181526001600160a01b038316907f91badd4ef769cf56b7db0b350b95c9fb6d973e6e37d28a51fed219cc7d53184f9060200161157f565b6005546001600160a01b031633146118865760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b0381166118eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166119a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b7e565b6001600160a01b038216611a0a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b7e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611a925760405162461bcd60e51b8152600401610b7e9061291a565b6001600160a01b038216611ab85760405162461bcd60e51b8152600401610b7e9061295f565b80600003611acc57610c008383600061228f565b60195460ff1615611e3b576005546001600160a01b03848116911614801590611b0357506005546001600160a01b03838116911614155b8015611b1757506001600160a01b03821615155b8015611b2e57506001600160a01b03821661dead14155b8015611b3d575060175460ff16155b15611e3b57601954610100900460ff16611bd5576001600160a01b03831660009081526021602052604090205460ff1680611b9057506001600160a01b03821660009081526021602052604090205460ff165b611bd55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b7e565b6001600160a01b03831660009081526023602052604090205460ff168015611c1657506001600160a01b03821660009081526022602052604090205460ff16155b15611cfa57601454811115611c8b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b7e565b6016546001600160a01b038316600090815260208190526040902054611cb19083612894565b1115611cf55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b7e565b611e3b565b6001600160a01b03821660009081526023602052604090205460ff168015611d3b57506001600160a01b03831660009081526022602052604090205460ff16155b15611db157601454811115611cf55760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b7e565b6001600160a01b03821660009081526022602052604090205460ff16611e3b576016546001600160a01b038316600090815260208190526040902054611df79083612894565b1115611e3b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b7e565b6001600160a01b03831660009081526023602052604090205460ff1615611ef7576001600160a01b038281166000908152601d60205260409020541615611ef757611ece611ea0612710611e9a601b548561239890919063ffffffff16565b9061241a565b6001600160a01b038085166000908152601d60209081526040808320549093168252601e90522054906121d5565b6001600160a01b038084166000908152601d60209081526040808320549093168252601e905220555b3060009081526020819052604090205460155460135490821015906001600160a01b038681169116148015611f5e57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b8015611f9c57507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316846001600160a01b031614155b15611fbd57601280546001600160a01b0319166001600160a01b0386161790555b808015611fd2575060195462010000900460ff165b8015611fe1575060175460ff16155b801561200657506001600160a01b03851660009081526023602052604090205460ff16155b801561202b57506001600160a01b03851660009081526021602052604090205460ff16155b801561205057506001600160a01b03841660009081526021602052604090205460ff16155b15612075576017805460ff1916600117905561206a61245c565b6017805460ff191690555b6017546001600160a01b03861660009081526021602052604090205460ff918216159116806120bc57506001600160a01b03851660009081526021602052604090205460ff165b156120c5575060005b60008115612187576001600160a01b03861660009081526023602052604090205460ff1680156120f757506000600b54115b1561211d576121166064611e9a600b548861239890919063ffffffff16565b9050612169565b6001600160a01b03871660009081526023602052604090205460ff16801561214757506000600754115b15612169576121666064611e9a6007548861239890919063ffffffff16565b90505b801561217a5761217a87308361228f565b61218481866129a2565b94505b61219287878761228f565b50505050505050565b600081848411156121bf5760405162461bcd60e51b8152600401610b7e91906126d4565b5060006121cc84866129a2565b95945050505050565b6000806121e28385612894565b9050838110156122345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b7e565b9392505050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122b55760405162461bcd60e51b8152600401610b7e9061291a565b6001600160a01b0382166122db5760405162461bcd60e51b8152600401610b7e9061295f565b61231881604051806060016040528060268152602001612a5a602691396001600160a01b038616600090815260208190526040902054919061219b565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461234790826121d5565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a5f565b6000826000036123aa57506000610ca8565b60006123b683856128e1565b9050826123c385836128f8565b146122345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b7e565b600061223483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124ba565b30600090815260208190526040812054908190036124775750565b612480816124e8565b60125460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610c00573d6000803e3d6000fd5b600081836124db5760405162461bcd60e51b8152600401610b7e91906126d4565b5060006121cc84866128f8565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061251d5761251d6129b5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf91906129cb565b816001815181106125d2576125d26129b5565b60200260200101906001600160a01b031690816001600160a01b03168152505061261d307f000000000000000000000000000000000000000000000000000000000000000084611947565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063791ac947906126729085906000908690309042906004016129e8565b600060405180830381600087803b15801561268c57600080fd5b505af11580156126a0573d6000803e3d6000fd5b505050505050565b6000806000606084860312156126bd57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b81811015612701578581018301518582016040015282016126e5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461273757600080fd5b50565b6000806040838503121561274d57600080fd5b823561275881612722565b946020939093013593505050565b6000806040838503121561277957600080fd5b823561278481612722565b9150602083013561279481612722565b809150509250929050565b6000602082840312156127b157600080fd5b813561223481612722565b6000602082840312156127ce57600080fd5b5035919050565b6000806000606084860312156127ea57600080fd5b83356127f581612722565b9250602084013561280581612722565b929592945050506040919091013590565b6000806040838503121561282957600080fd5b823561283481612722565b91506020830135801515811461279457600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ca857610ca861287e565b600181811c908216806128bb57607f821691505b6020821081036128db57634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610ca857610ca861287e565b60008261291557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ca857610ca861287e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129dd57600080fd5b815161223481612722565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a385784516001600160a01b031683529383019391830191600101612a13565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e958aa8ea7c713037d6e7a6d548248b5f2ab00624666ec31ecbd5bcd230c97564736f6c634300081300334f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572

Deployed Bytecode

0x60806040526004361061039b5760003560e01c806370a08231116101dc578063af8f26e711610102578063d257b34f116100a0578063e96db1ef1161006f578063e96db1ef14610af2578063ec5b7c8614610b08578063f2fde38b14610b1e578063f8b45b0514610b3e57600080fd5b8063d257b34f14610a56578063dc1694b814610a76578063dd62ed3e14610a96578063e2f4560514610adc57600080fd5b8063be691883116100dc578063be691883146109ea578063c024666814610a00578063c18bc19514610a20578063c8c8ebe414610a4057600080fd5b8063af8f26e714610985578063b62496f51461099b578063bbc0c742146109cb57600080fd5b80638b27306d1161017a5780639ecfc6ea116101495780639ecfc6ea146108f9578063a0a485ca14610925578063a457c2d714610945578063a9059cbb1461096557600080fd5b80638b27306d146108905780638da5cb5b146108a657806395d89b41146108c45780639a7a23d6146108d957600080fd5b806372483925116101b65780637248392514610826578063751039fc146108465780637571336a1461085b5780638a8c523c1461087b57600080fd5b806370a08231146107bb57806370d5ae05146107f1578063715018a61461081157600080fd5b806323ce79c0116102c157806349bd5a5e1161025f578063556482091161022e5780635564820914610738578063669373021461074e5780636b366c661461076e5780636ddd17131461079b57600080fd5b806349bd5a5e1461067b5780634a3b68cc146106af5780634a62bb65146106e55780634fbee193146106ff57600080fd5b8063330124111161029b5780633301241114610619578063378efa371461062f578063395093511461064557806346469afb1461066557600080fd5b806323ce79c0146105c75780633020a89c146105e7578063313ce567146105fd57600080fd5b80631694505e116103395780631d349d40116103085780631d349d40146105445780631f3ecf6514610571578063203e727e1461058757806323b872dd146105a757600080fd5b80631694505e146104ad57806318160ddd146104f9578063185870f91461050e5780631bff78981461052e57600080fd5b8063095ea7b311610375578063095ea7b3146104185780630ac44e02146104485780630c7f7b6b1461045d57806310d5de531461047d57600080fd5b806305f93650146103a757806306fdde03146103c957806308003f78146103f457600080fd5b366103a257005b600080fd5b3480156103b357600080fd5b506103c76103c23660046126a8565b610b54565b005b3480156103d557600080fd5b506103de610c05565b6040516103eb91906126d4565b60405180910390f35b34801561040057600080fd5b5061040a60115481565b6040519081526020016103eb565b34801561042457600080fd5b5061043861043336600461273a565b610c97565b60405190151581526020016103eb565b34801561045457600080fd5b506103c7610cae565b34801561046957600080fd5b506103c7610478366004612766565b610e0f565b34801561048957600080fd5b5061043861049836600461279f565b60226020526000908152604090205460ff1681565b3480156104b957600080fd5b506104e17f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d81565b6040516001600160a01b0390911681526020016103eb565b34801561050557600080fd5b5060025461040a565b34801561051a57600080fd5b506012546104e1906001600160a01b031681565b34801561053a57600080fd5b5061040a600b5481565b34801561055057600080fd5b5061040a61055f36600461279f565b601e6020526000908152604090205481565b34801561057d57600080fd5b5061040a600e5481565b34801561059357600080fd5b506103c76105a23660046127bc565b610f2e565b3480156105b357600080fd5b506104386105c23660046127d5565b61100b565b3480156105d357600080fd5b506103c76105e2366004612766565b611074565b3480156105f357600080fd5b5061040a600a5481565b34801561060957600080fd5b50604051601281526020016103eb565b34801561062557600080fd5b5061040a60095481565b34801561063b57600080fd5b5061040a60185481565b34801561065157600080fd5b5061043861066036600461273a565b611120565b34801561067157600080fd5b5061040a60075481565b34801561068757600080fd5b506104e17f000000000000000000000000a4d9ebcc5da82bdb386eb4b29d165b51f293f1aa81565b3480156106bb57600080fd5b506104e16106ca36600461279f565b601d602052600090815260409020546001600160a01b031681565b3480156106f157600080fd5b506019546104389060ff1681565b34801561070b57600080fd5b5061043861071a36600461279f565b6001600160a01b031660009081526021602052604090205460ff1690565b34801561074457600080fd5b5061040a600f5481565b34801561075a57600080fd5b506103c76107693660046127bc565b611156565b34801561077a57600080fd5b5061040a61078936600461279f565b601f6020526000908152604090205481565b3480156107a757600080fd5b506019546104389062010000900460ff1681565b3480156107c757600080fd5b5061040a6107d636600461279f565b6001600160a01b031660009081526020819052604090205490565b3480156107fd57600080fd5b506006546104e1906001600160a01b031681565b34801561081d57600080fd5b506103c76111d5565b34801561083257600080fd5b506013546104e1906001600160a01b031681565b34801561085257600080fd5b50610438611249565b34801561086757600080fd5b506103c7610876366004612816565b611286565b34801561088757600080fd5b506103c76112db565b34801561089c57600080fd5b5061040a60105481565b3480156108b257600080fd5b506005546001600160a01b03166104e1565b3480156108d057600080fd5b506103de611318565b3480156108e557600080fd5b506103c76108f4366004612816565b611327565b34801561090557600080fd5b5061040a61091436600461279f565b602080526000908152604090205481565b34801561093157600080fd5b506103c76109403660046126a8565b611402565b34801561095157600080fd5b5061043861096036600461273a565b6114a5565b34801561097157600080fd5b5061043861098036600461273a565b6114f4565b34801561099157600080fd5b5061040a60085481565b3480156109a757600080fd5b506104386109b636600461279f565b60236020526000908152604090205460ff1681565b3480156109d757600080fd5b5060195461043890610100900460ff1681565b3480156109f657600080fd5b5061040a600c5481565b348015610a0c57600080fd5b506103c7610a1b366004612816565b611501565b348015610a2c57600080fd5b506103c7610a3b3660046127bc565b61158b565b348015610a4c57600080fd5b5061040a60145481565b348015610a6257600080fd5b50610438610a713660046127bc565b61165c565b348015610a8257600080fd5b506103c7610a9136600461273a565b6117ae565b348015610aa257600080fd5b5061040a610ab1366004612766565b6001600160a01b03918216600090815260016020908152604080832093909416825291909152205490565b348015610ae857600080fd5b5061040a60155481565b348015610afe57600080fd5b5061040a600d5481565b348015610b1457600080fd5b5061040a601b5481565b348015610b2a57600080fd5b506103c7610b3936600461279f565b61185c565b348015610b4a57600080fd5b5061040a60165481565b6005546001600160a01b03163314610b875760405162461bcd60e51b8152600401610b7e90612849565b60405180910390fd5b600c839055600d829055600e81905580610ba18385612894565b610bab9190612894565b600b81905560191015610c005760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323525206f72206c6573730000006044820152606401610b7e565b505050565b606060038054610c14906128a7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c40906128a7565b8015610c8d5780601f10610c6257610100808354040283529160200191610c8d565b820191906000526020600020905b815481529060010190602001808311610c7057829003601f168201915b5050505050905090565b6000610ca4338484611947565b5060015b92915050565b33610cea5760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610b7e565b336000908152601e6020526040902054610d525760405162461bcd60e51b8152602060048201526024808201527f4e6f20726566657272616c20636f6d6d697373696f6e20666f722074686973206044820152633ab9b2b960e11b6064820152608401610b7e565b601c54336000818152601e602052604090819020549051635569f64b60e11b8152600481019290925260248201526001600160a01b039091169063aad3ec9690604401600060405180830381600087803b158015610daf57600080fd5b505af1158015610dc3573d6000803e3d6000fd5b5050336000818152601e60209081526040918290205491519182529193507fa8df9b6a0f9d7b6fba1f4c410673d73df64cfd08f266528c3977d2ca64e4ee7492500160405180910390a2565b6005546001600160a01b03163314610e395760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b03821615801590610e5957506001600160a01b03811615155b8015610e775750806001600160a01b0316826001600160a01b031614155b8015610e9b57506001600160a01b038281166000908152601d602052604090205416155b15610f2a576001600160a01b038281166000908152601d6020908152604080832080546001600160a01b0319169486169485179055928252601f9052908120805460019290610eeb908490612894565b90915550506040516001600160a01b0380831691908416907ff61ccbe316daff56654abed758191f9a4dcac526d43747a50a2d545c0ca64d8290600090a35b5050565b6005546001600160a01b03163314610f585760405162461bcd60e51b8152600401610b7e90612849565b670de0b6b3a76400006103e8610f6d60025490565b610f789060056128e1565b610f8291906128f8565b610f8c91906128f8565b811015610ff35760405162461bcd60e51b815260206004820152602f60248201527f43616e6e6f7420736574206d61785472616e73616374696f6e416d6f756e742060448201526e6c6f776572207468616e20302e352560881b6064820152608401610b7e565b61100581670de0b6b3a76400006128e1565b60145550565b6000611018848484611a6c565b61106a843361106585604051806060016040528060288152602001612a80602891396001600160a01b038a166000908152600160209081526040808320338452909152902054919061219b565b611947565b5060019392505050565b6005546001600160a01b0316331461109e5760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b0381166110e35760405162461bcd60e51b815260206004820152600c60248201526b5a65726f206164647265737360a01b6044820152606401610b7e565b601c80546001600160a01b0319166001600160a01b038381169190911790915560135461111591849116600019611947565b610f2a816001611501565b3360008181526001602090815260408083206001600160a01b03871684529091528120549091610ca491859061106590866121d5565b6005546001600160a01b031633146111805760405162461bcd60e51b8152600401610b7e90612849565b603281106111d05760405162461bcd60e51b815260206004820152601b60248201527f436f6d6d697373696f6e2066656520697320746f6f20686967682100000000006044820152606401610b7e565b601b55565b6005546001600160a01b031633146111ff5760405162461bcd60e51b8152600401610b7e90612849565b6005546040516000916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e0908390a3600580546001600160a01b0319169055565b6005546000906001600160a01b031633146112765760405162461bcd60e51b8152600401610b7e90612849565b506019805460ff19169055600190565b6005546001600160a01b031633146112b05760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b03919091166000908152602260205260409020805460ff1916911515919091179055565b6005546001600160a01b031633146113055760405162461bcd60e51b8152600401610b7e90612849565b6019805462ffff00191662010100179055565b606060048054610c14906128a7565b6005546001600160a01b031633146113515760405162461bcd60e51b8152600401610b7e90612849565b7f000000000000000000000000a4d9ebcc5da82bdb386eb4b29d165b51f293f1aa6001600160a01b0316826001600160a01b0316036113f85760405162461bcd60e51b815260206004820152603960248201527f54686520706169722063616e6e6f742062652072656d6f7665642066726f6d2060448201527f6175746f6d617465644d61726b65744d616b65725061697273000000000000006064820152608401610b7e565b610f2a828261223b565b6005546001600160a01b0316331461142c5760405162461bcd60e51b8152600401610b7e90612849565b60088390556009829055600a819055806114468385612894565b6114509190612894565b600781905560141015610c005760405162461bcd60e51b815260206004820152601d60248201527f4d757374206b656570206665657320617420323025206f72206c6573730000006044820152606401610b7e565b6000610ca4338461106585604051806060016040528060258152602001612aa8602591393360009081526001602090815260408083206001600160a01b038d168452909152902054919061219b565b6000610ca4338484611a6c565b6005546001600160a01b0316331461152b5760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b038216600081815260216020908152604091829020805460ff191685151590811790915591519182527f9d8f7706ea1113d1a167b526eca956215946dd36cc7df39eb16180222d8b5df791015b60405180910390a25050565b6005546001600160a01b031633146115b55760405162461bcd60e51b8152600401610b7e90612849565b670de0b6b3a76400006103e86115ca60025490565b6115d590600f6128e1565b6115df91906128f8565b6115e991906128f8565b8110156116445760405162461bcd60e51b8152602060048201526024808201527f43616e6e6f7420736574206d617857616c6c6574206c6f776572207468616e20604482015263312e352560e01b6064820152608401610b7e565b61165681670de0b6b3a76400006128e1565b60165550565b6005546000906001600160a01b031633146116895760405162461bcd60e51b8152600401610b7e90612849565b620186a061169660025490565b6116a19060016128e1565b6116ab91906128f8565b8210156117185760405162461bcd60e51b815260206004820152603560248201527f5377617020616d6f756e742063616e6e6f74206265206c6f776572207468616e60448201527410181718181892903a37ba30b61039bab838363c9760591b6064820152608401610b7e565b6103e861172460025490565b61172f9060056128e1565b61173991906128f8565b8211156117a55760405162461bcd60e51b815260206004820152603460248201527f5377617020616d6f756e742063616e6e6f742062652068696768657220746861604482015273371018171a92903a37ba30b61039bab838363c9760611b6064820152608401610b7e565b50601555600190565b6005546001600160a01b031633146117d85760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b038216158015906117f05750600081115b15610f2a576001600160a01b03821660009081526020805260408120805483929061181c908490612894565b90915550506040518181526001600160a01b038316907f91badd4ef769cf56b7db0b350b95c9fb6d973e6e37d28a51fed219cc7d53184f9060200161157f565b6005546001600160a01b031633146118865760405162461bcd60e51b8152600401610b7e90612849565b6001600160a01b0381166118eb5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201526564647265737360d01b6064820152608401610b7e565b6005546040516001600160a01b038084169216907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a3600580546001600160a01b0319166001600160a01b0392909216919091179055565b6001600160a01b0383166119a95760405162461bcd60e51b8152602060048201526024808201527f45524332303a20617070726f76652066726f6d20746865207a65726f206164646044820152637265737360e01b6064820152608401610b7e565b6001600160a01b038216611a0a5760405162461bcd60e51b815260206004820152602260248201527f45524332303a20617070726f766520746f20746865207a65726f206164647265604482015261737360f01b6064820152608401610b7e565b6001600160a01b0383811660008181526001602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b038316611a925760405162461bcd60e51b8152600401610b7e9061291a565b6001600160a01b038216611ab85760405162461bcd60e51b8152600401610b7e9061295f565b80600003611acc57610c008383600061228f565b60195460ff1615611e3b576005546001600160a01b03848116911614801590611b0357506005546001600160a01b03838116911614155b8015611b1757506001600160a01b03821615155b8015611b2e57506001600160a01b03821661dead14155b8015611b3d575060175460ff16155b15611e3b57601954610100900460ff16611bd5576001600160a01b03831660009081526021602052604090205460ff1680611b9057506001600160a01b03821660009081526021602052604090205460ff165b611bd55760405162461bcd60e51b81526020600482015260166024820152752a3930b234b7339034b9903737ba1030b1ba34bb329760511b6044820152606401610b7e565b6001600160a01b03831660009081526023602052604090205460ff168015611c1657506001600160a01b03821660009081526022602052604090205460ff16155b15611cfa57601454811115611c8b5760405162461bcd60e51b815260206004820152603560248201527f427579207472616e7366657220616d6f756e742065786365656473207468652060448201527436b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760591b6064820152608401610b7e565b6016546001600160a01b038316600090815260208190526040902054611cb19083612894565b1115611cf55760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b7e565b611e3b565b6001600160a01b03821660009081526023602052604090205460ff168015611d3b57506001600160a01b03831660009081526022602052604090205460ff16155b15611db157601454811115611cf55760405162461bcd60e51b815260206004820152603660248201527f53656c6c207472616e7366657220616d6f756e742065786365656473207468656044820152751036b0bc2a3930b739b0b1ba34b7b720b6b7bab73a1760511b6064820152608401610b7e565b6001600160a01b03821660009081526022602052604090205460ff16611e3b576016546001600160a01b038316600090815260208190526040902054611df79083612894565b1115611e3b5760405162461bcd60e51b815260206004820152601360248201527213585e081dd85b1b195d08195e18d959591959606a1b6044820152606401610b7e565b6001600160a01b03831660009081526023602052604090205460ff1615611ef7576001600160a01b038281166000908152601d60205260409020541615611ef757611ece611ea0612710611e9a601b548561239890919063ffffffff16565b9061241a565b6001600160a01b038085166000908152601d60209081526040808320549093168252601e90522054906121d5565b6001600160a01b038084166000908152601d60209081526040808320549093168252601e905220555b3060009081526020819052604090205460155460135490821015906001600160a01b038681169116148015611f5e57507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b0316846001600160a01b031614155b8015611f9c57507f000000000000000000000000a4d9ebcc5da82bdb386eb4b29d165b51f293f1aa6001600160a01b0316846001600160a01b031614155b15611fbd57601280546001600160a01b0319166001600160a01b0386161790555b808015611fd2575060195462010000900460ff165b8015611fe1575060175460ff16155b801561200657506001600160a01b03851660009081526023602052604090205460ff16155b801561202b57506001600160a01b03851660009081526021602052604090205460ff16155b801561205057506001600160a01b03841660009081526021602052604090205460ff16155b15612075576017805460ff1916600117905561206a61245c565b6017805460ff191690555b6017546001600160a01b03861660009081526021602052604090205460ff918216159116806120bc57506001600160a01b03851660009081526021602052604090205460ff165b156120c5575060005b60008115612187576001600160a01b03861660009081526023602052604090205460ff1680156120f757506000600b54115b1561211d576121166064611e9a600b548861239890919063ffffffff16565b9050612169565b6001600160a01b03871660009081526023602052604090205460ff16801561214757506000600754115b15612169576121666064611e9a6007548861239890919063ffffffff16565b90505b801561217a5761217a87308361228f565b61218481866129a2565b94505b61219287878761228f565b50505050505050565b600081848411156121bf5760405162461bcd60e51b8152600401610b7e91906126d4565b5060006121cc84866129a2565b95945050505050565b6000806121e28385612894565b9050838110156122345760405162461bcd60e51b815260206004820152601b60248201527f536166654d6174683a206164646974696f6e206f766572666c6f7700000000006044820152606401610b7e565b9392505050565b6001600160a01b038216600081815260236020526040808220805460ff191685151590811790915590519092917fffa9187bf1f18bf477bd0ea1bcbb64e93b6a98132473929edfce215cd9b16fab91a35050565b6001600160a01b0383166122b55760405162461bcd60e51b8152600401610b7e9061291a565b6001600160a01b0382166122db5760405162461bcd60e51b8152600401610b7e9061295f565b61231881604051806060016040528060268152602001612a5a602691396001600160a01b038616600090815260208190526040902054919061219b565b6001600160a01b03808516600090815260208190526040808220939093559084168152205461234790826121d5565b6001600160a01b038381166000818152602081815260409182902094909455518481529092918616917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef9101611a5f565b6000826000036123aa57506000610ca8565b60006123b683856128e1565b9050826123c385836128f8565b146122345760405162461bcd60e51b815260206004820152602160248201527f536166654d6174683a206d756c7469706c69636174696f6e206f766572666c6f6044820152607760f81b6064820152608401610b7e565b600061223483836040518060400160405280601a81526020017f536166654d6174683a206469766973696f6e206279207a65726f0000000000008152506124ba565b30600090815260208190526040812054908190036124775750565b612480816124e8565b60125460405147916001600160a01b03169082156108fc029083906000818181858888f19350505050158015610c00573d6000803e3d6000fd5b600081836124db5760405162461bcd60e51b8152600401610b7e91906126d4565b5060006121cc84866128f8565b604080516002808252606082018352600092602083019080368337019050509050308160008151811061251d5761251d6129b5565b60200260200101906001600160a01b031690816001600160a01b0316815250507f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d6001600160a01b031663ad5c46486040518163ffffffff1660e01b8152600401602060405180830381865afa15801561259b573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906125bf91906129cb565b816001815181106125d2576125d26129b5565b60200260200101906001600160a01b031690816001600160a01b03168152505061261d307f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d84611947565b60405163791ac94760e01b81526001600160a01b037f0000000000000000000000007a250d5630b4cf539739df2c5dacb4c659f2488d169063791ac947906126729085906000908690309042906004016129e8565b600060405180830381600087803b15801561268c57600080fd5b505af11580156126a0573d6000803e3d6000fd5b505050505050565b6000806000606084860312156126bd57600080fd5b505081359360208301359350604090920135919050565b600060208083528351808285015260005b81811015612701578581018301518582016040015282016126e5565b506000604082860101526040601f19601f8301168501019250505092915050565b6001600160a01b038116811461273757600080fd5b50565b6000806040838503121561274d57600080fd5b823561275881612722565b946020939093013593505050565b6000806040838503121561277957600080fd5b823561278481612722565b9150602083013561279481612722565b809150509250929050565b6000602082840312156127b157600080fd5b813561223481612722565b6000602082840312156127ce57600080fd5b5035919050565b6000806000606084860312156127ea57600080fd5b83356127f581612722565b9250602084013561280581612722565b929592945050506040919091013590565b6000806040838503121561282957600080fd5b823561283481612722565b91506020830135801515811461279457600080fd5b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b634e487b7160e01b600052601160045260246000fd5b80820180821115610ca857610ca861287e565b600181811c908216806128bb57607f821691505b6020821081036128db57634e487b7160e01b600052602260045260246000fd5b50919050565b8082028115828204841417610ca857610ca861287e565b60008261291557634e487b7160e01b600052601260045260246000fd5b500490565b60208082526025908201527f45524332303a207472616e736665722066726f6d20746865207a65726f206164604082015264647265737360d81b606082015260800190565b60208082526023908201527f45524332303a207472616e7366657220746f20746865207a65726f206164647260408201526265737360e81b606082015260800190565b81810381811115610ca857610ca861287e565b634e487b7160e01b600052603260045260246000fd5b6000602082840312156129dd57600080fd5b815161223481612722565b600060a082018783526020878185015260a0604085015281875180845260c086019150828901935060005b81811015612a385784516001600160a01b031683529383019391830191600101612a13565b50506001600160a01b0396909616606085015250505060800152939250505056fe45524332303a207472616e7366657220616d6f756e7420657863656564732062616c616e636545524332303a207472616e7366657220616d6f756e74206578636565647320616c6c6f77616e636545524332303a2064656372656173656420616c6c6f77616e63652062656c6f77207a65726fa26469706673582212201e958aa8ea7c713037d6e7a6d548248b5f2ab00624666ec31ecbd5bcd230c97564736f6c63430008130033

Deployed Bytecode Sourcemap

29819:14270:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36493:355;;;;;;;;;;-1:-1:-1;36493:355:0;;;;;:::i;:::-;;:::i;:::-;;7681:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30448:25;;;;;;;;;;;;;;;;;;;1034::1;;;1022:2;1007:18;30448:25:0;888:177:1;9855:169:0;;;;;;;;;;-1:-1:-1;9855:169:0;;;;;:::i;:::-;;:::i;:::-;;;1691:14:1;;1684:22;1666:41;;1654:2;1639:18;9855:169:0;1526:187:1;42375:395:0;;;;;;;;;;;;;:::i;43049:549::-;;;;;;;;;;-1:-1:-1;43049:549:0;;;;;:::i;:::-;;:::i;31572:64::-;;;;;;;;;;-1:-1:-1;31572:64:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;29988:51;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;2554:32:1;;;2536:51;;2524:2;2509:18;29988:51:0;2363:230:1;8804:108:0;;;;;;;;;;-1:-1:-1;8892:12:0;;8804:108;;30482:30;;;;;;;;;;-1:-1:-1;30482:30:0;;;;-1:-1:-1;;;;;30482:30:0;;;30237:27;;;;;;;;;;;;;;;;31230:59;;;;;;;;;;-1:-1:-1;31230:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;30341:26;;;;;;;;;;;;;;;;35517:234;;;;;;;;;;-1:-1:-1;35517:234:0;;;;;:::i;:::-;;:::i;10507:355::-;;;;;;;;;;-1:-1:-1;10507:355:0;;;;;:::i;:::-;;:::i;42041:326::-;;;;;;;;;;-1:-1:-1;42041:326:0;;;;;:::i;:::-;;:::i;30199:25::-;;;;;;;;;;;;;;;;8645:93;;;;;;;;;;-1:-1:-1;8645:93:0;;8728:2;3594:36:1;;3582:2;3567:18;8645:93:0;3452:184:1;30162:30:0;;;;;;;;;;;;;;;;30713;;;;;;;;;;;;;;;;11272:218;;;;;;;;;;-1:-1:-1;11272:218:0;;;;;:::i;:::-;;:::i;30098:26::-;;;;;;;;;;;;;;;;30046:38;;;;;;;;;;;;;;;31177:44;;;;;;;;;;-1:-1:-1;31177:44:0;;;;;:::i;:::-;;;;;;;;;;;;-1:-1:-1;;;;;31177:44:0;;;30752:33;;;;;;;;;;-1:-1:-1;30752:33:0;;;;;;;;37500:125;;;;;;;;;;-1:-1:-1;37500:125:0;;;;;:::i;:::-;-1:-1:-1;;;;;37589:28:0;37565:4;37589:28;;;:19;:28;;;;;;;;;37500:125;30380:24;;;;;;;;;;;;;;;;42778:263;;;;;;;;;;-1:-1:-1;42778:263:0;;;;;:::i;:::-;;:::i;31298:49::-;;;;;;;;;;-1:-1:-1;31298:49:0;;;;;:::i;:::-;;;;;;;;;;;;;;30832:31;;;;;;;;;;-1:-1:-1;30832:31:0;;;;;;;;;;;8976:127;;;;;;;;;;-1:-1:-1;8976:127:0;;;;;:::i;:::-;-1:-1:-1;;;;;9077:18:0;9050:7;9077:18;;;;;;;;;;;;8976:127;29901:80;;;;;;;;;;-1:-1:-1;29901:80:0;;;;-1:-1:-1;;;;;29901:80:0;;;22183:148;;;;;;;;;;;;;:::i;30519:32::-;;;;;;;;;;-1:-1:-1;30519:32:0;;;;-1:-1:-1;;;;;30519:32:0;;;34935:120;;;;;;;;;;;;;:::i;35985:144::-;;;;;;;;;;-1:-1:-1;35985:144:0;;;;;:::i;:::-;;:::i;34770:112::-;;;;;;;;;;;;;:::i;30411:30::-;;;;;;;;;;;;;;;;21539:79;;;;;;;;;;-1:-1:-1;21604:6:0;;-1:-1:-1;;;;;21604:6:0;21539:79;;7901:104;;;;;;;;;;;;;:::i;37048:245::-;;;;;;;;;;-1:-1:-1;37048:245:0;;;;;:::i;:::-;;:::i;31356:59::-;;;;;;;;;;-1:-1:-1;31356:59:0;;;;;:::i;:::-;;;;;;;;;;;;;;36138:346;;;;;;;;;;-1:-1:-1;36138:346:0;;;;;:::i;:::-;;:::i;11994:269::-;;;;;;;;;;-1:-1:-1;11994:269:0;;;;;:::i;:::-;;:::i;9317:175::-;;;;;;;;;;-1:-1:-1;9317:175:0;;;;;:::i;:::-;;:::i;30131:24::-;;;;;;;;;;;;;;;;31795:58;;;;;;;;;;-1:-1:-1;31795:58:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;30792:33;;;;;;;;;;-1:-1:-1;30792:33:0;;;;;;;;;;;30271:25;;;;;;;;;;;;;;;;36857:182;;;;;;;;;;-1:-1:-1;36857:182:0;;;;;:::i;:::-;;:::i;35760:216::-;;;;;;;;;;-1:-1:-1;35760:216:0;;;;;:::i;:::-;;:::i;30564:35::-;;;;;;;;;;;;;;;;35127:381;;;;;;;;;;-1:-1:-1;35127:381:0;;;;;:::i;:::-;;:::i;43606:480::-;;;;;;;;;;-1:-1:-1;43606:480:0;;;;;:::i;:::-;;:::i;9556:151::-;;;;;;;;;;-1:-1:-1;9556:151:0;;;;;:::i;:::-;-1:-1:-1;;;;;9672:18:0;;;9645:7;9672:18;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;9556:151;30606:33;;;;;;;;;;;;;;;;30303:31;;;;;;;;;;;;;;;;31080:47;;;;;;;;;;;;;;;;22487:244;;;;;;;;;;-1:-1:-1;22487:244:0;;;;;:::i;:::-;;:::i;30646:24::-;;;;;;;;;;;;;;;;36493:355;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;;;;;;;;;36604:10:::1;:20:::0;;;36635:16:::1;:32:::0;;;36678:11:::1;:22:::0;;;36692:8;36726:29:::1;36654:13:::0;36617:7;36726:29:::1;:::i;:::-;:43;;;;:::i;:::-;36711:12;:58:::0;;;36804:2:::1;-1:-1:-1::0;36788:18:0::1;36780:60;;;::::0;-1:-1:-1;;;36780:60:0;;4887:2:1;36780:60:0::1;::::0;::::1;4869:21:1::0;4926:2;4906:18;;;4899:30;4965:31;4945:18;;;4938:59;5014:18;;36780:60:0::1;4685:353:1::0;36780:60:0::1;36493:355:::0;;;:::o;7681:100::-;7735:13;7768:5;7761:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7681:100;:::o;9855:169::-;9938:4;9955:39;363:10;9978:7;9987:6;9955:8;:39::i;:::-;-1:-1:-1;10012:4:0;9855:169;;;;;:::o;42375:395::-;42438:10;42430:49;;;;-1:-1:-1;;;42430:49:0;;5630:2:1;42430:49:0;;;5612:21:1;5669:2;5649:18;;;5642:30;-1:-1:-1;;;5688:18:1;;;5681:42;5740:18;;42430:49:0;5428:336:1;42430:49:0;42523:10;42537:1;42498:36;;;:24;:36;;;;;;42490:89;;;;-1:-1:-1;;;42490:89:0;;5971:2:1;42490:89:0;;;5953:21:1;6010:2;5990:18;;;5983:30;6049:34;6029:18;;;6022:62;-1:-1:-1;;;6100:18:1;;;6093:34;6144:19;;42490:89:0;5769:400:1;42490:89:0;42600:16;;42624:10;42600:16;42636:36;;;:24;:36;;;;;;;;42590:83;;-1:-1:-1;;;42590:83:0;;;;;6348:51:1;;;;6415:18;;;6408:34;-1:-1:-1;;;;;42600:16:0;;;;42590:33;;6321:18:1;;42590:83:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;42713:10:0;42725:36;;;;:24;:36;;;;;;;;;;42689:73;;1034:25:1;;;42713:10:0;;-1:-1:-1;42689:73:0;;-1:-1:-1;1007:18:1;42689:73:0;;;;;;;42375:395::o;43049:549::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43174:19:0;::::1;::::0;;::::1;::::0;:55:::1;;-1:-1:-1::0;;;;;;43206:23:0;::::1;::::0;::::1;43174:55;:86;;;;;43251:9;-1:-1:-1::0;;;;;43242:18:0::1;:5;-1:-1:-1::0;;;;;43242:18:0::1;;;43174:86;:129;;;;-1:-1:-1::0;;;;;;43273:16:0;;::::1;43301:1;43273:16:::0;;;:9:::1;:16;::::0;;;;;::::1;:30:::0;43174:129:::1;43160:431;;;-1:-1:-1::0;;;;;43395:16:0;;::::1;;::::0;;;:9:::1;:16;::::0;;;;;;;:28;;-1:-1:-1;;;;;;43395:28:0::1;::::0;;::::1;::::0;;::::1;::::0;;43438:25;;;:14:::1;:25:::0;;;;;:30;;-1:-1:-1;;43395:16:0;43438:30:::1;::::0;-1:-1:-1;;43438:30:0::1;:::i;:::-;::::0;;;-1:-1:-1;;43545:34:0::1;::::0;-1:-1:-1;;;;;43545:34:0;;::::1;::::0;;;::::1;::::0;::::1;::::0;;;::::1;43160:431;43049:549:::0;;:::o;35517:234::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;35636:4:::1;35630;35610:13;8892:12:::0;;;8804:108;35610:13:::1;:17;::::0;35626:1:::1;35610:17;:::i;:::-;:24;;;;:::i;:::-;35609:31;;;;:::i;:::-;35599:6;:41;;35591:101;;;::::0;-1:-1:-1;;;35591:101:0;;7050:2:1;35591:101:0::1;::::0;::::1;7032:21:1::0;7089:2;7069:18;;;7062:30;7128:34;7108:18;;;7101:62;-1:-1:-1;;;7179:18:1;;;7172:45;7234:19;;35591:101:0::1;6848:411:1::0;35591:101:0::1;35726:17;:6:::0;35736::::1;35726:17;:::i;:::-;35703:20;:40:::0;-1:-1:-1;35517:234:0:o;10507:355::-;10647:4;10664:36;10674:6;10682:9;10693:6;10664:9;:36::i;:::-;10711:121;10720:6;363:10;10742:89;10780:6;10742:89;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;10742:19:0;;;;;;:11;:19;;;;;;;;363:10;10742:33;;;;;;;;;;:37;:89::i;:::-;10711:8;:121::i;:::-;-1:-1:-1;10850:4:0;10507:355;;;;;:::o;42041:326::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;42151:31:0;::::1;42143:56;;;::::0;-1:-1:-1;;;42143:56:0;;5630:2:1;42143:56:0::1;::::0;::::1;5612:21:1::0;5669:2;5649:18;;;5642:30;-1:-1:-1;;;5688:18:1;;;5681:42;5740:18;;42143:56:0::1;5428:336:1::0;42143:56:0::1;42210:16;:36:::0;;-1:-1:-1;;;;;;42210:36:0::1;-1:-1:-1::0;;;;;42210:36:0;;::::1;::::0;;;::::1;::::0;;;42274:17:::1;::::0;42257:51:::1;::::0;42266:6;;42274:17:::1;-1:-1:-1::0;;42257:8:0::1;:51::i;:::-;42319:40;42335:17;42354:4;42319:15;:40::i;11272:218::-:0;363:10;11360:4;11409:25;;;:11;:25;;;;;;;;-1:-1:-1;;;;;11409:34:0;;;;;;;;;;11360:4;;11377:83;;11400:7;;11409:50;;11448:10;11409:38;:50::i;42778:263::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;42928:2:::1;42896:29;:34;42888:74;;;::::0;-1:-1:-1;;;42888:74:0;;7466:2:1;42888:74:0::1;::::0;::::1;7448:21:1::0;7505:2;7485:18;;;7478:30;7544:29;7524:18;;;7517:57;7591:18;;42888:74:0::1;7264:351:1::0;42888:74:0::1;42973:28;:60:::0;42778:263::o;22183:148::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;22274:6:::1;::::0;22253:40:::1;::::0;22290:1:::1;::::0;-1:-1:-1;;;;;22274:6:0::1;::::0;22253:40:::1;::::0;22290:1;;22253:40:::1;22304:6;:19:::0;;-1:-1:-1;;;;;;22304:19:0::1;::::0;;22183:148::o;34935:120::-;21752:6;;34987:4;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;35003:14:0::1;:22:::0;;-1:-1:-1;;35003:22:0::1;::::0;;;34935:120;:::o;35985:144::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36075:39:0;;;::::1;;::::0;;;:31:::1;:39;::::0;;;;:46;;-1:-1:-1;;36075:46:0::1;::::0;::::1;;::::0;;;::::1;::::0;;35985:144::o;34770:112::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;34825:13:::1;:20:::0;;-1:-1:-1;;34856:18:0;;;;;34770:112::o;7901:104::-;7957:13;7990:7;7983:14;;;;;:::i;37048:245::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;37155:13:::1;-1:-1:-1::0;;;;;37147:21:0::1;:4;-1:-1:-1::0;;;;;37147:21:0::1;::::0;37139:91:::1;;;::::0;-1:-1:-1;;;37139:91:0;;7822:2:1;37139:91:0::1;::::0;::::1;7804:21:1::0;7861:2;7841:18;;;7834:30;7900:34;7880:18;;;7873:62;7971:27;7951:18;;;7944:55;8016:19;;37139:91:0::1;7620:421:1::0;37139:91:0::1;37244:41;37273:4;37279:5;37244:28;:41::i;36138:346::-:0;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;36248:9:::1;:19:::0;;;36278:15:::1;:31:::0;;;36320:10:::1;:21:::0;;;36333:8;36366:27:::1;36296:13:::0;36260:7;36366:27:::1;:::i;:::-;:40;;;;:::i;:::-;36352:11;:54:::0;;;36440:2:::1;-1:-1:-1::0;36425:17:0::1;36417:59;;;::::0;-1:-1:-1;;;36417:59:0;;8248:2:1;36417:59:0::1;::::0;::::1;8230:21:1::0;8287:2;8267:18;;;8260:30;8326:31;8306:18;;;8299:59;8375:18;;36417:59:0::1;8046:353:1::0;11994:269:0;12087:4;12104:129;363:10;12127:7;12136:96;12175:15;12136:96;;;;;;;;;;;;;;;;;363:10;12136:25;;;;:11;:25;;;;;;;;-1:-1:-1;;;;;12136:34:0;;;;;;;;;;;;:38;:96::i;9317:175::-;9403:4;9420:42;363:10;9444:9;9455:6;9420:9;:42::i;36857:182::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;36942:28:0;::::1;;::::0;;;:19:::1;:28;::::0;;;;;;;;:39;;-1:-1:-1;;36942:39:0::1;::::0;::::1;;::::0;;::::1;::::0;;;36997:34;;1666:41:1;;;36997:34:0::1;::::0;1639:18:1;36997:34:0::1;;;;;;;;36857:182:::0;;:::o;35760:216::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;35883:4:::1;35877;35856:13;8892:12:::0;;;8804:108;35856:13:::1;:18;::::0;35872:2:::1;35856:18;:::i;:::-;:25;;;;:::i;:::-;35855:32;;;;:::i;:::-;35845:6;:42;;35837:91;;;::::0;-1:-1:-1;;;35837:91:0;;8606:2:1;35837:91:0::1;::::0;::::1;8588:21:1::0;8645:2;8625:18;;;8618:30;8684:34;8664:18;;;8657:62;-1:-1:-1;;;8735:18:1;;;8728:34;8779:19;;35837:91:0::1;8404:400:1::0;35837:91:0::1;35951:17;:6:::0;35961::::1;35951:17;:::i;:::-;35939:9;:29:::0;-1:-1:-1;35760:216:0:o;35127:381::-;21752:6;;35208:4;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;35264:6:::1;35244:13;8892:12:::0;;;8804:108;35244:13:::1;:17;::::0;35260:1:::1;35244:17;:::i;:::-;:26;;;;:::i;:::-;35231:9;:39;;35223:105;;;::::0;-1:-1:-1;;;35223:105:0;;9011:2:1;35223:105:0::1;::::0;::::1;8993:21:1::0;9050:2;9030:18;;;9023:30;9089:34;9069:18;;;9062:62;-1:-1:-1;;;9140:18:1;;;9133:51;9201:19;;35223:105:0::1;8809:417:1::0;35223:105:0::1;35379:4;35359:13;8892:12:::0;;;8804:108;35359:13:::1;:17;::::0;35375:1:::1;35359:17;:::i;:::-;:24;;;;:::i;:::-;35346:9;:37;;35338:102;;;::::0;-1:-1:-1;;;35338:102:0;;9433:2:1;35338:102:0::1;::::0;::::1;9415:21:1::0;9472:2;9452:18;;;9445:30;9511:34;9491:18;;;9484:62;-1:-1:-1;;;9562:18:1;;;9555:50;9622:19;;35338:102:0::1;9231:416:1::0;35338:102:0::1;-1:-1:-1::0;35450:18:0::1;:30:::0;35497:4:::1;::::0;35127:381::o;43606:480::-;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;43737:23:0;::::1;::::0;;::::1;::::0;:42:::1;;;43778:1;43764:11;:15;43737:42;43733:346;;;-1:-1:-1::0;;;;;43883:35:0;::::1;;::::0;;;:24:::1;:35:::0;;;;;:50;;43922:11;;43883:35;:50:::1;::::0;43922:11;;43883:50:::1;:::i;:::-;::::0;;;-1:-1:-1;;44017:50:0::1;::::0;1034:25:1;;;-1:-1:-1;;;;;44017:50:0;::::1;::::0;::::1;::::0;1022:2:1;1007:18;44017:50:0::1;888:177:1::0;22487:244:0;21752:6;;-1:-1:-1;;;;;21752:6:0;363:10;21752:22;21744:67;;;;-1:-1:-1;;;21744:67:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;22576:22:0;::::1;22568:73;;;::::0;-1:-1:-1;;;22568:73:0;;9854:2:1;22568:73:0::1;::::0;::::1;9836:21:1::0;9893:2;9873:18;;;9866:30;9932:34;9912:18;;;9905:62;-1:-1:-1;;;9983:18:1;;;9976:36;10029:19;;22568:73:0::1;9652:402:1::0;22568:73:0::1;22678:6;::::0;22657:38:::1;::::0;-1:-1:-1;;;;;22657:38:0;;::::1;::::0;22678:6:::1;::::0;22657:38:::1;::::0;22678:6:::1;::::0;22657:38:::1;22706:6;:17:::0;;-1:-1:-1;;;;;;22706:17:0::1;-1:-1:-1::0;;;;;22706:17:0;;;::::1;::::0;;;::::1;::::0;;22487:244::o;15190:381::-;-1:-1:-1;;;;;15326:19:0;;15318:68;;;;-1:-1:-1;;;15318:68:0;;10261:2:1;15318:68:0;;;10243:21:1;10300:2;10280:18;;;10273:30;10339:34;10319:18;;;10312:62;-1:-1:-1;;;10390:18:1;;;10383:34;10434:19;;15318:68:0;10059:400:1;15318:68:0;-1:-1:-1;;;;;15405:21:0;;15397:68;;;;-1:-1:-1;;;15397:68:0;;10666:2:1;15397:68:0;;;10648:21:1;10705:2;10685:18;;;10678:30;10744:34;10724:18;;;10717:62;-1:-1:-1;;;10795:18:1;;;10788:32;10837:19;;15397:68:0;10464:398:1;15397:68:0;-1:-1:-1;;;;;15479:18:0;;;;;;;:11;:18;;;;;;;;:27;;;;;;;;;;;;;:36;;;15531:32;;1034:25:1;;;15531:32:0;;1007:18:1;15531:32:0;;;;;;;;15190:381;;;:::o;37633:3531::-;-1:-1:-1;;;;;37765:18:0;;37757:68;;;;-1:-1:-1;;;37757:68:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;37844:16:0;;37836:64;;;;-1:-1:-1;;;37836:64:0;;;;;;;:::i;:::-;37917:6;37927:1;37917:11;37914:92;;37945:28;37961:4;37967:2;37971:1;37945:15;:28::i;37914:92::-;38022:14;;;;38019:1233;;;21604:6;;-1:-1:-1;;;;;38074:15:0;;;21604:6;;38074:15;;;;:49;;-1:-1:-1;21604:6:0;;-1:-1:-1;;;;;38110:13:0;;;21604:6;;38110:13;;38074:49;:86;;;;-1:-1:-1;;;;;;38144:16:0;;;;38074:86;:128;;;;-1:-1:-1;;;;;;38181:21:0;;38195:6;38181:21;;38074:128;:158;;;;-1:-1:-1;38224:8:0;;;;38223:9;38074:158;38052:1189;;;38270:13;;;;;;;38266:148;;-1:-1:-1;;;;;38315:25:0;;;;;;:19;:25;;;;;;;;;:52;;-1:-1:-1;;;;;;38344:23:0;;;;;;:19;:23;;;;;;;;38315:52;38307:87;;;;-1:-1:-1;;;38307:87:0;;11879:2:1;38307:87:0;;;11861:21:1;11918:2;11898:18;;;11891:30;-1:-1:-1;;;11937:18:1;;;11930:52;11999:18;;38307:87:0;11677:346:1;38307:87:0;-1:-1:-1;;;;;38467:31:0;;;;;;:25;:31;;;;;;;;:71;;;;-1:-1:-1;;;;;;38503:35:0;;;;;;:31;:35;;;;;;;;38502:36;38467:71;38463:763;;;38585:20;;38575:6;:30;;38567:96;;;;-1:-1:-1;;;38567:96:0;;12230:2:1;38567:96:0;;;12212:21:1;12269:2;12249:18;;;12242:30;12308:34;12288:18;;;12281:62;-1:-1:-1;;;12359:18:1;;;12352:51;12420:19;;38567:96:0;12028:417:1;38567:96:0;38724:9;;-1:-1:-1;;;;;9077:18:0;;9050:7;9077:18;;;;;;;;;;;38698:22;;:6;:22;:::i;:::-;:35;;38690:67;;;;-1:-1:-1;;;38690:67:0;;12652:2:1;38690:67:0;;;12634:21:1;12691:2;12671:18;;;12664:30;-1:-1:-1;;;12710:18:1;;;12703:49;12769:18;;38690:67:0;12450:343:1;38690:67:0;38463:763;;;-1:-1:-1;;;;;38836:29:0;;;;;;:25;:29;;;;;;;;:71;;;;-1:-1:-1;;;;;;38870:37:0;;;;;;:31;:37;;;;;;;;38869:38;38836:71;38832:394;;;38954:20;;38944:6;:30;;38936:97;;;;-1:-1:-1;;;38936:97:0;;13000:2:1;38936:97:0;;;12982:21:1;13039:2;13019:18;;;13012:30;13078:34;13058:18;;;13051:62;-1:-1:-1;;;13129:18:1;;;13122:52;13191:19;;38936:97:0;12798:418:1;38832:394:0;-1:-1:-1;;;;;39080:35:0;;;;;;:31;:35;;;;;;;;39076:150;;39173:9;;-1:-1:-1;;;;;9077:18:0;;9050:7;9077:18;;;;;;;;;;;39147:22;;:6;:22;:::i;:::-;:35;;39139:67;;;;-1:-1:-1;;;39139:67:0;;12652:2:1;39139:67:0;;;12634:21:1;12691:2;12671:18;;;12664:30;-1:-1:-1;;;12710:18:1;;;12703:49;12769:18;;39139:67:0;12450:343:1;39139:67:0;-1:-1:-1;;;;;39268:31:0;;;;;;:25;:31;;;;;;;;39264:385;;;-1:-1:-1;;;;;39396:13:0;;;39421:1;39396:13;;;:9;:13;;;;;;;:27;39392:246;;39486:136;39552:51;39597:5;39552:40;39563:28;;39552:6;:10;;:40;;;;:::i;:::-;:44;;:51::i;:::-;-1:-1:-1;;;;;39511:13:0;;;39486:39;39511:13;;;:9;:13;;;;;;;;;;;;39486:39;;:24;:39;;;;;:43;:136::i;:::-;-1:-1:-1;;;;;39469:13:0;;;39444:39;39469:13;;;:9;:13;;;;;;;;;;;;39444:39;;:24;:39;;;:178;39392:246;39704:4;39655:28;9077:18;;;;;;;;;;;39762;;39804:17;;39738:42;;;;;-1:-1:-1;;;;;39796:25:0;;;39804:17;;39796:25;:59;;;;;39839:15;-1:-1:-1;;;;;39825:30:0;:2;-1:-1:-1;;;;;39825:30:0;;;39796:59;:81;;;;;39864:13;-1:-1:-1;;;;;39859:18:0;:2;-1:-1:-1;;;;;39859:18:0;;;39796:81;39793:141;;;39893:15;:29;;-1:-1:-1;;;;;;39893:29:0;-1:-1:-1;;;;;39893:29:0;;;;;39793:141;39965:7;:35;;;;-1:-1:-1;39989:11:0;;;;;;;39965:35;:61;;;;-1:-1:-1;40018:8:0;;;;40017:9;39965:61;:110;;;;-1:-1:-1;;;;;;40044:31:0;;;;;;:25;:31;;;;;;;;40043:32;39965:110;:153;;;;-1:-1:-1;;;;;;40093:25:0;;;;;;:19;:25;;;;;;;;40092:26;39965:153;:194;;;;-1:-1:-1;;;;;;40136:23:0;;;;;;:19;:23;;;;;;;;40135:24;39965:194;39947:322;;;40186:8;:15;;-1:-1:-1;;40186:15:0;40197:4;40186:15;;;40216:10;:8;:10::i;:::-;40241:8;:16;;-1:-1:-1;;40241:16:0;;;39947:322;40297:8;;-1:-1:-1;;;;;40407:25:0;;40281:12;40407:25;;;:19;:25;;;;;;40297:8;;;;40296:9;;40407:25;;:52;;-1:-1:-1;;;;;;40436:23:0;;;;;;:19;:23;;;;;;;;40407:52;40404:99;;;-1:-1:-1;40486:5:0;40404:99;40516:12;40620:7;40617:493;;;-1:-1:-1;;;;;40671:29:0;;;;;;:25;:29;;;;;;;;:49;;;;;40719:1;40704:12;;:16;40671:49;40667:297;;;40747:33;40776:3;40747:24;40758:12;;40747:6;:10;;:24;;;;:::i;:33::-;40740:40;;40667:297;;;-1:-1:-1;;;;;40841:31:0;;;;;;:25;:31;;;;;;;;:50;;;;;40890:1;40876:11;;:15;40841:50;40838:126;;;40916:32;40944:3;40916:23;40927:11;;40916:6;:10;;:23;;;;:::i;:32::-;40909:39;;40838:126;40984:8;;40981:89;;41012:42;41028:4;41042;41049;41012:15;:42::i;:::-;41084:14;41094:4;41084:14;;:::i;:::-;;;40617:493;41123:33;41139:4;41145:2;41149:6;41123:15;:33::i;:::-;37746:3418;;;;37633:3531;;;:::o;17477:193::-;17563:7;17599:12;17591:6;;;;17583:29;;;;-1:-1:-1;;;17583:29:0;;;;;;;;:::i;:::-;-1:-1:-1;17623:9:0;17635:5;17639:1;17635;:5;:::i;:::-;17623:17;17477:193;-1:-1:-1;;;;;17477:193:0:o;16571:182::-;16629:7;;16661:5;16665:1;16661;:5;:::i;:::-;16649:17;;16690:1;16685;:6;;16677:46;;;;-1:-1:-1;;;16677:46:0;;13556:2:1;16677:46:0;;;13538:21:1;13595:2;13575:18;;;13568:30;13634:29;13614:18;;;13607:57;13681:18;;16677:46:0;13354:351:1;16677:46:0;16744:1;16571:182;-1:-1:-1;;;16571:182:0:o;37302:189::-;-1:-1:-1;;;;;37385:31:0;;;;;;:25;:31;;;;;;:39;;-1:-1:-1;;37385:39:0;;;;;;;;;;37443:40;;37385:39;;:31;37443:40;;;37302:189;;:::o;12754:575::-;-1:-1:-1;;;;;12894:20:0;;12886:70;;;;-1:-1:-1;;;12886:70:0;;;;;;;:::i;:::-;-1:-1:-1;;;;;12975:23:0;;12967:71;;;;-1:-1:-1;;;12967:71:0;;;;;;;:::i;:::-;13133;13155:6;13133:71;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;13133:17:0;;:9;:17;;;;;;;;;;;;:71;:21;:71::i;:::-;-1:-1:-1;;;;;13113:17:0;;;:9;:17;;;;;;;;;;;:91;;;;13238:20;;;;;;;:32;;13263:6;13238:24;:32::i;:::-;-1:-1:-1;;;;;13215:20:0;;;:9;:20;;;;;;;;;;;;:55;;;;13286:35;1034:25:1;;;13215:20:0;;13286:35;;;;;;1007:18:1;13286:35:0;888:177:1;17930:473:0;17988:7;18233:1;18238;18233:6;18229:47;;-1:-1:-1;18263:1:0;18256:8;;18229:47;18289:9;18301:5;18305:1;18301;:5;:::i;:::-;18289:17;-1:-1:-1;18334:1:0;18325:5;18329:1;18289:17;18325:5;:::i;:::-;:10;18317:56;;;;-1:-1:-1;;;18317:56:0;;13912:2:1;18317:56:0;;;13894:21:1;13951:2;13931:18;;;13924:30;13990:34;13970:18;;;13963:62;-1:-1:-1;;;14041:18:1;;;14034:31;14082:19;;18317:56:0;13710:397:1;18880:132:0;18938:7;18965:39;18969:1;18972;18965:39;;;;;;;;;;;;;;;;;:3;:39::i;41718:315::-;41801:4;41757:23;9077:18;;;;;;;;;;;;41829:20;;;41826:34;;41852:7;41718:315::o;41826:34::-;41872:33;41889:15;41872:16;:33::i;:::-;41988:15;;41980:45;;41948:21;;-1:-1:-1;;;;;41988:15:0;;41980:45;;;;;41948:21;;41927:18;41980:45;41927:18;41980:45;41948:21;41988:15;41980:45;;;;;;;;;;;;;;;;;;;19509:279;19595:7;19630:12;19623:5;19615:28;;;;-1:-1:-1;;;19615:28:0;;;;;;;;:::i;:::-;-1:-1:-1;19654:9:0;19666:5;19670:1;19666;:5;:::i;41173:537::-;41263:16;;;41277:1;41263:16;;;;;;;;41239:21;;41263:16;;;;;;;;;;-1:-1:-1;41263:16:0;41239:40;;41308:4;41290;41295:1;41290:7;;;;;;;;:::i;:::-;;;;;;:23;-1:-1:-1;;;;;41290:23:0;;;-1:-1:-1;;;;;41290:23:0;;;;;41334:15;-1:-1:-1;;;;;41334:20:0;;:22;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;41324:4;41329:1;41324:7;;;;;;;;:::i;:::-;;;;;;:32;-1:-1:-1;;;;;41324:32:0;;;-1:-1:-1;;;;;41324:32:0;;;;;41369:62;41386:4;41401:15;41419:11;41369:8;:62::i;:::-;41478:224;;-1:-1:-1;;;41478:224:0;;-1:-1:-1;;;;;41478:15:0;:66;;;;:224;;41559:11;;41585:1;;41629:4;;41656;;41676:15;;41478:224;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41228:482;41173:537;:::o;14:316:1:-;91:6;99;107;160:2;148:9;139:7;135:23;131:32;128:52;;;176:1;173;166:12;128:52;-1:-1:-1;;199:23:1;;;269:2;254:18;;241:32;;-1:-1:-1;320:2:1;305:18;;;292:32;;14:316;-1:-1:-1;14:316:1:o;335:548::-;447:4;476:2;505;494:9;487:21;537:6;531:13;580:6;575:2;564:9;560:18;553:34;605:1;615:140;629:6;626:1;623:13;615:140;;;724:14;;;720:23;;714:30;690:17;;;709:2;686:26;679:66;644:10;;615:140;;;619:3;804:1;799:2;790:6;779:9;775:22;771:31;764:42;874:2;867;863:7;858:2;850:6;846:15;842:29;831:9;827:45;823:54;815:62;;;;335:548;;;;:::o;1070:131::-;-1:-1:-1;;;;;1145:31:1;;1135:42;;1125:70;;1191:1;1188;1181:12;1125:70;1070:131;:::o;1206:315::-;1274:6;1282;1335:2;1323:9;1314:7;1310:23;1306:32;1303:52;;;1351:1;1348;1341:12;1303:52;1390:9;1377:23;1409:31;1434:5;1409:31;:::i;:::-;1459:5;1511:2;1496:18;;;;1483:32;;-1:-1:-1;;;1206:315:1:o;1718:388::-;1786:6;1794;1847:2;1835:9;1826:7;1822:23;1818:32;1815:52;;;1863:1;1860;1853:12;1815:52;1902:9;1889:23;1921:31;1946:5;1921:31;:::i;:::-;1971:5;-1:-1:-1;2028:2:1;2013:18;;2000:32;2041:33;2000:32;2041:33;:::i;:::-;2093:7;2083:17;;;1718:388;;;;;:::o;2111:247::-;2170:6;2223:2;2211:9;2202:7;2198:23;2194:32;2191:52;;;2239:1;2236;2229:12;2191:52;2278:9;2265:23;2297:31;2322:5;2297:31;:::i;2806:180::-;2865:6;2918:2;2906:9;2897:7;2893:23;2889:32;2886:52;;;2934:1;2931;2924:12;2886:52;-1:-1:-1;2957:23:1;;2806:180;-1:-1:-1;2806:180:1:o;2991:456::-;3068:6;3076;3084;3137:2;3125:9;3116:7;3112:23;3108:32;3105:52;;;3153:1;3150;3143:12;3105:52;3192:9;3179:23;3211:31;3236:5;3211:31;:::i;:::-;3261:5;-1:-1:-1;3318:2:1;3303:18;;3290:32;3331:33;3290:32;3331:33;:::i;:::-;2991:456;;3383:7;;-1:-1:-1;;;3437:2:1;3422:18;;;;3409:32;;2991:456::o;3641:416::-;3706:6;3714;3767:2;3755:9;3746:7;3742:23;3738:32;3735:52;;;3783:1;3780;3773:12;3735:52;3822:9;3809:23;3841:31;3866:5;3841:31;:::i;:::-;3891:5;-1:-1:-1;3948:2:1;3933:18;;3920:32;3990:15;;3983:23;3971:36;;3961:64;;4021:1;4018;4011:12;4062:356;4264:2;4246:21;;;4283:18;;;4276:30;4342:34;4337:2;4322:18;;4315:62;4409:2;4394:18;;4062:356::o;4423:127::-;4484:10;4479:3;4475:20;4472:1;4465:31;4515:4;4512:1;4505:15;4539:4;4536:1;4529:15;4555:125;4620:9;;;4641:10;;;4638:36;;;4654:18;;:::i;5043:380::-;5122:1;5118:12;;;;5165;;;5186:61;;5240:4;5232:6;5228:17;5218:27;;5186:61;5293:2;5285:6;5282:14;5262:18;5259:38;5256:161;;5339:10;5334:3;5330:20;5327:1;5320:31;5374:4;5371:1;5364:15;5402:4;5399:1;5392:15;5256:161;;5043:380;;;:::o;6453:168::-;6526:9;;;6557;;6574:15;;;6568:22;;6554:37;6544:71;;6595:18;;:::i;6626:217::-;6666:1;6692;6682:132;;6736:10;6731:3;6727:20;6724:1;6717:31;6771:4;6768:1;6761:15;6799:4;6796:1;6789:15;6682:132;-1:-1:-1;6828:9:1;;6626:217::o;10867:401::-;11069:2;11051:21;;;11108:2;11088:18;;;11081:30;11147:34;11142:2;11127:18;;11120:62;-1:-1:-1;;;11213:2:1;11198:18;;11191:35;11258:3;11243:19;;10867:401::o;11273:399::-;11475:2;11457:21;;;11514:2;11494:18;;;11487:30;11553:34;11548:2;11533:18;;11526:62;-1:-1:-1;;;11619:2:1;11604:18;;11597:33;11662:3;11647:19;;11273:399::o;13221:128::-;13288:9;;;13309:11;;;13306:37;;;13323:18;;:::i;14244:127::-;14305:10;14300:3;14296:20;14293:1;14286:31;14336:4;14333:1;14326:15;14360:4;14357:1;14350:15;14376:251;14446:6;14499:2;14487:9;14478:7;14474:23;14470:32;14467:52;;;14515:1;14512;14505:12;14467:52;14547:9;14541:16;14566:31;14591:5;14566:31;:::i;14632:980::-;14894:4;14942:3;14931:9;14927:19;14973:6;14962:9;14955:25;14999:2;15037:6;15032:2;15021:9;15017:18;15010:34;15080:3;15075:2;15064:9;15060:18;15053:31;15104:6;15139;15133:13;15170:6;15162;15155:22;15208:3;15197:9;15193:19;15186:26;;15247:2;15239:6;15235:15;15221:29;;15268:1;15278:195;15292:6;15289:1;15286:13;15278:195;;;15357:13;;-1:-1:-1;;;;;15353:39:1;15341:52;;15448:15;;;;15413:12;;;;15389:1;15307:9;15278:195;;;-1:-1:-1;;;;;;;15529:32:1;;;;15524:2;15509:18;;15502:60;-1:-1:-1;;;15593:3:1;15578:19;15571:35;15490:3;14632:980;-1:-1:-1;;;14632:980:1:o

Swarm Source

ipfs://1e958aa8ea7c713037d6e7a6d548248b5f2ab00624666ec31ecbd5bcd230c975
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.